X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=configure.in;h=be7ac121074d964893b1a9e43ee32ad5ce0f6100;hb=HEAD;hp=9ed34c7a305aae52687d8f3f2ebc46b01df9e082;hpb=b9d96835b666ba142057c0ef0c426d23b8bbd3d1;p=privoxy.git diff --git a/configure.in b/configure.in index 9ed34c7a..1f7256dd 100644 --- a/configure.in +++ b/configure.in @@ -1,38 +1,36 @@ dnl Process this file with autoconf to produce a configure script. -dnl -dnl $Id: configure.in,v 1.136 2009/08/01 11:41:58 fabiankeil Exp $ -dnl -dnl Written by and Copyright (C) 2001-2009 the -dnl Privoxy team. http://www.privoxy.org/ +dnl +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 by and Copyright (C) 1997 Anonymous Coders and dnl Junkbusters Corporation. http://www.junkbusters.com dnl -dnl This program is free software; you can redistribute it +dnl This program is free software; you can redistribute it dnl and/or modify it under the terms of the GNU General dnl Public License as published by the Free Software dnl Foundation; either version 2 of the License, or (at dnl your option) any later version. -dnl +dnl dnl This program is distributed in the hope that it will dnl be useful, but WITHOUT ANY WARRANTY; without even the dnl implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. See the GNU General Public dnl License for more details. -dnl +dnl dnl The GNU General Public License should be included with dnl this file. If not, you can view it at dnl http://www.gnu.org/copyleft/gpl.html dnl or write to the Free Software Foundation, Inc., 59 dnl Temple Place - Suite 330, Boston, MA 02111-1307, USA. -dnl +dnl dnl ================================================================= dnl AutoConf Initialization dnl ================================================================= -AC_REVISION($Revision: 1.136 $) +AC_REVISION($Revision: 1.213 $) AC_INIT(jcc.c) if test ! -f config.h.in; then @@ -44,7 +42,7 @@ if test ! -f config.h.in; then else autoheader fi -fi +fi AC_CONFIG_HEADER([config.h]) AC_CANONICAL_HOST @@ -52,13 +50,13 @@ AC_CANONICAL_HOST dodk=auto DKPREFIX=none AC_ARG_WITH(docbook, dnl - --with-docbook=[[yes|no|directory]] - Enable docbook documentation creation + --with-docbook=[[yes|no|directory]] + Enable docbook documentation creation (default = yes, for gnu and linux),[dnl case "$with_docbook" in yes) dodk=yes;; no) dodk=no;; -*) +*) dodk=yes DKPREFIX=$withval ;; @@ -75,15 +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=15 +VERSION_POINT=35 CODE_STATUS="UNRELEASED" -dnl CODE_STATUS can be "alpha", "beta", or "stable", and will be -dnl used for CGI output. Set version to 0.0.0 and status to "UNRELEASED" -dnl whenever CVS in a stable branch differs from the last release. +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 @@ -93,6 +95,7 @@ AC_SUBST(VERSION_MAJOR) 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}) @@ -124,7 +127,7 @@ AC_SUBST(ID) AC_SUBST(BGROUPS) dnl ================================================================= -dnl debug, gcc and gdb support +dnl debug, gcc and gdb support dnl ================================================================= AC_ARG_WITH(debug, @@ -154,12 +157,35 @@ 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 ================================================================= -if test "$EMXOS2" = yes; then +if test "$host_os" = haiku; then echo "Skipping user and group validity stuff."; else @@ -190,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 @@ -202,7 +228,7 @@ else AC_MSG_CHECKING([for group]) AC_ARG_WITH(group, [ --with-group=privoxy Set group for privoxy], - [ + [ if test "x$withval" != "xyes"; then if test $BGROUPS = no ; then AC_MSG_ERROR(There is no 'groups' program on this system) @@ -210,12 +236,14 @@ else 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') @@ -227,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; @@ -241,7 +269,7 @@ fi dnl ================================================================= dnl additional gcc flags dnl ================================================================= -dnl +dnl if test "$GCC"; then if test "$host" != "powerpc-unknown-amigaos"; then CFLAGS="-pipe $CFLAGS" @@ -259,7 +287,7 @@ dnl Reason: This sets CFLAGS in order to switch the Cygwin compiler dnl into Cygwin or MinGW32 modes. Depending on the mode selected, dnl the compiler will use completely different sets of library dnl and include files. -dnl +dnl dnl ================================================================= AC_MINGW32 @@ -279,7 +307,7 @@ if test $dodk = auto; then dodk=no if test $target_type = unix; then case "$host_os" in - linux* | gnu*) + linux* | gnu* | *bsd*) dodk=yes ;; esac @@ -298,8 +326,12 @@ fi]) if test $target_type = mingw; then WIN_ONLY= - SPECIAL_CFLAGS="-mwindows -mno-cygwin" - PTHREAD_LIB=-lpthreadGC + CFLAGS="$CFLAGS -DWINVER=0x501" + 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=# @@ -314,36 +346,31 @@ else fi AC_SUBST(WIN_ONLY) -dnl Checking which text html browser we have avaliable 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 - dnl will fail + dnl will fail DB2HTML="" 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) @@ -380,6 +407,7 @@ dnl echo -n "checking for $i/html/docbook.dsl..." 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 \ @@ -398,6 +426,17 @@ fi AC_SUBST(JADECAT) AC_SUBST(DKPREFIX) +AC_ARG_ENABLE(large-file-support, +[ --enable-large-file-support Define _LARGE_FILES and friends. + Required by some systems to support files larger then 2GB.], +[if test $enableval = yes; then + 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" @@ -420,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 - AC_MSG_WARN([pthreads seem to be available but you are using --disable-pthread.]) + 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]) @@ -454,6 +494,27 @@ 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 @@ -554,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) @@ -572,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) @@ -618,31 +679,24 @@ dnl ================================================================= 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 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 dnl ================================================================= - + case "$host" in *-apple-darwin*) SPECIAL_CFLAGS="-Dunix" -;; +;; esac dnl ================================================================= @@ -655,17 +709,24 @@ case "$host" in 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 @@ -685,41 +746,165 @@ AC_CHECK_SIZEOF(char *, 4) 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 AC_TYPE_SIGNAL -dnl AC_CHECK_FUNC(strstr) -dnl bcopy and memmove are for PCRE -AC_CHECK_FUNCS([strerror bcopy memmove]) AC_PROG_GCC_TRADITIONAL -dnl uncommenting does not work for swa. suse linux -dnl AC_FUNC_MALLOC -AC_FUNC_SETPGRP AC_TYPE_SIGNAL -dnl uncommenting does not work for swa. suse linux -dnl AC_FUNC_STAT -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_CHECK_FUNC([getaddrinfo], - [AC_CHECK_FUNC([getnameinfo], - [AC_DEFINE([HAVE_RFC2553], [1], - [Define if RFC 2553 resolver functions like getaddrinfo(3) and - getnameinfo(3) present]) - ]) -]) +AC_ARG_ENABLE(ipv6-support, +[ --disable-ipv6-support Disable IPv6 support and other RFC-2554-related improvements], +[if test $enableval = yes; then + enable_ipv6_support=yes +fi], enable_ipv6_support=yes) + +if test $enable_ipv6_support != yes; then + AC_MSG_WARN([Skipping checks for IPv6 support and other RFC-2554-related improvements. + Due to lock contention, this may result in slower DNS resolution for IPv4 setups, too.]) +elif test $target_type = mingw; then + AC_CHECK_LIB(ws2_32, main) + + AC_MSG_CHECKING(getaddrinfo in ws2_32) + AC_TRY_LINK( + [ + #include + #include + #include + ], + [getaddrinfo(0,0,0,0)], + have_ws2_32_getaddrinfo=yes + ) + AC_MSG_RESULT($have_ws2_32_getaddrinfo) + + AC_MSG_CHECKING(getnameinfo in ws2_32) + AC_TRY_LINK( + [ + #include + #include + #include + ], + [getnameinfo(0,0,0,0,0,0,0)], + have_ws2_32_getnameinfo=yes + ) + AC_MSG_RESULT($have_ws2_32_getnameinfo) + if test $have_ws2_32_getaddrinfo ; then + if test $have_ws2_32_getnameinfo ; then + AC_DEFINE([HAVE_RFC2553], [1], + [Define if RFC 2553 resolver functions like getaddrinfo(3) and + getnameinfo(3) present]) + fi + fi +else + AC_CHECK_FUNC([getaddrinfo], + [AC_CHECK_FUNC([getnameinfo], + [AC_DEFINE([HAVE_RFC2553], [1], + [Define if RFC 2553 resolver functions like getaddrinfo(3) and + getnameinfo(3) present]) + ]) + ]) +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]) @@ -729,7 +914,7 @@ AC_CHECK_LIB(pcre, pcre_compile, [ ], [have_pcre=no]) ]) ], [have_pcre=no]) - + AC_CHECK_LIB(pcreposix, regcomp, [ AC_CHECK_HEADER(pcreposix.h, [ AC_EGREP_HEADER(pcreposix_regerror, pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes]) @@ -738,8 +923,9 @@ AC_CHECK_LIB(pcreposix, regcomp, [ AC_EGREP_HEADER(pcreposix_regerror, pcre/pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes]; [AC_DEFINE(PCREPOSIX_H_IN_SUBDIR)]) ], [have_pcreposix=no]) ]) -], [have_pcreposix=no], -lpcre) +], [have_pcreposix=no], -lpcre) +fi dnl ================================================================ dnl libpcrs is temporarily disabled. dnl @@ -785,23 +971,22 @@ AC_ARG_ENABLE(stats, 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 +[ --disable-image-blocking Don't try to figure out whether a request is for an image or HTML - assume HTML.], [if test $enableval = yes; then AC_DEFINE(FEATURE_IMAGE_BLOCKING) fi], AC_DEFINE(FEATURE_IMAGE_BLOCKING)) -AC_ARG_ENABLE(acl-files, -[ --disable-acl-files Prevents the use of ACL files to control access to +AC_ARG_ENABLE(acl-support, +[ --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) @@ -836,12 +1021,62 @@ AC_ARG_ENABLE(graceful-termination, AC_DEFINE(FEATURE_GRACEFUL_TERMINATION) fi]) -AC_ARG_ENABLE(extended-host-patterns, -[ --enable-extended-host-patterns Allow extended regular expressions in host patterns.], +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_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_EXTENDED_HOST_PATTERNS) + AC_DEFINE(FEATURE_EXTERNAL_FILTERS,1,[Define to 1 to allow to filter content with scripts and programs.]) fi]) +AC_ARG_ENABLE(accept-filter, +[ --enable-accept-filter Try to use accf_http(9) if supported.], +[if test $enableval = yes; then + 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: @@ -871,12 +1106,25 @@ if test $enableval2 = yes; then AC_CHECK_LIB(z, zlibVersion, [have_zlib="yes"], [have_zlib="no"]) if test $have_zlib = "yes"; then LIBS="$LIBS -lz" - AC_DEFINE(FEATURE_ZLIB,1,[Define to 1 to use compression through the zlib library.]) + AC_DEFINE(FEATURE_ZLIB,1,[Define to 1 to use zlib to decompress data before filtering.]) else AC_MSG_WARN([No zlib found. Privoxy will not be able to filter compressed content. This may become a fatal error in the future.]) - fi + fi +fi + +AC_ARG_ENABLE(compression, +[ --enable-compression Allow Privoxy to compress buffered content if the client supports it. Requires zlib support.], +[enableval2=$enableval], +[enableval2=no]) +if test $enableval2 = yes; then + if test $have_zlib = "yes"; then + echo Enabling compression support. + AC_DEFINE(FEATURE_COMPRESSION,1,[Define to 1 to use compression through the zlib library.]) + else + AC_MSG_WARN([No zlib found. Privoxy will not be able to (re-)compressed buffered content.]) + fi fi @@ -884,17 +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 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 scheduled for removal, for details see: - https://sourceforge.net/mailarchive/message.php?msg_id=20080511195555.2dc6cfdc%40fabiankeil.de]) - 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) @@ -925,11 +1212,162 @@ dnl fi 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 ================================================================= -dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it seperately +dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it separately dnl in the Makefile CFLAGS=$old_CFLAGS_nospecial AC_SUBST(SPECIAL_CFLAGS)