--- parser3/configure.ac 2020/12/07 17:16:42 1.37 +++ parser3/configure.ac 2025/01/25 15:50:02 1.69 @@ -1,7 +1,8 @@ -dnl Autoconf initialisation +dnl Autoconf initialization AC_PREREQ(2.59) -AC_INIT(parser, 3.4.6b) +AC_INIT(parser, 3.5.2b) AC_CONFIG_SRCDIR(README) +AC_CONFIG_MACRO_DIRS(src/lib/ltdl/m4) dnl Automake Initialization @@ -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,7 @@ 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 -Wextra -Wall -Wno-parentheses" + CXXFLAGS="$CXXFLAGS -D_FORTIFY_SOURCE=2 -Wextra -Wall -Wno-parentheses" ) AC_ARG_WITH(coverage, [ --with-coverage to enable gcov code coverage support], @@ -95,11 +96,6 @@ AC_ARG_WITH(system-cfg, [ --with-system ) -AC_ARG_WITH(system-log, [ --with-system-log=FILE to specify system-wide parser3.log], - AC_DEFINE_UNQUOTED(SYSTEM_LOG_FILE,"$withval",system-wide parser3.log) -) - - 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], @@ -166,7 +162,7 @@ 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) @@ -186,32 +182,52 @@ dnl PCRE argument 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/lib -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) @@ -254,7 +270,7 @@ AC_ARG_WITH(xml,[ --with-xml=DIR 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) @@ -309,7 +325,7 @@ 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) @@ -392,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) @@ -430,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 @@ -452,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 @@ -477,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 @@ -517,4 +541,5 @@ AC_OUTPUT( src/targets/isapi/Makefile etc/Makefile etc/parser3.charsets/Makefile - etc/auto.p) + etc/auto.p]) +AC_OUTPUT