1 dnl Process this file with autoconf to produce a configure script.
3 dnl Written by and Copyright (C) 2001-2021 the
4 dnl Privoxy team. https://www.privoxy.org/
6 dnl Based on the Internet Junkbuster originally written
7 dnl by and Copyright (C) 1997 Anonymous Coders and
8 dnl Junkbusters Corporation. http://www.junkbusters.com
10 dnl This program is free software; you can redistribute it
11 dnl and/or modify it under the terms of the GNU General
12 dnl Public License as published by the Free Software
13 dnl Foundation; either version 2 of the License, or (at
14 dnl your option) any later version.
16 dnl This program is distributed in the hope that it will
17 dnl be useful, but WITHOUT ANY WARRANTY; without even the
18 dnl implied warranty of MERCHANTABILITY or FITNESS FOR A
19 dnl PARTICULAR PURPOSE. See the GNU General Public
20 dnl License for more details.
22 dnl The GNU General Public License should be included with
23 dnl this file. If not, you can view it at
24 dnl http://www.gnu.org/copyleft/gpl.html
25 dnl or write to the Free Software Foundation, Inc., 59
26 dnl Temple Place - Suite 330, Boston, MA 02111-1307, USA.
29 dnl =================================================================
30 dnl AutoConf Initialization
31 dnl =================================================================
33 AC_REVISION($Revision: 1.213 $)
36 if test ! -f config.h.in; then
37 echo "You need to run autoheader first. "
38 echo -n "Shall I do this for you now? (y/n) "
40 if test "$answer" != "y"; then
47 AC_CONFIG_HEADER([config.h])
52 AC_ARG_WITH(docbook, dnl
53 --with-docbook=[[yes|no|directory]]
54 Enable docbook documentation creation
55 (default = yes, for gnu and linux),[dnl
56 case "$with_docbook" in
66 AC_ARG_WITH(db2html, dnl
67 --with-db2html=<path/executable>
68 Set the location of the docbook to html converter
69 (default = search),[dnl
73 dnl =================================================================
74 dnl Application version number
75 dnl =================================================================
76 dnl CODE_STATUS can be "alpha", "beta", "stable" or "UNRELEASED",
77 dnl and will be used for CGI output. Increment version number and
78 dnl set status to "UNRELEASED" whenever git differs from the last
79 dnl release and no new release is near.
84 CODE_STATUS="UNRELEASED"
86 dnl Timestamp (date +%s) used by the mtree-spec target.
87 dnl Should be updated before releases but forgetting it isn't critical.
88 SOURCE_DATE_EPOCH=1613992573
90 dnl =================================================================
91 dnl Substitute the version numbers
92 dnl =================================================================
94 AC_SUBST(VERSION_MAJOR)
95 AC_SUBST(VERSION_MINOR)
96 AC_SUBST(VERSION_POINT)
98 AC_SUBST(SOURCE_DATE_EPOCH)
101 AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR})
102 AC_DEFINE_UNQUOTED(VERSION_MINOR,${VERSION_MINOR})
103 AC_DEFINE_UNQUOTED(VERSION_POINT,${VERSION_POINT})
104 AC_DEFINE_UNQUOTED(VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_POINT}")
105 AC_DEFINE_UNQUOTED(CODE_STATUS,"${CODE_STATUS}")
107 dnl =================================================================
108 dnl Checks for programs needed to build.
109 dnl =================================================================
111 dnl Keep AC_PROG_CC from setting its own defaults:
112 if test "X$CFLAGS" = "X"; then
123 AC_CHECK_PROG(GDB,gdb,yes,no)
124 AC_PATH_PROG(BGROUPS,groups,no,$PATH:/bin:/usr/bin:/usr/local/bin)
125 AC_PATH_PROG(ID,id,no,$PATH:/bin:/usr/bin:/usr/local/bin)
129 dnl =================================================================
130 dnl debug, gcc and gdb support
131 dnl =================================================================
134 [ --with-debug Enable debug mode],
136 if test "x$withval" != "xno" ; then
137 if test $ac_cv_prog_cc_g = yes; then
138 if test "$GCC" = yes; then
140 CFLAGS="$CFLAGS -ggdb"
144 CFLAGS="$CFLAGS -Wshadow -Wconversion"
152 if test "X$CFLAGS" = "X "; then # if CFLAGS were unset (see above)
153 if test "$GCC" = yes; then
160 AC_ARG_WITH(assertions, [ --with-assertions Enable assertions])
161 if test "x$with_assertions" != "xyes"; then
162 CFLAGS="$CFLAGS -DNDEBUG"
165 dnl =================================================================
166 dnl Check for user and group validity
167 dnl =================================================================
170 if test "$host_os" = haiku; then
171 echo "Skipping user and group validity stuff.";
175 $ID privoxy >/dev/null 2>/dev/null
176 if test $? -ne 0 ; then
177 AC_MSG_WARN(There is no user 'privoxy' on this system)
179 AC_MSG_CHECKING([for user])
181 [ --with-user=privoxy Set user under which privoxy will run],
183 if test "x$withval" != "xyes"; then
184 if test $ID = no ; then
185 AC_MSG_ERROR(There is no 'id' program on this system)
187 AC_MSG_RESULT($with_user)
188 $ID $with_user 2>/dev/null >/dev/null
189 if test $? -eq 0 ; then
192 AC_MSG_ERROR(There is no user '$with_user' on this system)
196 AC_MSG_ERROR(We need a user if you give me this parameter)
200 if test $ID = no ; then
201 AC_MSG_ERROR(There is no 'id' programm on this system)
203 AC_MSG_RESULT(none specified)
210 AC_MSG_CHECKING([for group])
212 [ --with-group=privoxy Set group for privoxy],
214 if test "x$withval" != "xyes"; then
215 if test $BGROUPS = no ; then
216 AC_MSG_ERROR(There is no 'groups' program on this system)
218 AC_MSG_RESULT($with_group)
219 $BGROUPS $USER >/dev/null
220 if test $? -eq 0 ; then
221 for i in `$BGROUPS $USER | sed 's/.*: //' 2>/dev/null`; do
222 if test "x$i" = "x$with_group" ; then
227 if test "x$GROUP" != "x$with_group" ; then
228 AC_MSG_ERROR(The given value '$withval' does not match group entry)
231 AC_MSG_ERROR(There is no group entry for user '$USER')
235 AC_MSG_ERROR(We need a group if you give me this parameter)
239 if test $BGROUPS = no ; then
240 AC_MSG_ERROR(There is no 'groups' programm on this system)
242 AC_MSG_RESULT(none specified)
251 dnl =================================================================
252 dnl additional gcc flags
253 dnl =================================================================
256 if test "$host" != "powerpc-unknown-amigaos"; then
257 CFLAGS="-pipe $CFLAGS"
262 dnl =================================================================
264 dnl =================================================================
266 dnl Must do this first.
268 dnl Reason: This sets CFLAGS in order to switch the Cygwin compiler
269 dnl into Cygwin or MinGW32 modes. Depending on the mode selected,
270 dnl the compiler will use completely different sets of library
271 dnl and include files.
273 dnl =================================================================
278 if test "$MINGW32" = "yes"; then
281 if test "$CYGWIN" = "yes"; then
288 if test $dodk = auto; then
290 if test $target_type = unix; then
292 linux* | gnu* | *bsd*)
299 dnl Decide what to do based on target_type
300 dnl Note: PTHREAD_LIB is always set, even if pthread is disabled.
301 dnl This is because we don't know yet whether pthread is enabled.
303 AC_ARG_ENABLE(mingw32,
304 [ --enable-mingw32 Use mingw32 for a Windows GUI],
305 [if test $enableval = yes; then
309 if test $target_type = mingw; then
311 CFLAGS="$CFLAGS -DWINVER=0x501"
312 SPECIAL_CFLAGS="-mwindows"
313 dnl from the cygwin FAQ: The regular setup allows you to use the -mwindows option
314 dnl to include a set of the basic libraries user32, gdi32 and comdlg32.
315 dnl (and also make your program a GUI program instead of a console program)
316 PTHREAD_LIB=-lpthread
317 echo "Using mingw32 (Win32 GUI)"
320 if test $target_type = cygwin; then
321 SPECIAL_CFLAGS="-mno-win32"
323 echo "Using Cygnus (Win32 command line)"
326 PTHREAD_LIB=-lpthread
331 if test $dodk != no; then
332 AC_CHECK_PROGS(W3M, w3m, false)
333 if test "$W3M" = false; then
334 AC_MSG_WARN(You need w3m to build text documentation.)
336 if test $DB2HTML = false; then
337 dnl We need to clean the variable, otherwise AC_CHECK_PROGS
340 AC_CHECK_PROGS(DB2HTML,db2html docbook2html,false)
346 dnl prefer openjade to jade
347 dnl Check for jade, so we can build the documentation
348 AC_CHECK_PROGS(JADEBIN,openjade jade,false)
351 dnl Prefer OpenSP to SP
352 dnl ref: https://lists.privoxy.org/pipermail/privoxy-devel/2018-November/000293.html
353 AC_CHECK_PROGS(NSGMLS,onsgmls nsgmls,false)
356 dnl Check for man2html for docs.
357 AC_CHECK_PROGS(MAN2HTML,man2html,false)
360 dnl Set doc status flag for conditional content inclusions
361 DOC_STATUS=p-not-stable
362 if test $CODE_STATUS = stable; then
363 DOC_STATUS="p-stable"
367 dnl Checking for the docbook.dsl stylesheet file
368 dnl It is still not portable (directory slash)
370 if test $dodk = yes; then
371 if test $DKPREFIX = none; then
372 for i in /usr/share/sgml/docbook/dsssl-stylesheets \
373 /usr/share/sgml/docbkdsl /usr/share/sgml/docbook-dsssl \
374 /usr/local/share/sgml/docbook/dsssl/modular \
375 /usr/share/sgml/docbook/stylesheet/dsssl/modular/ \
377 dnl echo -n does not fly with /bin/sh.
378 dnl echo -n "checking for $i/html/docbook.dsl..."
379 AC_MSG_CHECKING([for $i])
380 if test -f $i/html/docbook.dsl; then
388 # where are the catalogs?
389 for i in /usr/share/sgml/CATALOG.docbk30 \
390 /usr/share/sgml/CATALOG.docbk31 \
391 /usr/share/sgml/CATALOG.docbk31 \
392 /usr/local/share/sgml/docbook/2.4.1/docbook.cat \
393 /usr/local/share/sgml/docbook/3.0/docbook.cat \
394 /usr/local/share/sgml/docbook/3.1/docbook.cat \
395 /usr/share/sgml/docbook/dtd/3.1/docbook.cat \
397 dnl echo -n "checking for $i..."
398 AC_MSG_CHECKING([for $i])
401 JADECAT="$JADECAT -c $i"
411 AC_ARG_ENABLE(large-file-support,
412 [ --enable-large-file-support Define _LARGE_FILES and friends.
413 Required by some systems to support files larger then 2GB.],
414 [if test $enableval = yes; then
415 CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D_LARGEFILE_SOURCE=1"
418 AC_ARG_ENABLE(static-linking,
419 [ --enable-static-linking Use static linking instead of dynamic linking (ie. LDFLAGS=-static)],
420 [ if test $enableval = yes; then LDFLAGS="$LDFLAGS -static"; use_static_pcre="yes"; fi ])
422 dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
423 old_CFLAGS_nospecial=$CFLAGS
424 CFLAGS="$CFLAGS $SPECIAL_CFLAGS"
426 # Hack to force AutoConf to use the CFLAGS we just set
427 dnl Warning: This may break with a future version of Autoconf
428 dnl Tested with autoconf 2.13
429 ac_cpp='$CPP $CPPFLAGS $SPECIAL_CFLAGS'
430 ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
431 ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
434 dnl =================================================================
436 dnl =================================================================
438 AC_CHECK_HEADER(pthread.h, [have_pthread=yes], [have_pthread=no])
440 AC_ARG_ENABLE(pthread,
441 [ --disable-pthread Don't use POSIX threads (pthreads)],
442 [if test $enableval = no; then
444 if test $have_pthread = yes; then
445 AC_MSG_WARN([pthreads seem to be available but you are using --disable-pthread.])
446 AC_MSG_WARN([This is almost always a mistake and can render Privoxy unacceptable slow.])
451 if test $have_pthread = yes; then
453 AC_DEFINE(FEATURE_PTHREAD)
454 echo Using POSIX threads
455 if test "$GCC" = "yes"; then
456 # Set a GCC specific switch:
457 if test "$target_type" = "unix"; then
458 ac_jgf_save_CFLAGS=$CFLAGS
459 CFLAGS="$CFLAGS -pthread"
460 AC_TRY_LINK([#include <pthread.h>],
461 [void *p = pthread_create;],
463 # This compiler switch makes GCC on Linux thread-safe
464 # However, it's not supported on most other OS.
466 SPECIAL_CFLAGS="-pthread"
468 CFLAGS=$ac_jgf_save_CFLAGS
473 echo Using native threads
476 AC_SUBST(PTHREAD_ONLY)
478 dnl =================================================================
479 dnl On most platforms select() does not support fd numbers above
480 dnl FD_SETSIZE, as a result Privoxy can't handle more than
481 dnl approximately FD_SETSIZE/2 client connections.
482 dnl On some platforms the value can be changed at compile time,
483 dnl on others it's hardcoded and requires recompilation of the OS.
484 dnl Only relevant if select() is actually being used.
485 dnl =================================================================
486 AC_ARG_WITH(fdsetsize,
487 [ --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().],
489 if test "x$withval" != "xyes"; then
490 AC_DEFINE_UNQUOTED(FD_SETSIZE,$with_fdsetsize,[Relevant for select(). Not honoured by all OS.])
491 echo "Redefining FD_SETSIZE to $with_fdsetsize."
492 AC_MSG_WARN(On platforms that don't support FD_SETSIZE redefinition it may cause memory corruption.)
494 AC_MSG_ERROR(--with-fdsetsize used without value)
499 dnl =================================================================
500 dnl Support for thread-safe versions of gethostbyaddr, gethostbyname,
501 dnl gmtime and localtime
502 dnl =================================================================
504 dnl Next line needed to find the gethost*_r functions on Solaris
505 AC_CHECK_LIB(nsl, gethostbyname)
507 AC_CHECK_FUNC(gethostbyaddr_r, [
508 AC_MSG_CHECKING([signature of gethostbyaddr_r])
512 struct hostent *h, *hp;
515 (void) gethostbyaddr_r(a, l, t, h, b, bl, &hp, &e)
517 AC_DEFINE(HAVE_GETHOSTBYADDR_R_8_ARGS)
518 AC_MSG_RESULT([8 args])
526 (void) gethostbyaddr_r(a, l, t, h, b, bl, &e)
528 AC_DEFINE(HAVE_GETHOSTBYADDR_R_7_ARGS)
529 AC_MSG_RESULT([7 args])
534 struct hostent_data *d;
538 (void) gethostbyaddr_r(a, l, t, h, d)
540 AC_DEFINE(HAVE_GETHOSTBYADDR_R_5_ARGS)
541 AC_MSG_RESULT([5 args])
543 AC_MSG_RESULT(unrecognised)
551 AC_CHECK_FUNC(gethostbyname_r, [
552 AC_MSG_CHECKING([signature of gethostbyname_r])
556 struct hostent *h, *r;
559 (void) gethostbyname_r(n, h, b, bl, &r, &e)
561 AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARGS)
562 AC_MSG_RESULT([6 args])
570 (void) gethostbyname_r(n, h, b, bl, &e)
572 AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARGS)
573 AC_MSG_RESULT([5 args])
578 struct hostent_data *d;
581 (void) gethostbyname_r(n, h, d)
583 AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARGS)
584 AC_MSG_RESULT([3 args])
586 AC_MSG_RESULT(unrecognised)
594 AC_CHECK_FUNC(gmtime_r, [
595 AC_MSG_CHECKING([signature of gmtime_r])
601 (void) gmtime_r(t, tm)
604 AC_DEFINE(HAVE_GMTIME_R)
606 AC_MSG_RESULT(unrecognised)
612 AC_CHECK_FUNC(localtime_r, [
613 AC_MSG_CHECKING([signature of localtime_r])
619 (void) localtime_r(t, tm)
622 AC_DEFINE(HAVE_LOCALTIME_R)
624 AC_MSG_RESULT(unrecognised)
630 dnl =================================================================
632 dnl FIXME: Not tested on Solaris yet...
633 dnl ISFIXED: Have tested it on Solaris, but there are other ways to
634 dnl make these checks generic, e.g.:
635 dnl AC_CHECK_FUNC(getsockopt, , AC_CHECK_LIB(socket, getsockopt))
636 dnl (Moritz Barsnick <moritz@barsnick.net>)
637 dnl =================================================================
643 *-solaris*) SOCKET_LIB="-lsocket -lnsl"
644 AC_DEFINE(__EXTENSIONS__)
645 if test "$GCC" = "yes"; then
646 # Set a GCC specific switch:
647 # This compiler switch makes Solaris thread-safe
649 SPECIAL_CFLAGS="-pthreads"
651 # What do we do without GCC? Guess this:
652 SPECIAL_CFLAGS="-D_REENTRANT"
659 dnl =================================================================
660 dnl Solaris problem, and others perhaps (socklen_t is undefined)
661 dnl =================================================================
663 if test $target_type != mingw; then
664 # i686-w64-mingw32-gcc gets socklen_t define from ws2tcpip.h
666 AC_MSG_CHECKING([for socklen_t])
667 AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]),
669 AC_DEFINE(socklen_t,int,
670 [ Define to 'int' if <sys/socket.h> doesn't have it. ]))
674 dnl =================================================================
676 dnl =================================================================
679 *-apple-darwin*) SPECIAL_CFLAGS="-Dunix"
683 dnl =================================================================
685 dnl =================================================================
688 *-openbsd*) SPECIAL_CFLAGS="$SPECIAL_CFLAGS -Dunix"
692 dnl =================================================================
694 dnl =================================================================
696 if test "$host_os" = haiku; then
697 # Omit the "-pthread" flag to gcc, even when building with gcc 2.95
700 # Haiku's pthreads implementation exists in its system library,
701 # libroot, not in a separate pthreads library
704 # Networking code exists in libnetwork
707 # Search Haiku's common-library folder to find its pcre and
708 # pcreposix libraries
709 LIBS="-L/boot/common/lib $LIBS"
712 dnl =================================================================
713 dnl Check for standard compiler stuff
714 dnl =================================================================
725 AC_CHECK_SIZEOF(int, 4)
726 AC_CHECK_SIZEOF(char *, 4)
727 AC_CHECK_SIZEOF(long, 4)
728 AC_CHECK_SIZEOF(long long, 8)
729 AC_CHECK_SIZEOF(size_t, 4)
730 AC_CHECK_SIZEOF(time_t, 8)
732 dnl Checks for header files.
753 dnl Checks for library functions.
754 AC_PROG_GCC_TRADITIONAL
793 dnl Checks for RFC 2553 resolver and socket functions
794 AC_ARG_ENABLE(ipv6-support,
795 [ --disable-ipv6-support Disable IPv6 support and other RFC-2554-related improvements],
796 [if test $enableval = yes; then
797 enable_ipv6_support=yes
798 fi], enable_ipv6_support=yes)
800 if test $enable_ipv6_support != yes; then
801 AC_MSG_WARN([Skipping checks for IPv6 support and other RFC-2554-related improvements.
802 Due to lock contention, this may result in slower DNS resolution for IPv4 setups, too.])
803 elif test $target_type = mingw; then
804 AC_CHECK_LIB(ws2_32, main)
806 AC_MSG_CHECKING(getaddrinfo in ws2_32)
813 [getaddrinfo(0,0,0,0)],
814 have_ws2_32_getaddrinfo=yes
816 AC_MSG_RESULT($have_ws2_32_getaddrinfo)
818 AC_MSG_CHECKING(getnameinfo in ws2_32)
825 [getnameinfo(0,0,0,0,0,0,0)],
826 have_ws2_32_getnameinfo=yes
828 AC_MSG_RESULT($have_ws2_32_getnameinfo)
830 if test $have_ws2_32_getaddrinfo ; then
831 if test $have_ws2_32_getnameinfo ; then
832 AC_DEFINE([HAVE_RFC2553], [1],
833 [Define if RFC 2553 resolver functions like getaddrinfo(3) and
834 getnameinfo(3) present])
838 AC_CHECK_FUNC([getaddrinfo],
839 [AC_CHECK_FUNC([getnameinfo],
840 [AC_DEFINE([HAVE_RFC2553], [1],
841 [Define if RFC 2553 resolver functions like getaddrinfo(3) and
842 getnameinfo(3) present])
847 dnl =================================================================
848 dnl Checks for libraries.
849 dnl =================================================================
850 dnl Note: Some systems may have the library but not the system header
851 dnl file, so we must check for both.
852 dnl Also check for correct version
853 AC_CHECK_LIB(pcre, pcre_compile, [
854 AC_CHECK_HEADER(pcre.h, [
855 AC_EGREP_HEADER(pcre_fullinfo, pcre.h, [have_pcre=yes], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no])
857 AC_CHECK_HEADER(pcre/pcre.h, [
858 AC_EGREP_HEADER(pcre_fullinfo, pcre/pcre.h, [have_pcre=yes]; [AC_DEFINE(PCRE_H_IN_SUBDIR)], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no])
863 AC_CHECK_LIB(pcreposix, regcomp, [
864 AC_CHECK_HEADER(pcreposix.h, [
865 AC_EGREP_HEADER(pcreposix_regerror, pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes])
867 AC_CHECK_HEADER(pcre/pcreposix.h, [
868 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)])
869 ], [have_pcreposix=no])
871 ], [have_pcreposix=no], -lpcre)
873 dnl ================================================================
874 dnl libpcrs is temporarily disabled.
876 dnl Privoxy's own pcrs version fixes some problems that
877 dnl are present in libpcrs 0.3, the last pcrs release we
878 dnl know of, and as libpcrs seems to be currently unmaintained
879 dnl we can't send these fixes upstream.
880 dnl ================================================================
882 dnl AC_CHECK_LIB(pcrs, pcrs_compile, [AC_CHECK_HEADER(pcrs.h, [have_pcrs=yes], [have_pcrs=no])], [have_pcrs=no], -lpcre)
884 dnl =================================================================
886 dnl =================================================================
890 dnl =================================================================
892 dnl =================================================================
894 AC_ARG_ENABLE(toggle,
895 [ --disable-toggle Don't support temporary disable],
896 [if test $enableval = yes; then
897 AC_DEFINE(FEATURE_TOGGLE)
898 fi],AC_DEFINE(FEATURE_TOGGLE))
901 [ --disable-force Don't allow single-page disable],
902 [if test $enableval = yes; then
903 AC_DEFINE(FEATURE_FORCE_LOAD)
904 fi],AC_DEFINE(FEATURE_FORCE_LOAD))
906 AC_ARG_ENABLE(fast-redirects,
907 [ --disable-fast-redirects Don't support fast redirects],
908 [if test $enableval = yes; then
909 AC_DEFINE(FEATURE_FAST_REDIRECTS)
910 fi], AC_DEFINE(FEATURE_FAST_REDIRECTS))
913 [ --disable-stats Don't keep statistics],
914 [if test $enableval = yes; then
915 AC_DEFINE(FEATURE_STATISTICS)
916 fi],AC_DEFINE(FEATURE_STATISTICS))
918 AC_ARG_ENABLE(extended-statistics,
919 [ --enable-extended-statistics Gather extended statistics.],
920 [if test $enableval = yes; then
921 AC_DEFINE(FEATURE_EXTENDED_STATISTICS)
924 AC_ARG_ENABLE(image-blocking,
925 [ --disable-image-blocking Don't try to figure out whether a request is
926 for an image or HTML - assume HTML.],
927 [if test $enableval = yes; then
928 AC_DEFINE(FEATURE_IMAGE_BLOCKING)
930 AC_DEFINE(FEATURE_IMAGE_BLOCKING))
932 AC_ARG_ENABLE(acl-support,
933 [ --disable-acl-support Prevents the use of ACLs to control access to
934 Privoxy by IP address.],
935 [if test $enableval = yes; then
936 AC_DEFINE(FEATURE_ACL)
938 AC_DEFINE(FEATURE_ACL))
940 AC_ARG_ENABLE(trust-files,
941 [ --disable-trust-files Prevents the use of trust files.],
942 [if test $enableval = yes; then
943 AC_DEFINE(FEATURE_TRUST)
945 AC_DEFINE(FEATURE_TRUST))
947 AC_ARG_ENABLE(editor,
948 [ --disable-editor Prevents the use of the web-based actions file
949 editor and web-based temporary disable setting.],
950 [if test $enableval = yes; then
951 AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS)
953 AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS))
955 AC_ARG_ENABLE(no-gifs,
956 [ --enable-no-gifs Use politically correct PNG format instead of GIF
957 for built-in images. May not work with all browsers.],
958 [if test $enableval = yes; then
959 AC_DEFINE(FEATURE_NO_GIFS)
962 AC_ARG_ENABLE(graceful-termination,
963 [ --enable-graceful-termination Allow to shutdown Privoxy through the webinterface.],
964 [if test $enableval = yes; then
965 AC_DEFINE(FEATURE_GRACEFUL_TERMINATION)
968 AC_ARG_ENABLE(pcre-host-patterns,
969 [ --enable-pcre-host-patterns Allow to use PCRE syntax in host patterns by prefixing the pattern with
970 "PCRE-HOST-PATTERN:". You can use tools/url-pattern-translator.pl to
971 convert existing action files to use PCRE host patterns.],
972 [if test $enableval = yes; then
973 AC_DEFINE(FEATURE_PCRE_HOST_PATTERNS)
976 AC_ARG_ENABLE(external-filters,
977 [ --enable-external-filters Allow to filter content with scripts and programs. Experimental.],
978 [if test $enableval = yes; then
979 AC_DEFINE(FEATURE_EXTERNAL_FILTERS,1,[Define to 1 to allow to filter content with scripts and programs.])
982 AC_ARG_ENABLE(accept-filter,
983 [ --enable-accept-filter Try to use accf_http(9) if supported.],
984 [if test $enableval = yes; then
985 AC_DEFINE(FEATURE_ACCEPT_FILTER)
988 AC_ARG_ENABLE(strptime-sanity-checks,
989 [ --enable-strptime-sanity-checks Only trust strptime() results if an additional strftime()/strptime()
990 conversion doesn't change the result. Can be useful if strptime() is
991 known or suspected to be broken.],
992 [if test $enableval = yes; then
993 AC_DEFINE(FEATURE_STRPTIME_SANITY_CHECKS)
996 AC_ARG_ENABLE(client-tags,
997 [ --disable-client-tags Disable support for client-specific tags],
998 [ if test $enableval = "no"; then have_client_tags=no; fi ])
999 if test "${have_client_tags}" = "no"; then
1000 echo "Disabling support for client-specific tags."
1001 FEATURE_CLIENT_TAGS_ONLY="#"
1003 echo "Enabling support for client-specific tags."
1004 AC_DEFINE(FEATURE_CLIENT_TAGS,1,[Define to enable support for client-specific tags.])
1005 FEATURE_CLIENT_TAGS_ONLY=""
1007 AC_SUBST(FEATURE_CLIENT_TAGS_ONLY)
1011 [ --enable-fuzz Enable code that makes fuzzing more convenient],
1012 [if test $enableval = yes; then
1014 AC_DEFINE(FUZZ,1,[Define to make fuzzing more convenient.])
1018 dnl pcre/pcrs is needed for CGI anyway, so
1019 dnl the choice is only between static and
1022 AC_ARG_ENABLE(dynamic-pcre,
1023 [ --disable-dynamic-pcre Use the built-in, static pcre, even if libpcre is available],
1024 [ if test $enableval = "no"; then have_pcre=no; fi ])
1026 dnl =================================================
1027 dnl libpcrs is temporarily disabled,
1028 dnl see comment above for the reason.
1029 dnl =================================================
1030 dnl AC_ARG_ENABLE(dynamic-pcrs,
1031 dnl [ --disable-dynamic-pcrs Use the built-in, static pcrs, even if libpcrs is available],
1032 dnl [ if test $enableval = "no"; then have_pcrs=no; fi ])
1035 dnl ====================================================
1036 dnl This check is incomplete. For mingw32 zlib is found
1037 dnl by configure, but not necessarily by the compiler.
1038 dnl ====================================================
1040 [ --disable-zlib Don't use zlib to decompress data before filtering.],
1041 [enableval2=$enableval],
1043 if test $enableval2 = yes; then
1044 AC_CHECK_LIB(z, zlibVersion, [have_zlib="yes"], [have_zlib="no"])
1045 if test $have_zlib = "yes"; then
1047 AC_DEFINE(FEATURE_ZLIB,1,[Define to 1 to use zlib to decompress data before filtering.])
1049 AC_MSG_WARN([No zlib found.
1050 Privoxy will not be able to filter compressed content.
1051 This may become a fatal error in the future.])
1055 AC_ARG_ENABLE(compression,
1056 [ --enable-compression Allow Privoxy to compress buffered content if the client supports it. Requires zlib support.],
1057 [enableval2=$enableval],
1059 if test $enableval2 = yes; then
1060 if test $have_zlib = "yes"; then
1061 echo Enabling compression support.
1062 AC_DEFINE(FEATURE_COMPRESSION,1,[Define to 1 to use compression through the zlib library.])
1064 AC_MSG_WARN([No zlib found. Privoxy will not be able to (re-)compressed buffered content.])
1069 # If we have libpcre and either we also have pcreposix or
1070 # we don't need pcreposix, then link pcre dynamically; else
1071 # build it and link statically
1073 if test $have_pcre = "yes"; then
1074 echo "using libpcre"
1076 LIBS="$LIBS -lpcre -lpcreposix"
1077 if test "$use_static_pcre" = "yes"; then
1079 AC_DEFINE(PCRE_STATIC,1,[Define to statically link to pcre library on Windows.])
1080 # see /usr/i686-w64-mingw32/sys-root/mingw/include/pcre.h line 54
1081 # #if defined(_WIN32) && !defined(PCRE_STATIC)
1082 # # ifndef PCRE_EXP_DECL
1083 # # define PCRE_EXP_DECL extern __declspec(dllimport)
1085 # If you want to statically link a program against a PCRE library in the form of
1086 # a non-dll .a file, you must define PCRE_STATIC before including pcre.h or
1087 # pcrecpp.h, otherwise the pcre_malloc() and pcre_free() exported functions will
1088 # be declared __declspec(dllimport), with unwanted results.
1091 AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.])
1094 AC_MSG_ERROR(pcre library not detected.)
1097 AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE)
1099 if test $have_pthread = "yes" -o $target_type = "mingw"; then
1100 echo Enabling connection-sharing support.
1101 AC_DEFINE(FEATURE_CONNECTION_SHARING)
1104 dnl =================================================
1105 dnl libpcrs is temporarily disabled,
1106 dnl see comment above for the reason.
1107 dnl =================================================
1108 dnl # If we have libpcrs and pcre is linked dynamically
1109 dnl # then also link pcrs dynamically, else build and link
1110 dnl # pcrs statically
1112 dnl if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
1113 dnl echo "using libpcrs"
1114 dnl STATIC_PCRS_ONLY=#
1115 dnl LIBS="$LIBS -lpcrs"
1117 dnl echo "using built-in static pcrs"
1118 AC_DEFINE(STATIC_PCRS)
1122 AC_SUBST(STATIC_PCRE_ONLY)
1123 AC_SUBST(STATIC_PCRS_ONLY)
1125 FEATURE_HTTPS_INSPECTION_ONLY=#
1126 dnl ========================================================
1127 dnl check for mbedTLS which can be used for https inspection
1128 dnl ========================================================
1129 FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=#
1131 AC_ARG_WITH(mbedtls,dnl
1132 AC_HELP_STRING([--with-mbedtls], [Enable mbedTLS detection for https inspection.])
1133 AC_HELP_STRING([--without-mbedtls], [Disable mbedTLS detection]),
1134 OPT_MBEDTLS=$withval)
1136 if test X"$OPT_MBEDTLS" != Xno; then
1138 AC_CHECK_LIB(mbedtls, mbedtls_ssl_init,
1140 AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1141 AC_DEFINE(FEATURE_HTTPS_INSPECTION_MBEDTLS, 1, [if mbedTLS is enabled])
1142 AC_SUBST(FEATURE_HTTPS_INSPECTION_MBEDTLS, [1])
1143 FEATURE_HTTPS_INSPECTION_MBEDTLS="yes"
1144 ], [], -lmbedx509 -lmbedcrypto)
1146 if test "x$FEATURE_HTTPS_INSPECTION_MBEDTLS" = "xyes"; then
1147 AC_MSG_NOTICE([Detected mbedTLS. Enabling https inspection.])
1149 LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
1150 old_CFLAGS_nospecial="-Imbedtls/include $old_CFLAGS_nospecial"
1152 FEATURE_HTTPS_INSPECTION_ONLY=
1153 FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=
1156 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS)
1158 dnl =================================================================
1159 dnl check for OpenSSL/LibreSSL which can be used for https inspection
1160 dnl =================================================================
1161 FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=#
1163 AC_ARG_WITH(openssl,dnl
1164 AC_HELP_STRING([--with-openssl], [Enable OpenSSL/LibreSSL detection for https inspection.])
1165 AC_HELP_STRING([--without-openssl], [Disable OpenSSL/LibreSSL detection]),
1166 OPT_OPENSSL=$withval)
1168 if test X"$OPT_OPENSSL" != Xno; then
1169 if test X"$OPT_MBEDTLS" != Xno; then
1170 AC_MSG_ERROR([OpenSSL and mbedTLS support can't be enabled at the same time])
1173 if test "$PORTNAME" != "win32"; then
1174 AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])])
1176 AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [FOUND_SSL_LIB="yes"])
1177 AC_CHECK_LIB(ssl, SSL_library_init, [FOUND_SSL_LIB="yes"])
1178 AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
1180 AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])])
1182 AC_SEARCH_LIBS(OPENSSL_init_ssl, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
1183 AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
1184 AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])])
1187 if test "x$FOUND_SSL_LIB" = xyes; then
1188 AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1189 AC_DEFINE(FEATURE_HTTPS_INSPECTION_OPENSSL, 1, [if OpenSSL is enabled])
1190 AC_SUBST(FEATURE_HTTPS_INSPECTION_OPENSSL, [1])
1191 FEATURE_HTTPS_INSPECTION="yes"
1192 FEATURE_HTTPS_INSPECTION_OPENSSL="yes"
1195 if test "x$FEATURE_HTTPS_INSPECTION_OPENSSL" = "xyes"; then
1196 AC_MSG_NOTICE([Detected OpenSSL. Enabling https inspection.])
1197 AC_MSG_WARN([If you intend to redistribute Privoxy, please make sure the "special exception" from section 3 of the GPLv2 applies.])
1199 LIBS="$LIBS -lssl -lcrypto"
1200 old_CFLAGS_nospecial="$old_CFLAGS_nospecial"
1202 FEATURE_HTTPS_INSPECTION_ONLY=
1203 FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=
1206 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL)
1208 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY)
1210 dnl ========================================================
1211 dnl Check for Brotli which can be used for decompression
1212 dnl ========================================================
1215 AC_HELP_STRING([--with-brotli], [Enable Brotli detection])
1216 AC_HELP_STRING([--without-brotli], [Disable Brotli detection]),
1217 WITH_BROTLI=$withval)
1219 if test X"$WITH_BROTLI" != Xno; then
1221 LIBS="$LIBS -lbrotlidec"
1222 if test $target_type = mingw; then
1223 # XXX: why does just the mingw build need this???
1224 LIBS="$LIBS -lbrotlicommon -lbrotlienc"
1227 AC_CHECK_LIB(brotlidec, BrotliDecoderDecompress)
1229 AC_CHECK_HEADERS(brotli/decode.h,
1231 AC_DEFINE(FEATURE_BROTLI, 1, [If Brotli is used for decompression])
1232 AC_SUBST(FEATURE_BROTLI, [1])
1237 dnl =================================================================
1238 dnl Final cleanup and output
1239 dnl =================================================================
1241 dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it separately
1243 CFLAGS=$old_CFLAGS_nospecial
1244 AC_SUBST(SPECIAL_CFLAGS)
1246 AC_SUBST(PTHREAD_LIB)
1248 AC_OUTPUT(GNUmakefile doc/source/ldp.dsl)