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-2021 the
dnl Privoxy team. https://www.privoxy.org/
dnl
dnl Based on the Internet Junkbuster originally written
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=34
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=1545411710
-
-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=1636218132
dnl =================================================================
dnl Substitute the version numbers
]
)
+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 =================================================================
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)
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
[ --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])
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 =================================================================
])
dnl Checks for library functions.
-dnl bcopy is for PCRE
-AC_CHECK_FUNCS([bcopy])
AC_PROG_GCC_TRADITIONAL
AC_TYPE_SIGNAL
AC_CHECK_FUNCS([ \
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
#
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(pcre library not detected.)
fi
AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE)
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
fi
AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS)
-dnl ========================================================
-dnl check for OpenSSL which is required for https inspection
-dnl ========================================================
+dnl =================================================================
+dnl check for OpenSSL/LibreSSL which can be used for https inspection
+dnl =================================================================
FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=#
OPT_OPENSSL=no
AC_ARG_WITH(openssl,dnl
-AC_HELP_STRING([--with-openssl], [Enable OpenSSL detection for https inspection.])
-AC_HELP_STRING([--without-openssl], [Disable OpenSSL detection]),
+AC_HELP_STRING([--with-openssl], [Enable OpenSSL/LibreSSL detection for https inspection.])
+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"
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"
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)