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(pcre-jit-compilation,
977 [ --disable-pcre-jit-compilation Don't let pcrs use pcre JIT compilation even if pcre supports it.],
978 [if test $enableval != yes; then
979 AC_DEFINE(DISABLE_PCRE_JIT_COMPILATION)
982 AC_ARG_ENABLE(external-filters,
983 [ --enable-external-filters Allow to filter content with scripts and programs. Experimental.],
984 [if test $enableval = yes; then
985 AC_DEFINE(FEATURE_EXTERNAL_FILTERS,1,[Define to 1 to allow to filter content with scripts and programs.])
988 AC_ARG_ENABLE(accept-filter,
989 [ --enable-accept-filter Try to use accf_http(9) if supported.],
990 [if test $enableval = yes; then
991 AC_DEFINE(FEATURE_ACCEPT_FILTER)
994 AC_ARG_ENABLE(strptime-sanity-checks,
995 [ --enable-strptime-sanity-checks Only trust strptime() results if an additional strftime()/strptime()
996 conversion doesn't change the result. Can be useful if strptime() is
997 known or suspected to be broken.],
998 [if test $enableval = yes; then
999 AC_DEFINE(FEATURE_STRPTIME_SANITY_CHECKS)
1002 AC_ARG_ENABLE(client-tags,
1003 [ --disable-client-tags Disable support for client-specific tags],
1004 [ if test $enableval = "no"; then have_client_tags=no; fi ])
1005 if test "${have_client_tags}" = "no"; then
1006 echo "Disabling support for client-specific tags."
1007 FEATURE_CLIENT_TAGS_ONLY="#"
1009 echo "Enabling support for client-specific tags."
1010 AC_DEFINE(FEATURE_CLIENT_TAGS,1,[Define to enable support for client-specific tags.])
1011 FEATURE_CLIENT_TAGS_ONLY=""
1013 AC_SUBST(FEATURE_CLIENT_TAGS_ONLY)
1017 [ --enable-fuzz Enable code that makes fuzzing more convenient],
1018 [if test $enableval = yes; then
1020 AC_DEFINE(FUZZ,1,[Define to make fuzzing more convenient.])
1024 dnl pcre/pcrs is needed for CGI anyway, so
1025 dnl the choice is only between static and
1028 AC_ARG_ENABLE(dynamic-pcre,
1029 [ --disable-dynamic-pcre Use the built-in, static pcre, even if libpcre is available],
1030 [ if test $enableval = "no"; then have_pcre=no; fi ])
1032 dnl =================================================
1033 dnl libpcrs is temporarily disabled,
1034 dnl see comment above for the reason.
1035 dnl =================================================
1036 dnl AC_ARG_ENABLE(dynamic-pcrs,
1037 dnl [ --disable-dynamic-pcrs Use the built-in, static pcrs, even if libpcrs is available],
1038 dnl [ if test $enableval = "no"; then have_pcrs=no; fi ])
1041 dnl ====================================================
1042 dnl This check is incomplete. For mingw32 zlib is found
1043 dnl by configure, but not necessarily by the compiler.
1044 dnl ====================================================
1046 [ --disable-zlib Don't use zlib to decompress data before filtering.],
1047 [enableval2=$enableval],
1049 if test $enableval2 = yes; then
1050 AC_CHECK_LIB(z, zlibVersion, [have_zlib="yes"], [have_zlib="no"])
1051 if test $have_zlib = "yes"; then
1053 AC_DEFINE(FEATURE_ZLIB,1,[Define to 1 to use zlib to decompress data before filtering.])
1055 AC_MSG_WARN([No zlib found.
1056 Privoxy will not be able to filter compressed content.
1057 This may become a fatal error in the future.])
1061 AC_ARG_ENABLE(compression,
1062 [ --enable-compression Allow Privoxy to compress buffered content if the client supports it. Requires zlib support.],
1063 [enableval2=$enableval],
1065 if test $enableval2 = yes; then
1066 if test $have_zlib = "yes"; then
1067 echo Enabling compression support.
1068 AC_DEFINE(FEATURE_COMPRESSION,1,[Define to 1 to use compression through the zlib library.])
1070 AC_MSG_WARN([No zlib found. Privoxy will not be able to (re-)compressed buffered content.])
1075 # If we have libpcre and either we also have pcreposix or
1076 # we don't need pcreposix, then link pcre dynamically; else
1077 # build it and link statically
1079 if test $have_pcre = "yes"; then
1080 echo "using libpcre"
1082 LIBS="$LIBS -lpcre -lpcreposix"
1083 if test "$use_static_pcre" = "yes"; then
1085 AC_DEFINE(PCRE_STATIC,1,[Define to statically link to pcre library on Windows.])
1086 # see /usr/i686-w64-mingw32/sys-root/mingw/include/pcre.h line 54
1087 # #if defined(_WIN32) && !defined(PCRE_STATIC)
1088 # # ifndef PCRE_EXP_DECL
1089 # # define PCRE_EXP_DECL extern __declspec(dllimport)
1091 # If you want to statically link a program against a PCRE library in the form of
1092 # a non-dll .a file, you must define PCRE_STATIC before including pcre.h or
1093 # pcrecpp.h, otherwise the pcre_malloc() and pcre_free() exported functions will
1094 # be declared __declspec(dllimport), with unwanted results.
1097 AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.])
1100 AC_MSG_ERROR(pcre library not detected.)
1103 AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE)
1105 if test $have_pthread = "yes" -o $target_type = "mingw"; then
1106 echo Enabling connection-sharing support.
1107 AC_DEFINE(FEATURE_CONNECTION_SHARING)
1110 dnl =================================================
1111 dnl libpcrs is temporarily disabled,
1112 dnl see comment above for the reason.
1113 dnl =================================================
1114 dnl # If we have libpcrs and pcre is linked dynamically
1115 dnl # then also link pcrs dynamically, else build and link
1116 dnl # pcrs statically
1118 dnl if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
1119 dnl echo "using libpcrs"
1120 dnl STATIC_PCRS_ONLY=#
1121 dnl LIBS="$LIBS -lpcrs"
1123 dnl echo "using built-in static pcrs"
1124 AC_DEFINE(STATIC_PCRS)
1128 AC_SUBST(STATIC_PCRE_ONLY)
1129 AC_SUBST(STATIC_PCRS_ONLY)
1131 FEATURE_HTTPS_INSPECTION_ONLY=#
1132 dnl ========================================================
1133 dnl check for mbedTLS which can be used for https inspection
1134 dnl ========================================================
1135 FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=#
1137 AC_ARG_WITH(mbedtls,dnl
1138 AC_HELP_STRING([--with-mbedtls], [Enable mbedTLS detection for https inspection.])
1139 AC_HELP_STRING([--without-mbedtls], [Disable mbedTLS detection]),
1140 OPT_MBEDTLS=$withval)
1142 if test X"$OPT_MBEDTLS" != Xno; then
1144 AC_CHECK_LIB(mbedtls, mbedtls_ssl_init,
1146 AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1147 AC_DEFINE(FEATURE_HTTPS_INSPECTION_MBEDTLS, 1, [if mbedTLS is enabled])
1148 AC_SUBST(FEATURE_HTTPS_INSPECTION_MBEDTLS, [1])
1149 FEATURE_HTTPS_INSPECTION_MBEDTLS="yes"
1150 ], [], -lmbedx509 -lmbedcrypto)
1152 if test "x$FEATURE_HTTPS_INSPECTION_MBEDTLS" = "xyes"; then
1153 AC_MSG_NOTICE([Detected mbedTLS. Enabling https inspection.])
1155 LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
1156 old_CFLAGS_nospecial="-Imbedtls/include $old_CFLAGS_nospecial"
1158 FEATURE_HTTPS_INSPECTION_ONLY=
1159 FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=
1162 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS)
1164 dnl =================================================================
1165 dnl check for OpenSSL/LibreSSL which can be used for https inspection
1166 dnl =================================================================
1167 FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=#
1169 AC_ARG_WITH(openssl,dnl
1170 AC_HELP_STRING([--with-openssl], [Enable OpenSSL/LibreSSL detection for https inspection.])
1171 AC_HELP_STRING([--without-openssl], [Disable OpenSSL/LibreSSL detection]),
1172 OPT_OPENSSL=$withval)
1174 if test X"$OPT_OPENSSL" != Xno; then
1175 if test X"$OPT_MBEDTLS" != Xno; then
1176 AC_MSG_ERROR([OpenSSL and mbedTLS support can't be enabled at the same time])
1179 if test "$PORTNAME" != "win32"; then
1180 AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])])
1182 AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [FOUND_SSL_LIB="yes"])
1183 AC_CHECK_LIB(ssl, SSL_library_init, [FOUND_SSL_LIB="yes"])
1184 AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
1186 AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])])
1188 AC_SEARCH_LIBS(OPENSSL_init_ssl, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
1189 AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
1190 AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])])
1193 if test "x$FOUND_SSL_LIB" = xyes; then
1194 AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1195 AC_DEFINE(FEATURE_HTTPS_INSPECTION_OPENSSL, 1, [if OpenSSL is enabled])
1196 AC_SUBST(FEATURE_HTTPS_INSPECTION_OPENSSL, [1])
1197 FEATURE_HTTPS_INSPECTION="yes"
1198 FEATURE_HTTPS_INSPECTION_OPENSSL="yes"
1201 if test "x$FEATURE_HTTPS_INSPECTION_OPENSSL" = "xyes"; then
1202 AC_MSG_NOTICE([Detected OpenSSL. Enabling https inspection.])
1203 AC_MSG_WARN([If you intend to redistribute Privoxy, please make sure the "special exception" from section 3 of the GPLv2 applies.])
1205 LIBS="$LIBS -lssl -lcrypto"
1206 old_CFLAGS_nospecial="$old_CFLAGS_nospecial"
1208 FEATURE_HTTPS_INSPECTION_ONLY=
1209 FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=
1212 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL)
1214 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY)
1216 dnl ========================================================
1217 dnl Check for Brotli which can be used for decompression
1218 dnl ========================================================
1221 AC_HELP_STRING([--with-brotli], [Enable Brotli detection])
1222 AC_HELP_STRING([--without-brotli], [Disable Brotli detection]),
1223 WITH_BROTLI=$withval)
1225 if test X"$WITH_BROTLI" != Xno; then
1227 LIBS="$LIBS -lbrotlidec"
1228 if test $target_type = mingw; then
1229 # XXX: why does just the mingw build need this???
1230 LIBS="$LIBS -lbrotlicommon -lbrotlienc"
1233 AC_CHECK_LIB(brotlidec, BrotliDecoderDecompress)
1235 AC_CHECK_HEADERS(brotli/decode.h,
1237 AC_DEFINE(FEATURE_BROTLI, 1, [If Brotli is used for decompression])
1238 AC_SUBST(FEATURE_BROTLI, [1])
1243 dnl =================================================================
1244 dnl Final cleanup and output
1245 dnl =================================================================
1247 dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it separately
1249 CFLAGS=$old_CFLAGS_nospecial
1250 AC_SUBST(SPECIAL_CFLAGS)
1252 AC_SUBST(PTHREAD_LIB)
1254 AC_OUTPUT(GNUmakefile doc/source/ldp.dsl)