receive_client_request(): Improve error message
[privoxy.git] / configure.in
index ec670d0..e7e68be 100644 (file)
@@ -1,9 +1,7 @@
 dnl Process this file with autoconf to produce a configure script.
 dnl
 dnl Process this file with autoconf to produce a configure script.
 dnl
-dnl $Id: configure.in,v 1.191 2016/02/02 13:08:17 fabiankeil Exp $
-dnl
-dnl Written by and Copyright (C) 2001-2014 the
-dnl Privoxy team. http://www.privoxy.org/
+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 by and Copyright (C) 1997 Anonymous Coders and
 dnl
 dnl Based on the Internet Junkbuster originally written
 dnl by and Copyright (C) 1997 Anonymous Coders and
@@ -32,7 +30,7 @@ dnl =================================================================
 dnl AutoConf Initialization
 dnl =================================================================
 
 dnl AutoConf Initialization
 dnl =================================================================
 
-AC_REVISION($Revision: 1.191 $)
+AC_REVISION($Revision: 1.213 $)
 AC_INIT(jcc.c)
 
 if test ! -f config.h.in; then
 AC_INIT(jcc.c)
 
 if test ! -f config.h.in; then
@@ -75,16 +73,19 @@ DB2HTML=$withval
 dnl =================================================================
 dnl Application version number
 dnl =================================================================
 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_MAJOR=3
 VERSION_MINOR=0
-VERSION_POINT=25
+VERSION_POINT=34
 CODE_STATUS="UNRELEASED"
 
 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=1636218132
 
 dnl =================================================================
 dnl Substitute the version numbers
 
 dnl =================================================================
 dnl Substitute the version numbers
@@ -94,6 +95,7 @@ AC_SUBST(VERSION_MAJOR)
 AC_SUBST(VERSION_MINOR)
 AC_SUBST(VERSION_POINT)
 AC_SUBST(CODE_STATUS)
 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})
 
 dnl
 AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR})
@@ -155,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 =================================================================
 
 
 dnl =================================================================
 dnl Check for user and group validity
 dnl =================================================================
 
 
-if test "$EMXOS2" = yes || test "$host_os" = haiku; then
+if test "$host_os" = haiku; then
   echo "Skipping user and group validity stuff.";
 
 else
   echo "Skipping user and group validity stuff.";
 
 else
@@ -282,7 +307,7 @@ if test $dodk = auto; then
        dodk=no
        if test $target_type = unix; then
                case "$host_os" in
        dodk=no
        if test $target_type = unix; then
                case "$host_os" in
-               linux* | gnu*)
+               linux* | gnu* | *bsd*)
                        dodk=yes
                ;;
                esac
                        dodk=yes
                ;;
                esac
@@ -302,8 +327,11 @@ fi])
 if test $target_type = mingw; then
   WIN_ONLY=
   CFLAGS="$CFLAGS -DWINVER=0x501"
 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=#
   echo "Using mingw32 (Win32 GUI)"
 else
   WIN_ONLY=#
@@ -333,20 +361,16 @@ fi
 AC_SUBST(W3M)
 AC_SUBST(DB2HTML)
 
 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
 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)
 
 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)
 dnl Check for man2html for docs.
 AC_CHECK_PROGS(MAN2HTML,man2html,false)
 AC_SUBST(MAN2HTML)
@@ -383,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 \
     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 \
              /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 \
@@ -408,6 +433,10 @@ AC_ARG_ENABLE(large-file-support,
     CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D_LARGEFILE_SOURCE=1"
 fi])
 
     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"
 dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
 old_CFLAGS_nospecial=$CFLAGS
 CFLAGS="$CFLAGS $SPECIAL_CFLAGS"
@@ -430,9 +459,10 @@ AC_ARG_ENABLE(pthread,
 [  --disable-pthread               Don't use POSIX threads (pthreads)],
 [if test $enableval = no; then
   # Disable pthreads
 [  --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([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
   have_pthread=no
 fi])
@@ -464,6 +494,27 @@ fi
 
 AC_SUBST(PTHREAD_ONLY)
 
 
 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
 dnl =================================================================
 dnl Support for thread-safe versions of gethostbyaddr, gethostbyname,
 dnl gmtime and localtime
@@ -628,23 +679,16 @@ dnl =================================================================
 dnl Solaris problem, and others perhaps (socklen_t is undefined)
 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 <sys/socket.h> doesn't have it. ]))
 
 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
 
 dnl =================================================================
 dnl Mac OSX specific
@@ -664,19 +708,6 @@ case "$host" in
 ;;
 esac
 
 ;;
 esac
 
-dnl =================================================================
-dnl AmigaOS specific
-dnl =================================================================
-
-AMIGAOS_ONLY=#
-
-case "$host" in
-*-amigaos) AMIGAOS_ONLY=
-;;
-esac
-
-AC_SUBST(AMIGAOS_ONLY)
-
 dnl =================================================================
 dnl Haiku specific
 dnl =================================================================
 dnl =================================================================
 dnl Haiku specific
 dnl =================================================================
@@ -715,6 +746,7 @@ 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(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.
 AC_CHECK_HEADERS([ \
 
 dnl Checks for header files.
 AC_CHECK_HEADERS([ \
@@ -738,13 +770,13 @@ AC_CHECK_HEADERS([ \
 ])
 
 dnl Checks for library functions.
 ])
 
 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 \
 AC_PROG_GCC_TRADITIONAL
 AC_TYPE_SIGNAL
 AC_CHECK_FUNCS([ \
  access \
+ arc4random \
  atexit \
  atexit \
+ calloc \
  getcwd \
  gethostbyaddr \
  gethostbyaddr_r \
  getcwd \
  gethostbyaddr \
  gethostbyaddr_r \
@@ -755,6 +787,7 @@ AC_CHECK_FUNCS([ \
  memchr \
  memmove \
  memset \
  memchr \
  memmove \
  memset \
+ nanosleep \
  poll \
  putenv \
  random \
  poll \
  putenv \
  random \
@@ -792,6 +825,7 @@ elif test $target_type = mingw; then
   AC_MSG_CHECKING(getaddrinfo in ws2_32)
   AC_TRY_LINK(
     [
   AC_MSG_CHECKING(getaddrinfo in ws2_32)
   AC_TRY_LINK(
     [
+      #include<winsock2.h>
       #include<windows.h>
       #include<ws2tcpip.h>
     ],
       #include<windows.h>
       #include<ws2tcpip.h>
     ],
@@ -803,6 +837,7 @@ elif test $target_type = mingw; then
   AC_MSG_CHECKING(getnameinfo in ws2_32)
   AC_TRY_LINK(
     [
   AC_MSG_CHECKING(getnameinfo in ws2_32)
   AC_TRY_LINK(
     [
+      #include<winsock2.h>
       #include<windows.h>
       #include<ws2tcpip.h>
     ],
       #include<windows.h>
       #include<ws2tcpip.h>
     ],
@@ -899,12 +934,11 @@ AC_ARG_ENABLE(stats,
   AC_DEFINE(FEATURE_STATISTICS)
 fi],AC_DEFINE(FEATURE_STATISTICS))
 
   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
 [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_ARG_ENABLE(image-blocking,
 [  --disable-image-blocking        Don't try to figure out whether a request is
@@ -915,7 +949,7 @@ fi],
 AC_DEFINE(FEATURE_IMAGE_BLOCKING))
 
 AC_ARG_ENABLE(acl-support,
 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)
                                   Privoxy by IP address.],
 [if test $enableval = yes; then
   AC_DEFINE(FEATURE_ACL)
@@ -950,20 +984,22 @@ AC_ARG_ENABLE(graceful-termination,
   AC_DEFINE(FEATURE_GRACEFUL_TERMINATION)
 fi])
 
   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
 [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,
 fi])
 
 AC_ARG_ENABLE(external-filters,
-[  --enable-external-filters      Allow to filter content with scripts and programs. Experimental.],
+[  --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])
 [if test $enableval = yes; then
   AC_DEFINE(FEATURE_EXTERNAL_FILTERS,1,[Define to 1 to allow to filter content with scripts and programs.])
 fi])
@@ -983,15 +1019,27 @@ AC_ARG_ENABLE(strptime-sanity-checks,
 fi])
 
 AC_ARG_ENABLE(client-tags,
 fi])
 
 AC_ARG_ENABLE(client-tags,
-[  --enable-client-tags                Enable client-specific tags],
-[if test $enableval = yes; then
-  FEATURE_CLIENT_TAGS_ONLY=""
-  AC_DEFINE(FEATURE_CLIENT_TAGS,1,[Define to enable client-specific tags.])
- else
+[  --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="#"
   FEATURE_CLIENT_TAGS_ONLY="#"
-fi])
+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)
 
 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:
 dnl pcre/pcrs is needed for CGI anyway, so
 dnl the choice is only between static and
 dnl dynamic:
@@ -1049,18 +1097,26 @@ fi
 #
 if test $have_pcre = "yes"; then
   echo "using libpcre"
 #
 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"
   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
 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)
 fi
 
 AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE)
@@ -1091,6 +1147,118 @@ dnl fi
 AC_SUBST(STATIC_PCRE_ONLY)
 AC_SUBST(STATIC_PCRS_ONLY)
 
 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)
+
+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 =================================================================
 dnl Final cleanup and output
 dnl =================================================================