--- parser3/configure.ac 2015/09/03 18:05:38 1.1 +++ parser3/configure.ac 2025/01/25 15:39:30 1.68 @@ -1,10 +1,11 @@ -dnl Autoconf initialisation +dnl Autoconf initialization AC_PREREQ(2.59) -AC_INIT(parser, 3.4.4b) +AC_INIT(parser, 3.5.1) AC_CONFIG_SRCDIR(README) +AC_CONFIG_MACRO_DIRS(src/lib/ltdl/m4) -dnl Automake Initialisation +dnl Automake Initialization AM_INIT_AUTOMAKE @@ -45,7 +46,7 @@ AC_PROG_CXX AC_PROG_CC dnl most tests should be compiled with C compiler [especially qsort test] -AC_LANG_C +AC_LANG([C]) dnl Dll extension @@ -61,7 +62,22 @@ AC_SUBST(dll_extension) dnl Misc arguments AC_ARG_WITH(build-warnings, [ --with-build-warnings to enable build-time compiler warnings if gcc is used], AC_MSG_WARN(enabling compiler warnings) - CXXFLAGS="$CXXFLAGS -W -Wall -Wstrict-prototypes -Wmissing-prototypes" + CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=2 -Wextra -Wall -Wno-parentheses" +) + +AC_ARG_WITH(coverage, [ --with-coverage to enable gcov code coverage support], + AC_MSG_WARN(enabling gcov support) + CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'` + CXXFLAGS=`echo "$XXCFLAGS" | $SED -e 's/-O[0-9]*//g'` + CFLAGS="$CFLAGS -O0 -fprofile-arcs -ftest-coverage" + CXXFLAGS="$CXXFLAGS -O0 -fprofile-arcs -ftest-coverage" + LDFLAGS="$LDFLAGS -lgcov" +) + +AC_ARG_WITH(profiler, [ --with-profiler to enable gprof code profiler support], + AC_MSG_WARN(enabling gprof support) + CFLAGS="$CFLAGS -O0 -pg -g" + CXXFLAGS="$CXXFLAGS -O0 -pg -g" ) AC_ARG_WITH(assertions, [ --with-assertions to enable assertions], @@ -70,11 +86,16 @@ AC_ARG_WITH(assertions, [ --with-assert AC_DEFINE(NDEBUG,,assertions disabled) ) -AC_ARG_WITH(sjlj-exceptions,[ --with-sjlj-exceptions enable simple 'throw' from dynamic library], +AC_ARG_WITH(sjlj-exceptions, [ --with-sjlj-exceptions to enable simple 'throw' from dynamic library], AC_DEFINE(PA_WITH_SJLJ_EXCEPTIONS,,one can throw from dynamic library) ) +AC_ARG_WITH(system-cfg, [ --with-system-cfg=FILE to specify system-wide auto.p], + AC_DEFINE_UNQUOTED(SYSTEM_CONFIG_FILE,"$withval",system-wide auto.p) +) + + dnl Safe mode argument AC_ARG_ENABLE(safe-mode, [ --disable-safe-mode to enable reading and executing files belonging to group+user other then effective], @@ -103,8 +124,8 @@ fi dnl String stream argument -AC_ARG_ENABLE(stringstream, [ --disable-stringstream to disable stringstream usage. - when disabled table.save use more memory but it's safer on freebsd 4.x], +AC_ARG_ENABLE(stringstream, [ --disable-stringstream to disable stringstream usage. + when disabled table.save uses more memory, but more compilers are supported], [ if test "$enableval" = "no"; then AC_MSG_WARN(disabling stringstream usage) @@ -115,7 +136,7 @@ fi dnl GC argument -AC_ARG_WITH(gc,[ --with-gc[=D] D is the directory where +AC_ARG_WITH(gc,[ --with-gc[=DIR] DIR is the directory where Boehm garbage collecting library is installed],[ GC=$withval @@ -141,12 +162,12 @@ if test -z "$GC_OK"; then AC_MSG_CHECKING(for libgc) SAVE_LIBS=$LIBS LIBS="$LIBS $GC_LIBS" - AC_TRY_LINK([ extern int GC_dont_gc; ],[ GC_dont_gc=0; ], + PA_TRY_LINK([ extern int GC_dont_gc; ],[ GC_dont_gc=0; ], AC_MSG_RESULT(yes) , AC_MSG_RESULT(no) if test -z "$GC"; then - AC_MSG_ERROR(please specify path to libgc: --with-gc=D) + AC_MSG_ERROR(please specify path to libgc: --with-gc=DIR) else AC_MSG_ERROR($GC does not seem to be valid libgc installation directory) fi @@ -158,40 +179,60 @@ AC_SUBST(GC_LIBS) dnl PCRE argument -AC_ARG_WITH(pcre,[ --with-pcre=D D is the directory where +AC_ARG_WITH(pcre,[ --with-pcre=DIR DIR is the directory where PCRE library is installed],[ PCRE=$withval - PCRE_INCLUDES="-I$PCRE/include" - PCRE_LIBS="$PCRE/lib/libpcre.la" - - if test -f $PCRE/include/pcre.h -a -f $PCRE_LIBS; then - PCRE_OK="yes" - else - PCRE_LIBS="-L$PCRE -lpcre" - fi if test "$PCRE" = "yes"; then PCRE="" - PCRE_LIBS="-lpcre" - PCRE_INCLUDES="" AC_MSG_WARN([--with-pcre value was not specified, hoping linker would find it]) + else + PCRE_INCLUDES="-I$PCRE/include" + + if test -f $PCRE/include/pcre.h -a -f $PCRE/lib/libpcre.la; then + PCRE_OK="yes" + PCRE_LIBS="$PCRE/lib/libpcre.la" + else + if test -f $PCRE/include/pcre2.h -a -f $PCRE/lib/libpcre2-8.la; then + PCRE_OK="yes" + PCRE_LIBS="$PCRE/lib/libpcre2-8.la" + AC_DEFINE(HAVE_PCRE2,,PCRE2 is available) + else + PCRE_LIBS="-L$PCRE/lib" + fi + fi fi ],[ - PCRE_LIBS="-lpcre" - PCRE_INCLUDES="" AC_MSG_WARN([--with-pcre was not specified, hoping linker would find it]) ]) if test -z "$PCRE_OK"; then - AC_MSG_CHECKING(for prce) + AC_MSG_CHECKING(for pcre2) + SAVE_LIBS=$LIBS + LIBS="$LIBS $PCRE_LIBS $PCRE_INCLUDES -lpcre2-8" + PA_TRY_LINK([ #define PCRE2_CODE_UNIT_WIDTH 8 +#include ],[ void *v=pcre2_general_context_create(0,0,0); ], + AC_MSG_RESULT(yes) + PCRE_LIBS="$PCRE_LIBS -lpcre2-8" + AC_DEFINE(HAVE_PCRE2,,PCRE2 is available) + PCRE_OK="yes" + , + AC_MSG_RESULT(no) + ) + LIBS=$SAVE_LIBS +fi + +if test -z "$PCRE_OK"; then + AC_MSG_CHECKING(for pcre) + PCRE_LIBS="$PCRE_LIBS -lpcre" SAVE_LIBS=$LIBS LIBS="$LIBS $PCRE_LIBS $PCRE_INCLUDES" - AC_TRY_LINK([ #include ],[ const char *v=pcre_version(); ], + PA_TRY_LINK([ #include ],[ const char *v=pcre_version(); ], AC_MSG_RESULT(yes) , AC_MSG_RESULT(no) if test -z "$PCRE"; then - AC_MSG_ERROR(please specify path to PCRE: --with-pcre=D) + AC_MSG_ERROR(please specify path to PCRE: --with-pcre=DIR) else AC_MSG_ERROR($PCRE does not seem to be valid PCRE installation directory) fi @@ -204,7 +245,7 @@ AC_SUBST(PCRE_LIBS) dnl XML/XSLT argument -AC_ARG_WITH(xml,[ --with-xml=D D is the directory where +AC_ARG_WITH(xml,[ --with-xml=DIR DIR is the directory where Gnome XML libraries are installed],[ XML=$withval @@ -216,6 +257,7 @@ AC_ARG_WITH(xml,[ --with-xml=D AC_MSG_WARN([--with-xml value was not specified, hoping linker would find it]) else XML_INCLUDES="-I$XML/include -I$XML/include/libxml2" + XML_LIBS="-L$XML/lib $XML_LIBS" if test -f $XML/include/libxslt/xslt.h -a -f $XML/lib/libxml2.la \ -a -f $XML/lib/libxslt.la -a -f $XML/lib/libexslt.la; then @@ -228,12 +270,12 @@ AC_ARG_WITH(xml,[ --with-xml=D AC_MSG_CHECKING(for xml) SAVE_LIBS=$LIBS LIBS="$LIBS $XML_LIBS $XML_INCLUDES" - AC_TRY_LINK([ #include ],[ const char *v=xsltEngineVersion; ], + PA_TRY_LINK([ #include ],[ const char *v=xsltEngineVersion; ], AC_MSG_RESULT(yes) , AC_MSG_RESULT(no) if test -z "$XML"; then - AC_MSG_ERROR(please specify path to Gnome XML libraries: --with-xml=D) + AC_MSG_ERROR(please specify path to Gnome XML libraries: --with-xml=DIR) else AC_MSG_ERROR($XML does not seem to be valid Gnome XML installation directory) fi @@ -248,7 +290,7 @@ AC_SUBST(XML_LIBS) dnl Mail receive argument -AC_ARG_WITH(mailreceive,[ --with-mailreceive=D is the directory where +AC_ARG_WITH(mailreceive,[ --with-mailreceive=DIR is the directory where Gnome MIME library is installed],[ MIME=$withval GLIB="glib-2.0" @@ -258,6 +300,11 @@ AC_ARG_WITH(mailreceive,[ --with-mailre MIME="" MIME_INCLUDES=`pkg-config --cflags $GMIME 2>/dev/null` MIME_LIBS=`pkg-config --libs $GMIME 2>/dev/null` + if test -z "$MIME_LIBS"; then + GMIME="gmime-3.0" + MIME_INCLUDES=`pkg-config --cflags $GMIME 2>/dev/null` + MIME_LIBS=`pkg-config --libs $GMIME 2>/dev/null` + fi AC_MSG_WARN([--with-mailreceive value was not specified, hoping linker would find Gnome MIME library]) else MIME_INCLUDES="-I$MIME/include/$GMIME" @@ -278,12 +325,12 @@ AC_ARG_WITH(mailreceive,[ --with-mailre AC_MSG_CHECKING(for mime) SAVE_LIBS=$LIBS LIBS="$LIBS $MIME_LIBS $MIME_INCLUDES" - AC_TRY_LINK([ #include ],[ guint v=gmime_major_version; ], + PA_TRY_LINK([ #include ],[ guint v=gmime_major_version; ], AC_MSG_RESULT(yes) , AC_MSG_RESULT(no) if test -z "$MIME"; then - AC_MSG_ERROR(please specify path to Gnome MIME library: --with-mailreceive=D) + AC_MSG_ERROR(please specify path to Gnome MIME library: --with-mailreceive=DIR) else AC_MSG_ERROR($MIME does not seem to be valid Gnome MIME installation directory) fi @@ -361,11 +408,8 @@ AC_STRUCT_DIRENT_D_TYPE AC_SYS_LARGEFILE dnl Checks for C header files -AC_HEADER_STDC -AC_HEADER_TIME - AC_CHECK_HEADERS(stdio.h sys/types.h sys/stat.h stdlib.h stddef.h memory.h string.h strings.h inttypes.h stdint.h unistd.h) -AC_CHECK_HEADERS(assert.h limits.h ctype.h math.h process.h stdarg.h setjmp.h signal.h) +AC_CHECK_HEADERS(time.h sys/time.h assert.h limits.h ctype.h math.h process.h stdarg.h setjmp.h signal.h pthread.h) AC_CHECK_HEADERS(errno.h dirent.h fcntl.h io.h sys/file.h sys/locking.h sys/select.h sys/resource.h sys/wait.h) AC_CHECK_HEADERS(sys/socket.h netinet/in.h arpa/inet.h netdb.h) @@ -373,7 +417,10 @@ AC_CHECK_HEADERS(sys/socket.h netinet/in dnl Checks for libraries case "$host" in *-freebsd4*) - AC_DEFINE(FREEBSD4,,FreeBSD4X target platform) + AC_DEFINE(FREEBSD4,,FreeBSD4.X target platform) + ;; + *-freebsd1*) + AC_DEFINE(FREEBSD1X,,FreeBSD1X.X target platform) ;; *-sunos5.6* | *-solaris2.6*) AC_CHECK_LIB(xnet, main) @@ -396,8 +443,8 @@ AC_CHECK_LIB(crypt, crypt) dnl Checks for functions -AC_CHECK_FUNCS(flock _locking fcntl lockf ftruncate fchmod) -AC_CHECK_FUNCS(getrusage gettimeofday crypt sigsetjmp siglongjmp unsetenv) +AC_CHECK_FUNCS(flock fcntl lockf ftruncate fchmod) +AC_CHECK_FUNCS(getrusage gettimeofday crypt sigsetjmp siglongjmp unsetenv syslog) dnl on some linux[seen on 2.4] it's a macro @@ -406,7 +453,7 @@ PA_CHECK_SIGSETJMP dnl see comment above AC_LANG_PUSH(C++) -PA_CHECK_MATH_FUNCS_ONE_ARG(trunc round sign) +PA_CHECK_MATH_FUNCS_ONE_ARG(trunc round sign isfinite) AC_LANG_POP @@ -418,17 +465,26 @@ dnl For build-in date implementation we AC_LANG_PUSH(C++) AC_MSG_CHECKING(for timezone variable) -AC_TRY_COMPILE([#include ], [int test=timezone;], AC_DEFINE(HAVE_TIMEZONE) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) +PA_TRY_COMPILE([#include ], [int test=timezone;], AC_DEFINE(HAVE_TIMEZONE) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) AC_LANG_POP AC_MSG_CHECKING(for tm_gmtoff in struct tm) -AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_gmtoff=0;], AC_DEFINE(HAVE_TM_GMTOFF) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) +PA_TRY_COMPILE([#include ], [struct tm tm; tm.tm_gmtoff=0;], AC_DEFINE(HAVE_TM_GMTOFF) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) AC_MSG_CHECKING(for tm_tzadj in struct tm) -AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_tzadj=0;], AC_DEFINE(HAVE_TM_TZADJ) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) +PA_TRY_COMPILE([#include ], [struct tm tm; tm.tm_tzadj=0;], AC_DEFINE(HAVE_TM_TZADJ) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) + +AC_MSG_CHECKING(for gettid) +PA_TRY_COMPILE([ +#include +#include +], [uint tid=syscall(__NR_gettid);], AC_DEFINE(HAVE_GETTID) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) + +AC_MSG_CHECKING(for TLS) +PA_TRY_COMPILE([__thread int i=0;], [], AC_DEFINE(HAVE_TLS) AC_MSG_RESULT(yes), AC_MSG_RESULT(no)) AC_MSG_CHECKING(for 0..9999 year date range support) -AC_TRY_RUN([ +AC_RUN_IFELSE([AC_LANG_SOURCE([ #include #include @@ -443,30 +499,32 @@ int main() { tmH.tm_mday=31; return mktime(&tmL)==-1 || mktime(&tmH)==-1; } -], AC_DEFINE(PA_DATE64) AC_MSG_RESULT(yes), AC_MSG_RESULT(no), AC_MSG_RESULT(no)) +])], AC_DEFINE(PA_DATE64) AC_MSG_RESULT(yes), AC_MSG_RESULT(no), AC_MSG_RESULT(no)) dnl Output header and makefiles AH_TEMPLATE([HAVE_TIMEZONE],[Define if you have timezone external variable in ]) AH_TEMPLATE([HAVE_TM_GMTOFF],[Define if you have tm_gmtoff member of tm structure in ]) AH_TEMPLATE([HAVE_TM_TZADJ],[Define if you have tm_tzadj member of tm structure in ]) +AH_TEMPLATE([HAVE_GETTID],[Define if you have gettid()]) +AH_TEMPLATE([HAVE_TLS],[Define if you have Thread-Local Storage]) AH_TEMPLATE([PA_DATE64],[Define if you have 0..9999 year date range support]) -AM_CONFIG_HEADER(src/include/pa_config_auto.h) +AC_CONFIG_HEADERS(src/include/pa_config_auto.h) -AC_OUTPUT( - Makefile - src/Makefile - src/types/Makefile - src/classes/Makefile - src/include/Makefile - src/main/Makefile - src/sql/Makefile - src/lib/Makefile - src/lib/gd/Makefile - src/lib/smtp/Makefile - src/lib/gc/Makefile +AC_CONFIG_FILES([ + Makefile + src/Makefile + src/types/Makefile + src/classes/Makefile + src/include/Makefile + src/main/Makefile + src/sql/Makefile + src/lib/Makefile + src/lib/gd/Makefile + src/lib/smtp/Makefile + src/lib/gc/Makefile src/lib/gc/include/Makefile - src/lib/pcre/Makefile + src/lib/pcre/Makefile src/lib/cord/Makefile src/lib/cord/include/Makefile src/lib/cord/include/private/Makefile @@ -483,5 +541,5 @@ AC_OUTPUT( src/targets/isapi/Makefile etc/Makefile etc/parser3.charsets/Makefile - bin/Makefile - bin/auto.p.dist) + etc/auto.p]) +AC_OUTPUT