dnl Process this file with autoconf to produce a configure script.
dnl
-dnl $Id: configure.in,v 1.165 2011/12/10 17:25:37 fabiankeil Exp $
-dnl
-dnl Written by and Copyright (C) 2001-2010 the
-dnl Privoxy team. http://www.privoxy.org/
+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
dnl by and Copyright (C) 1997 Anonymous Coders and
dnl AutoConf Initialization
dnl =================================================================
-AC_REVISION($Revision: 1.165 $)
+AC_REVISION($Revision: 1.213 $)
AC_INIT(jcc.c)
if test ! -f config.h.in; then
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=19
-CODE_STATUS="stable"
+VERSION_POINT=35
+CODE_STATUS="UNRELEASED"
-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.
+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=1672586827
dnl =================================================================
dnl Substitute the version numbers
AC_SUBST(VERSION_MINOR)
AC_SUBST(VERSION_POINT)
AC_SUBST(CODE_STATUS)
+AC_SUBST(SOURCE_DATE_EPOCH)
dnl
AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR})
]
)
+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 =================================================================
-if test "$EMXOS2" = yes; then
+if test "$host_os" = haiku; then
echo "Skipping user and group validity stuff.";
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
AC_MSG_RESULT($with_group)
$BGROUPS $USER >/dev/null
if test $? -eq 0 ; then
- # FIXME: this fails if valid group, but not first group
- # listed.
- if test "$with_group" != "`$BGROUPS $USER | sed 's/.*: //' 2>/dev/null |$AWK '{print $1}'`" ; then
+ for i in `$BGROUPS $USER | sed 's/.*: //' 2>/dev/null`; do
+ if test "x$i" = "x$with_group" ; then
+ GROUP=$with_group
+ break
+ fi
+ done
+ if test "x$GROUP" != "x$with_group" ; then
AC_MSG_ERROR(The given value '$withval' does not match group entry)
- else
- GROUP=$with_group;
fi
else
AC_MSG_ERROR(There is no group entry for user '$USER')
],
[
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;
dodk=no
if test $target_type = unix; then
case "$host_os" in
- linux* | gnu*)
+ linux* | gnu* | *bsd*)
dodk=yes
;;
esac
if test $target_type = mingw; then
WIN_ONLY=
CFLAGS="$CFLAGS -DWINVER=0x501"
- SPECIAL_CFLAGS="-mwindows -mno-cygwin"
- PTHREAD_LIB=-lpthreadGC
+ SPECIAL_CFLAGS="-mwindows"
+dnl from the cygwin FAQ: The regular setup allows you to use the -mwindows option
+dnl to include a set of the basic libraries user32, gdi32 and comdlg32.
+dnl (and also make your program a GUI program instead of a console program)
+ PTHREAD_LIB=-lpthread
echo "Using mingw32 (Win32 GUI)"
else
WIN_ONLY=#
fi
AC_SUBST(WIN_ONLY)
-dnl Checking which text html browser we have available
if test $dodk != no; then
- AC_CHECK_PROGS(WDUMP,w3m lynx links,false)
- if test "$WDUMP" = false; then
- AC_MSG_WARN(You need some kind of text browser to build documentation \(w3m, lynx and links are supported\))
+ AC_CHECK_PROGS(W3M, w3m, false)
+ if test "$W3M" = false; then
+ AC_MSG_WARN(You need w3m to build text documentation.)
fi
if test $DB2HTML = false; then
dnl We need to clean the variable, otherwise AC_CHECK_PROGS
AC_CHECK_PROGS(DB2HTML,db2html docbook2html,false)
fi
fi
-AC_SUBST(WDUMP)
+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,jade openjade,false)
+AC_CHECK_PROGS(JADEBIN,openjade jade,false)
AC_SUBST(JADEBIN)
+dnl Prefer OpenSP to SP
+dnl ref: https://lists.privoxy.org/pipermail/privoxy-devel/2018-November/000293.html
+AC_CHECK_PROGS(NSGMLS,onsgmls nsgmls,false)
+AC_SUBST(NSGMLS)
+
dnl Check for man2html for docs.
AC_CHECK_PROGS(MAN2HTML,man2html,false)
AC_SUBST(MAN2HTML)
for i in /usr/share/sgml/CATALOG.docbk30 \
/usr/share/sgml/CATALOG.docbk31 \
/usr/share/sgml/CATALOG.docbk31 \
+ /usr/local/share/sgml/docbook/2.4.1/docbook.cat \
/usr/local/share/sgml/docbook/3.0/docbook.cat \
/usr/local/share/sgml/docbook/3.1/docbook.cat \
/usr/share/sgml/docbook/dtd/3.1/docbook.cat \
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D_LARGEFILE_SOURCE=1"
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"; use_static_pcre="yes"; fi ])
+
dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
old_CFLAGS_nospecial=$CFLAGS
CFLAGS="$CFLAGS $SPECIAL_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])
AC_SUBST(PTHREAD_ONLY)
+dnl =================================================================
+dnl On most platforms select() does not support fd numbers above
+dnl FD_SETSIZE, as a result Privoxy can't handle more than
+dnl approximately FD_SETSIZE/2 client connections.
+dnl On some platforms the value can be changed at compile time,
+dnl on others it's hardcoded and requires recompilation of the OS.
+dnl Only relevant if select() is actually being used.
+dnl =================================================================
+AC_ARG_WITH(fdsetsize,
+ [ --with-fdsetsize=n Optimistically redefine FD_SETSIZE with the intend to change the number of connections Privoxy can handle. Dangerous if the platform doesn't support this. Pointless if Privoxy can use poll() instead of select().],
+ [
+ if test "x$withval" != "xyes"; then
+ AC_DEFINE_UNQUOTED(FD_SETSIZE,$with_fdsetsize,[Relevant for select(). Not honoured by all OS.])
+ echo "Redefining FD_SETSIZE to $with_fdsetsize."
+ AC_MSG_WARN(On platforms that don't support FD_SETSIZE redefinition it may cause memory corruption.)
+ else
+ AC_MSG_ERROR(--with-fdsetsize used without value)
+ fi
+ ]
+)
+
dnl =================================================================
dnl Support for thread-safe versions of gethostbyaddr, gethostbyname,
dnl gmtime and localtime
AC_TRY_COMPILE([
# include <time.h>
], [
- 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)
AC_TRY_COMPILE([
# include <time.h>
], [
- 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)
dnl Solaris problem, and others perhaps (socklen_t is undefined)
dnl =================================================================
+if test $target_type != mingw; then
+# i686-w64-mingw32-gcc gets socklen_t define from ws2tcpip.h
+
AC_MSG_CHECKING([for socklen_t])
AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]),
AC_MSG_RESULT([no])
AC_DEFINE(socklen_t,int,
[ Define to 'int' if <sys/socket.h> doesn't have it. ]))
-
-dnl =================================================================
-dnl OS/2 specific
-dnl =================================================================
-
-case "$host" in
-*-os2-emx*) SOCKET_LIB=-lsocket
-;;
-esac
-
-AC_SUBST(SOCKET_LIB)
+fi
dnl =================================================================
dnl Mac OSX specific
esac
dnl =================================================================
-dnl AmigaOS specific
+dnl Haiku specific
dnl =================================================================
-AMIGAOS_ONLY=#
+if test "$host_os" = haiku; then
+ # Omit the "-pthread" flag to gcc, even when building with gcc 2.95
+ SPECIAL_CFLAGS=
-case "$host" in
-*-amigaos) AMIGAOS_ONLY=
-;;
-esac
+ # Haiku's pthreads implementation exists in its system library,
+ # libroot, not in a separate pthreads library
+ PTHREAD_LIB=
-AC_SUBST(AMIGAOS_ONLY)
+ # Networking code exists in libnetwork
+ SOCKET_LIB=-lnetwork
+
+ # Search Haiku's common-library folder to find its pcre and
+ # pcreposix libraries
+ LIBS="-L/boot/common/lib $LIBS"
+fi
dnl =================================================================
dnl Check for standard compiler stuff
AC_CHECK_SIZEOF(long, 4)
AC_CHECK_SIZEOF(long long, 8)
AC_CHECK_SIZEOF(size_t, 4)
+AC_CHECK_SIZEOF(time_t, 8)
dnl Checks for header files.
-dnl AC_HEADER_SYS_WAIT
-dnl AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/time.h unistd.h)
-AC_CHECK_HEADERS([OS.h arpa/inet.h errno.h fcntl.h limits.h locale.h netdb.h netinet/in.h stddef.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h sys/timeb.h sys/wait.h unistd.h])
+AC_CHECK_HEADERS([ \
+ OS.h \
+ arpa/inet.h \
+ errno.h \
+ fcntl.h \
+ limits.h \
+ locale.h \
+ netdb.h \
+ netinet/in.h \
+ stddef.h \
+ stdlib.h \
+ string.h \
+ sys/ioctl.h \
+ sys/socket.h \
+ sys/time.h \
+ sys/timeb.h \
+ sys/wait.h \
+ unistd.h \
+])
dnl Checks for library functions.
-dnl bcopy is for PCRE
-AC_CHECK_FUNCS([bcopy])
AC_PROG_GCC_TRADITIONAL
AC_TYPE_SIGNAL
-AC_CHECK_FUNCS([access atexit getcwd gethostbyaddr gethostbyaddr_r gethostbyname gethostbyname_r gettimeofday inet_ntoa localtime_r memchr memmove memset poll putenv random regcomp select setlocale snprintf socket strchr strdup strerror strftime strlcat strlcpy strptime strstr strtoul timegm tzset])
+AC_CHECK_FUNCS([ \
+ access \
+ arc4random \
+ atexit \
+ calloc \
+ getcwd \
+ gethostbyaddr \
+ gethostbyaddr_r \
+ gethostbyname \
+ gethostbyname_r \
+ gettimeofday \
+ inet_ntoa \
+ memchr \
+ memmove \
+ memset \
+ nanosleep \
+ poll \
+ putenv \
+ random \
+ regcomp \
+ select \
+ setlocale \
+ shutdown \
+ snprintf \
+ socket \
+ strchr \
+ strdup \
+ strerror \
+ strftime \
+ strlcat \
+ strlcpy \
+ strptime \
+ strtoul \
+ timegm \
+ tzset \
+])
dnl Checks for RFC 2553 resolver and socket functions
AC_ARG_ENABLE(ipv6-support,
AC_MSG_CHECKING(getaddrinfo in ws2_32)
AC_TRY_LINK(
[
+ #include<winsock2.h>
#include<windows.h>
#include<ws2tcpip.h>
],
AC_MSG_CHECKING(getnameinfo in ws2_32)
AC_TRY_LINK(
[
+ #include<winsock2.h>
#include<windows.h>
#include<ws2tcpip.h>
],
])
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])
])
], [have_pcreposix=no], -lpcre)
+fi
dnl ================================================================
dnl libpcrs is temporarily disabled.
dnl
AC_DEFINE(FEATURE_STATISTICS)
fi],AC_DEFINE(FEATURE_STATISTICS))
-AC_ARG_ENABLE(ie-images,
-[ --enable-ie-images Enable a quick but not always reliable auto-detect whether requests from
- MS Internet Explorer are for an image or not.],
+AC_ARG_ENABLE(extended-statistics,
+[ --enable-extended-statistics Gather extended statistics.],
[if test $enableval = yes; then
- AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE)
-fi],)
+ AC_DEFINE(FEATURE_EXTENDED_STATISTICS)
+fi])
AC_ARG_ENABLE(image-blocking,
[ --disable-image-blocking Don't try to figure out whether a request is
AC_DEFINE(FEATURE_IMAGE_BLOCKING))
AC_ARG_ENABLE(acl-support,
-[ --disable-acl-support Prevents the use of ACLs to control access to
+[ --disable-acl-support Prevents the use of ACLs to control access to
Privoxy by IP address.],
[if test $enableval = yes; then
AC_DEFINE(FEATURE_ACL)
AC_DEFINE(FEATURE_GRACEFUL_TERMINATION)
fi])
-AC_ARG_ENABLE(extended-host-patterns,
-[ --enable-extended-host-patterns Enable and require PCRE syntax in host patterns. This feature hasn't
- been announced yet and it's not clear if it's a good idea. It's expected
- to work, but undocumented. You should only enable it if you know what
- PCRE is and are sure that you need it for your host patterns. You can
- use tools/url-pattern-translator.pl to convert existing action files to
- use PCRE host patterns. Please don't enable this option when creating
- packages for others that may not be expecting it.],
+AC_ARG_ENABLE(pcre-host-patterns,
+[ --enable-pcre-host-patterns Allow to use PCRE syntax in host patterns by prefixing the pattern with
+ "PCRE-HOST-PATTERN:". You can use tools/url-pattern-translator.pl to
+ convert existing action files to use PCRE host patterns.],
[if test $enableval = yes; then
- AC_DEFINE(FEATURE_EXTENDED_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
+ AC_DEFINE(FEATURE_EXTERNAL_FILTERS,1,[Define to 1 to allow to filter content with scripts and programs.])
fi])
AC_ARG_ENABLE(accept-filter,
AC_DEFINE(FEATURE_ACCEPT_FILTER)
fi])
+AC_ARG_ENABLE(strptime-sanity-checks,
+[ --enable-strptime-sanity-checks Only trust strptime() results if an additional strftime()/strptime()
+ conversion doesn't change the result. Can be useful if strptime() is
+ known or suspected to be broken.],
+[if test $enableval = yes; then
+ AC_DEFINE(FEATURE_STRPTIME_SANITY_CHECKS)
+fi])
+
+AC_ARG_ENABLE(client-tags,
+[ --disable-client-tags Disable support for client-specific tags],
+[ if test $enableval = "no"; then have_client_tags=no; fi ])
+if test "${have_client_tags}" = "no"; then
+ echo "Disabling support for client-specific tags."
+ FEATURE_CLIENT_TAGS_ONLY="#"
+else
+ echo "Enabling support for client-specific tags."
+ AC_DEFINE(FEATURE_CLIENT_TAGS,1,[Define to enable support for client-specific tags.])
+ FEATURE_CLIENT_TAGS_ONLY=""
+fi
+AC_SUBST(FEATURE_CLIENT_TAGS_ONLY)
+
+FUZZ_ONLY="#"
+AC_ARG_ENABLE(fuzz,
+[ --enable-fuzz Enable code that makes fuzzing more convenient],
+[if test $enableval = yes; then
+ FUZZ_ONLY=""
+ AC_DEFINE(FUZZ,1,[Define to make fuzzing more convenient.])
+fi])
+AC_SUBST(FUZZ_ONLY)
+
dnl pcre/pcrs is needed for CGI anyway, so
dnl the choice is only between static and
dnl dynamic:
# 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
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
- AC_DEFINE(STATIC_PCRE)
- STATIC_PCRE_ONLY=
+ AC_MSG_ERROR(Detected neither pcre2 nor pcre library.)
+fi
fi
AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE)
AC_SUBST(STATIC_PCRE_ONLY)
AC_SUBST(STATIC_PCRS_ONLY)
+FEATURE_HTTPS_INSPECTION_ONLY=#
+dnl ========================================================
+dnl check for mbedTLS which can be used for https inspection
+dnl ========================================================
+FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=#
+OPT_MBEDTLS=no
+AC_ARG_WITH(mbedtls,dnl
+AC_HELP_STRING([--with-mbedtls], [Enable mbedTLS detection for https inspection.])
+AC_HELP_STRING([--without-mbedtls], [Disable mbedTLS detection]),
+ OPT_MBEDTLS=$withval)
+
+if test X"$OPT_MBEDTLS" != Xno; then
+
+ AC_CHECK_LIB(mbedtls, mbedtls_ssl_init,
+ [
+ AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
+ AC_DEFINE(FEATURE_HTTPS_INSPECTION_MBEDTLS, 1, [if mbedTLS is enabled])
+ AC_SUBST(FEATURE_HTTPS_INSPECTION_MBEDTLS, [1])
+ FEATURE_HTTPS_INSPECTION_MBEDTLS="yes"
+ ], [], -lmbedx509 -lmbedcrypto)
+
+ if test "x$FEATURE_HTTPS_INSPECTION_MBEDTLS" = "xyes"; then
+ AC_MSG_NOTICE([Detected mbedTLS. Enabling https inspection.])
+
+ LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
+ old_CFLAGS_nospecial="-Imbedtls/include $old_CFLAGS_nospecial"
+
+ FEATURE_HTTPS_INSPECTION_ONLY=
+ FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=
+ fi
+fi
+AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS)
+
+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/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"
+ AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [FOUND_SSL_LIB="yes"])
+ AC_CHECK_LIB(ssl, SSL_library_init, [FOUND_SSL_LIB="yes"])
+ AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
+ else
+ AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])])
+ FOUND_SSL_LIB="no"
+ AC_SEARCH_LIBS(OPENSSL_init_ssl, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
+ AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
+ AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])])
+ fi
+
+ if test "x$FOUND_SSL_LIB" = xyes; then
+ AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
+ AC_DEFINE(FEATURE_HTTPS_INSPECTION_OPENSSL, 1, [if OpenSSL is enabled])
+ AC_SUBST(FEATURE_HTTPS_INSPECTION_OPENSSL, [1])
+ FEATURE_HTTPS_INSPECTION="yes"
+ FEATURE_HTTPS_INSPECTION_OPENSSL="yes"
+ fi
+
+ 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"
+
+ FEATURE_HTTPS_INSPECTION_ONLY=
+ FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=
+ fi
+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 ========================================================
+dnl Check for Brotli which can be used for decompression
+dnl ========================================================
+WITH_BROTLI=no
+AC_ARG_WITH(brotli,
+AC_HELP_STRING([--with-brotli], [Enable Brotli detection])
+AC_HELP_STRING([--without-brotli], [Disable Brotli detection]),
+ WITH_BROTLI=$withval)
+
+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)
+
+ AC_CHECK_HEADERS(brotli/decode.h,
+ FEATURE_BROTLI=1
+ AC_DEFINE(FEATURE_BROTLI, 1, [If Brotli is used for decompression])
+ AC_SUBST(FEATURE_BROTLI, [1])
+ )
+fi
+
+
dnl =================================================================
dnl Final cleanup and output
dnl =================================================================