X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=configure.in;h=be7ac121074d964893b1a9e43ee32ad5ce0f6100;hp=7d3341de46d3b23e250ff9abd77e2f054d59b462;hb=HEAD;hpb=523648cdc644e38efc12e381c4076c51d95bd923 diff --git a/configure.in b/configure.in index 7d3341de..1f7256dd 100644 --- a/configure.in +++ b/configure.in @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. dnl -dnl Written by and Copyright (C) 2001-2020 the +dnl Written by and Copyright (C) 2001-2023 the dnl Privoxy team. https://www.privoxy.org/ dnl dnl Based on the Internet Junkbuster originally written @@ -73,20 +73,19 @@ DB2HTML=$withval dnl ================================================================= dnl Application version number dnl ================================================================= +dnl CODE_STATUS can be "alpha", "beta", "stable" or "UNRELEASED", +dnl and will be used for CGI output. Increment version number and +dnl set status to "UNRELEASED" whenever git differs from the last +dnl release and no new release is near. VERSION_MAJOR=3 VERSION_MINOR=0 -VERSION_POINT=29 +VERSION_POINT=35 CODE_STATUS="UNRELEASED" dnl Timestamp (date +%s) used by the mtree-spec target. dnl Should be updated before releases but forgetting it isn't critical. -SOURCE_DATE_EPOCH=1605695571 - -dnl CODE_STATUS can be "alpha", "beta", "stable" or "UNRELEASED", -dnl and will be used for CGI output. Increment version number and -dnl set status to "UNRELEASED" whenever CVS differs from the last -dnl release and no new release is near. +SOURCE_DATE_EPOCH=1672586827 dnl ================================================================= dnl Substitute the version numbers @@ -158,6 +157,29 @@ AC_ARG_WITH(debug, ] ) +AC_ARG_WITH(assertions, [ --with-assertions Enable assertions]) +if test "x$with_assertions" != "xyes"; then + CFLAGS="$CFLAGS -DNDEBUG" +fi + +AC_ARG_WITH(asan, [ --with-asan Enable AddressSanitizer. Requires compiler support.]) +if test "x$with_asan" = "xyes"; then + CFLAGS="$CFLAGS -fsanitize=address" + LDFLAGS="$LDFLAGS -fsanitize=address" +fi + +AC_ARG_WITH(msan, [ --with-msan Enable MemorySanitizer. Requires compiler support.]) +if test "x$with_msan" = "xyes"; then + CFLAGS="$CFLAGS -fsanitize=memory" + LDFLAGS="$LDFLAGS -fsanitize=memory" +fi + +AC_ARG_WITH(usan, [ --with-usan Enable UndefinedBehaviorSanitizer. Requires compiler support.]) +if test "x$with_usan" = "xyes"; then + CFLAGS="$CFLAGS -fsanitize=undefined" + LDFLAGS="$LDFLAGS -fsanitize=undefined" +fi + dnl ================================================================= dnl Check for user and group validity dnl ================================================================= @@ -194,7 +216,7 @@ else ], [ if test $ID = no ; then - AC_MSG_ERROR(There is no 'id' programm on this system) + AC_MSG_ERROR(There is no 'id' program on this system) else AC_MSG_RESULT(none specified) USER=$with_user @@ -233,7 +255,7 @@ else ], [ if test $BGROUPS = no ; then - AC_MSG_ERROR(There is no 'groups' programm on this system) + AC_MSG_ERROR(There is no 'groups' program on this system) else AC_MSG_RESULT(none specified) GROUP=$with_group; @@ -339,16 +361,6 @@ fi AC_SUBST(W3M) AC_SUBST(DB2HTML) -dnl If we use rpm, we need to check where %_topdir is -AC_CHECK_PROGS(RPMBIN,rpm,false) -if test $RPMBIN != false; then - RPM_BASE=`rpm --eval "%{_topdir}"` - if test "$RPM_BASE" = ""; then - RPM_BASE=/usr/src/redhat - fi -fi -AC_SUBST(RPM_BASE) - dnl prefer openjade to jade dnl Check for jade, so we can build the documentation AC_CHECK_PROGS(JADEBIN,openjade jade,false) @@ -423,7 +435,7 @@ fi]) AC_ARG_ENABLE(static-linking, [ --enable-static-linking Use static linking instead of dynamic linking (ie. LDFLAGS=-static)], -[ if test $enableval = yes; then LDFLAGS="$LDFLAGS -static"; fi ]) +[ if test $enableval = yes; then LDFLAGS="$LDFLAGS -static"; use_static_pcre="yes"; fi ]) dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS old_CFLAGS_nospecial=$CFLAGS @@ -447,9 +459,10 @@ AC_ARG_ENABLE(pthread, [ --disable-pthread Don't use POSIX threads (pthreads)], [if test $enableval = no; then # Disable pthreads - if test $have_pthread = yes; then + if test $have_pthread = yes -a $target_type != mingw; then AC_MSG_WARN([pthreads seem to be available but you are using --disable-pthread.]) AC_MSG_WARN([This is almost always a mistake and can render Privoxy unacceptable slow.]) + AC_MSG_WARN([Also various Privoxy features only work when using threads and won't even compile without them.]) fi have_pthread=no fi]) @@ -602,9 +615,9 @@ AC_CHECK_FUNC(gmtime_r, [ AC_TRY_COMPILE([ # include ], [ - struct time *t; - struct tm *tm; - (void) gmtime_r(t, tm) + time_t t; + struct tm tm; + (void) gmtime_r(&t, &tm) ], [ AC_MSG_RESULT(ok) AC_DEFINE(HAVE_GMTIME_R) @@ -620,9 +633,9 @@ AC_CHECK_FUNC(localtime_r, [ AC_TRY_COMPILE([ # include ], [ - struct time *t; - struct tm *tm; - (void) localtime_r(t, tm) + time_t t; + struct tm tm; + (void) localtime_r(&t, &tm) ], [ AC_MSG_RESULT(ok) AC_DEFINE(HAVE_LOCALTIME_R) @@ -677,17 +690,6 @@ AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]), fi -dnl ================================================================= -dnl OS/2 specific -dnl ================================================================= - -case "$host" in -*-os2-emx*) SOCKET_LIB=-lsocket -;; -esac - -AC_SUBST(SOCKET_LIB) - dnl ================================================================= dnl Mac OSX specific dnl ================================================================= @@ -768,8 +770,6 @@ AC_CHECK_HEADERS([ \ ]) dnl Checks for library functions. -dnl bcopy is for PCRE -AC_CHECK_FUNCS([bcopy]) AC_PROG_GCC_TRADITIONAL AC_TYPE_SIGNAL AC_CHECK_FUNCS([ \ @@ -863,12 +863,48 @@ else ]) fi +AC_ARG_ENABLE(pcre2, +[ --disable-pcre2 Don't try to use pcre2 even if it's available], +[enableval2=$enableval], +[enableval2=yes]) +if test $enableval2 = yes; then + try_pcre2=yes +else + AC_MSG_WARN([Ignoring pcre2 even if it's available]) + try_pcre2=no + have_pcre2=no +fi + +if test $try_pcre2 != no; then dnl ================================================================= dnl Checks for libraries. dnl ================================================================= dnl Note: Some systems may have the library but not the system header dnl file, so we must check for both. dnl Also check for correct version +AC_CHECK_LIB(pcre2-8, pcre2_compile_8, [ + AC_CHECK_HEADER(pcre2.h, [ + AC_EGREP_HEADER(pcre2_pattern_info, pcre2.h,[have_pcre2=yes; AC_DEFINE(HAVE_PCRE2)], [AC_MSG_WARN([[pcre2 old version installed]]); have_pcre2=no]) + ], [ + AC_CHECK_HEADER(pcre2/pcre2.h, [ + AC_EGREP_HEADER(pcre2_pattern_info, pcre2/pcre2.h, [have_pcre2=yes; AC_DEFINE(PCRE2_H_IN_SUBDIR)], [AC_MSG_WARN([[pcre2 old version installed]]); have_pcre2=no]) + ], [have_pcre2=no]) + ], [#define PCRE2_CODE_UNIT_WIDTH 8]) +], [have_pcre2=no]) + +AC_CHECK_LIB(pcre2-posix, regcomp, [ + AC_CHECK_HEADER(pcre2posix.h, [ + AC_EGREP_HEADER(pcre2_regerror, pcre2posix.h, [have_pcre2posix=yes],[AC_MSG_WARN([[pcre2posix old version installed]]); have_pcre2posix=no]) + ], [ + AC_CHECK_HEADER(pcre/pcre2posix.h, [ + AC_EGREP_HEADER(pcre2_regerror, pcre2/pcre2posix.h, [have_pcre2posix=yes; AC_DEFINE(PCRE2POSIX_H_IN_SUBDIR)],[AC_MSG_WARN([[pcre2posix old version installed]]); have_pcre2posix=no]) + ], [have_pcre2posix=no]) + ]) +], [have_pcre2posix=no], -lpcre2-8) +fi + +if test $have_pcre2 = "no"; then + AC_CHECK_LIB(pcre, pcre_compile, [ AC_CHECK_HEADER(pcre.h, [ AC_EGREP_HEADER(pcre_fullinfo, pcre.h, [have_pcre=yes], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no]) @@ -889,6 +925,7 @@ AC_CHECK_LIB(pcreposix, regcomp, [ ]) ], [have_pcreposix=no], -lpcre) +fi dnl ================================================================ dnl libpcrs is temporarily disabled. dnl @@ -992,6 +1029,12 @@ AC_ARG_ENABLE(pcre-host-patterns, AC_DEFINE(FEATURE_PCRE_HOST_PATTERNS) fi]) +AC_ARG_ENABLE(pcre-jit-compilation, +[ --disable-pcre-jit-compilation Don't let pcrs use pcre JIT compilation even if pcre supports it.], +[if test $enableval != yes; then + AC_DEFINE(DISABLE_PCRE_JIT_COMPILATION) +fi]) + AC_ARG_ENABLE(external-filters, [ --enable-external-filters Allow to filter content with scripts and programs. Experimental.], [if test $enableval = yes; then @@ -1089,20 +1132,56 @@ fi # we don't need pcreposix, then link pcre dynamically; else # build it and link statically # + +#check for libpcre2 first. then regular pcre + +if test $have_pcre2 = "yes"; then + echo "using libpcre2" + STATIC_PCRE_ONLY=# + LIBS="$LIBS -lpcre2-8 -lpcre2-posix" + if test "$use_static_pcre" = "yes"; then + pcre_dyn=no + AC_DEFINE(PCRE2_STATIC,1,[Define to statically link to the pcre2 library on Windows.]) +# see pcre2-10.42/src/pcre2.h line 54 +# #if defined(_WIN32) && !defined(PCRE2_STATIC) +# # ifndef PCRE2_EXP_DECL +# # define PCRE2_EXP_DECL extern __declspec(dllimport) +# # endif +# #endif +# If you want to statically link a program against a PCRE2 library in the form of +# a non-dll .a file, you must define PCRE2_STATIC before including src/pcre2.h. +# Otherwise the exported functions will be declared __declspec(dllimport), +# with unwanted results. eg: build failures with error messages like +# undefined reference to `_imp__pcre2_compile_8' + else + pcre_dyn=yes + AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.]) + fi +else + if test $have_pcre = "yes"; then echo "using libpcre" - pcre_dyn=yes - AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.]) STATIC_PCRE_ONLY=# LIBS="$LIBS -lpcre -lpcreposix" + if test "$use_static_pcre" = "yes"; then + pcre_dyn=no + AC_DEFINE(PCRE_STATIC,1,[Define to statically link to pcre library on Windows.]) +# see /usr/i686-w64-mingw32/sys-root/mingw/include/pcre.h line 54 +# #if defined(_WIN32) && !defined(PCRE_STATIC) +# # ifndef PCRE_EXP_DECL +# # define PCRE_EXP_DECL extern __declspec(dllimport) +# # endif +# If you want to statically link a program against a PCRE library in the form of +# a non-dll .a file, you must define PCRE_STATIC before including pcre.h or +# pcrecpp.h, otherwise the pcre_malloc() and pcre_free() exported functions will +# be declared __declspec(dllimport), with unwanted results. + else + pcre_dyn=yes + AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.]) + fi else - AC_MSG_WARN([You are using the static PCRE code which is out of date and scheduled for removal, for details see: - http://sourceforge.net/mailarchive/forum.php?thread_name=20080511195555.2dc6cfdc%40fabiankeil.de&forum_name=ijbswa-developers]) - pcre_dyn=no - # STATIC_PCRE is a name pcre needs to statically link on Windows. - # Privoxy itself no longer uses it. - AC_DEFINE(STATIC_PCRE,1,[Define to statically link to internal outdated pcre on Windows.]) - STATIC_PCRE_ONLY= + AC_MSG_ERROR(Detected neither pcre2 nor pcre library.) +fi fi AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE) @@ -1135,7 +1214,7 @@ AC_SUBST(STATIC_PCRS_ONLY) FEATURE_HTTPS_INSPECTION_ONLY=# dnl ======================================================== -dnl check for mbedTLS which is required for https inspection +dnl check for mbedTLS which can be used for https inspection dnl ======================================================== FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=# OPT_MBEDTLS=no @@ -1167,7 +1246,7 @@ fi AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS) dnl ================================================================= -dnl check for OpenSSL/LibreSSL which is required for https inspection +dnl check for OpenSSL/LibreSSL which can be used for https inspection dnl ================================================================= FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=# OPT_OPENSSL=no @@ -1177,6 +1256,10 @@ AC_HELP_STRING([--without-openssl], [Disable OpenSSL/LibreSSL detection]), OPT_OPENSSL=$withval) if test X"$OPT_OPENSSL" != Xno; then + if test X"$OPT_MBEDTLS" != Xno; then + AC_MSG_ERROR([OpenSSL and mbedTLS support can't be enabled at the same time]) + fi + if test "$PORTNAME" != "win32"; then AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])]) FOUND_SSL_LIB="no" @@ -1201,6 +1284,7 @@ if test X"$OPT_OPENSSL" != Xno; then if test "x$FEATURE_HTTPS_INSPECTION_OPENSSL" = "xyes"; then AC_MSG_NOTICE([Detected OpenSSL. Enabling https inspection.]) + AC_MSG_WARN([If you intend to redistribute Privoxy, please make sure the "special exception" from section 3 of the GPLv2 applies.]) LIBS="$LIBS -lssl -lcrypto" old_CFLAGS_nospecial="$old_CFLAGS_nospecial" @@ -1211,6 +1295,45 @@ if test X"$OPT_OPENSSL" != Xno; then fi AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL) +dnl ======================================================== +dnl check for wolfSSL which can be used for https inspection +dnl ======================================================== +FEATURE_HTTPS_INSPECTION_ONLY_WOLFSSL=# +OPT_WOLFSSL=no +AC_ARG_WITH(wolfssl,dnl +AC_HELP_STRING([--with-wolfssl], [Enable Wolfssl/LibreSSL detection for https inspection.]) +AC_HELP_STRING([--without-wolfssl], [Disable Wolfssl/LibreSSL detection]), + OPT_WOLFSSL=$withval) + +if test X"$OPT_WOLFSSL" != Xno; then + if test X"$OPT_MBEDTLS" != Xno; then + AC_MSG_ERROR([wolfSSL and mbedTLS support can't be enabled at the same time]) + fi + if test X"$OPT_OPENSSL" != Xno; then + AC_MSG_ERROR([wolfSSL and OpenSSL support can't be enabled at the same time]) + fi + + AC_CHECK_LIB(wolfssl, wolfSSL_Init, [HAVE_WOLFSSL_INIT="yes"]) + + if test "x$HAVE_WOLFSSL_INIT" = "xyes"; then + AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled]) + AC_DEFINE(FEATURE_HTTPS_INSPECTION_WOLFSSL, 1, [if Wolfssl is enabled]) + AC_SUBST(FEATURE_HTTPS_INSPECTION_WOLFSSL, [1]) + FEATURE_HTTPS_INSPECTION="yes" + FEATURE_HTTPS_INSPECTION_WOLFSSL="yes" + fi + + if test "x$FEATURE_HTTPS_INSPECTION_WOLFSSL" = "xyes"; then + AC_MSG_NOTICE([Detected wolfSSL. Enabling https inspection.]) + + LIBS="$LIBS -lwolfssl" + + FEATURE_HTTPS_INSPECTION_ONLY= + FEATURE_HTTPS_INSPECTION_ONLY_WOLFSSL= + fi +fi +AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_WOLFSSL) + AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY) dnl ======================================================== @@ -1225,6 +1348,10 @@ AC_HELP_STRING([--without-brotli], [Disable Brotli detection]), if test X"$WITH_BROTLI" != Xno; then LIBS="$LIBS -lbrotlidec" + if test $target_type = mingw; then + # XXX: why does just the mingw build need this??? + LIBS="$LIBS -lbrotlicommon -lbrotlienc" + fi AC_CHECK_LIB(brotlidec, BrotliDecoderDecompress)