Add configure option to enable MemorySanitizer
[privoxy.git] / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2 dnl
3 dnl Written by and Copyright (C) 2001-2021 the
4 dnl Privoxy team. https://www.privoxy.org/
5 dnl
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
9 dnl
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.
15 dnl
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.
21 dnl
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.
27 dnl
28
29 dnl =================================================================
30 dnl AutoConf Initialization
31 dnl =================================================================
32
33 AC_REVISION($Revision: 1.213 $)
34 AC_INIT(jcc.c)
35
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) "
39    read answer
40    if test "$answer" != "y"; then
41       exit 1
42    else
43       autoheader
44   fi
45 fi
46
47 AC_CONFIG_HEADER([config.h])
48 AC_CANONICAL_HOST
49
50 dodk=auto
51 DKPREFIX=none
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
57 yes) dodk=yes;;
58 no) dodk=no;;
59 *)
60         dodk=yes
61         DKPREFIX=$withval
62         ;;
63 esac
64 ])
65 DB2HTML=false
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
70 DB2HTML=$withval
71 ])
72
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.
80
81 VERSION_MAJOR=3
82 VERSION_MINOR=0
83 VERSION_POINT=33
84 CODE_STATUS="UNRELEASED"
85
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
89
90 dnl =================================================================
91 dnl Substitute the version numbers
92 dnl =================================================================
93
94 AC_SUBST(VERSION_MAJOR)
95 AC_SUBST(VERSION_MINOR)
96 AC_SUBST(VERSION_POINT)
97 AC_SUBST(CODE_STATUS)
98 AC_SUBST(SOURCE_DATE_EPOCH)
99
100 dnl
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}")
106
107 dnl =================================================================
108 dnl Checks for programs needed to build.
109 dnl =================================================================
110
111 dnl Keep AC_PROG_CC from setting its own defaults:
112 if test "X$CFLAGS" = "X"; then
113    CFLAGS=" "
114 fi
115
116 AC_PROG_CC
117 AC_PROG_CPP
118 AC_PROG_INSTALL
119 AC_PROG_LN_S
120 AC_PROG_MAKE_SET
121 AC_PROG_AWK
122
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)
126 AC_SUBST(ID)
127 AC_SUBST(BGROUPS)
128
129 dnl =================================================================
130 dnl debug, gcc and gdb support
131 dnl =================================================================
132
133 AC_ARG_WITH(debug,
134         [  --with-debug            Enable debug mode],
135         [
136                 if test "x$withval" != "xno" ; then
137                     if test $ac_cv_prog_cc_g = yes; then
138                       if test "$GCC" = yes; then
139                         if test "$GDB"; then
140                           CFLAGS="$CFLAGS -ggdb"
141                         else
142                           CFLAGS="$CFLAGS -g"
143                         fi
144                         CFLAGS="$CFLAGS -Wshadow  -Wconversion"
145                       else
146                         CFLAGS="$CFLAGS -g"
147                       fi
148                    fi
149                 fi
150         ],
151         [
152             if test "X$CFLAGS" = "X "; then # if CFLAGS were unset (see above)
153               if test "$GCC" = yes; then
154                 CFLAGS="-O2"
155               fi
156             fi
157         ]
158 )
159
160 AC_ARG_WITH(assertions, [  --with-assertions       Enable assertions])
161 if test "x$with_assertions" != "xyes"; then
162     CFLAGS="$CFLAGS -DNDEBUG"
163 fi
164
165 AC_ARG_WITH(asan, [  --with-asan       Enable AddressSanitizer. Requires compiler support.])
166 if test "x$with_asan" = "xyes"; then
167     CFLAGS="$CFLAGS -fsanitize=address"
168     LDFLAGS="$LDFLAGS -fsanitize=address"
169 fi
170
171 AC_ARG_WITH(asan, [  --with-msan       Enable MemorySanitizer. Requires compiler support.])
172 if test "x$with_msan" = "xyes"; then
173     CFLAGS="$CFLAGS -fsanitize=memory"
174     LDFLAGS="$LDFLAGS -fsanitize=memory"
175 fi
176
177 AC_ARG_WITH(usan, [  --with-usan       Enable UndefinedBehaviorSanitizer. Requires compiler support.])
178 if test "x$with_usan" = "xyes"; then
179     CFLAGS="$CFLAGS -fsanitize=undefined"
180     LDFLAGS="$LDFLAGS -fsanitize=undefined"
181 fi
182
183 dnl =================================================================
184 dnl Check for user and group validity
185 dnl =================================================================
186
187
188 if test "$host_os" = haiku; then
189   echo "Skipping user and group validity stuff.";
190
191 else
192
193   $ID privoxy >/dev/null 2>/dev/null
194   if test $? -ne 0 ; then
195    AC_MSG_WARN(There is no user 'privoxy' on this system)
196   fi
197   AC_MSG_CHECKING([for user])
198   AC_ARG_WITH(user,
199         [  --with-user=privoxy          Set user under which privoxy will run],
200         [
201                 if test "x$withval" != "xyes"; then
202                   if test $ID = no ; then
203                     AC_MSG_ERROR(There is no 'id' program on this system)
204                   else
205                     AC_MSG_RESULT($with_user)
206                     $ID $with_user 2>/dev/null >/dev/null
207                     if test $? -eq 0 ; then
208                       USER=$with_user;
209                     else
210                       AC_MSG_ERROR(There is no user '$with_user' on this system)
211                     fi
212                   fi
213                   else
214                    AC_MSG_ERROR(We need a user if you give me this parameter)
215                 fi
216         ],
217         [
218           if test $ID = no ; then
219             AC_MSG_ERROR(There is no 'id' programm on this system)
220           else
221             AC_MSG_RESULT(none specified)
222             USER=$with_user
223           fi
224         ]
225   )
226   AC_SUBST(USER)
227
228   AC_MSG_CHECKING([for group])
229   AC_ARG_WITH(group,
230         [  --with-group=privoxy         Set group for privoxy],
231         [
232                 if test "x$withval" != "xyes"; then
233                   if test $BGROUPS = no ; then
234                     AC_MSG_ERROR(There is no 'groups' program on this system)
235                   else
236                     AC_MSG_RESULT($with_group)
237                     $BGROUPS $USER >/dev/null
238                     if test $? -eq 0 ; then
239                       for i in `$BGROUPS $USER | sed 's/.*: //' 2>/dev/null`; do
240                         if test "x$i" = "x$with_group" ; then
241                           GROUP=$with_group
242                           break
243                         fi
244                       done
245                       if test "x$GROUP" != "x$with_group" ; then
246                         AC_MSG_ERROR(The given value '$withval' does not match group entry)
247                       fi
248                     else
249                       AC_MSG_ERROR(There is no group entry for user '$USER')
250                     fi
251                   fi
252                 else
253                    AC_MSG_ERROR(We need a group if you give me this parameter)
254                 fi
255         ],
256         [
257           if test $BGROUPS = no ; then
258             AC_MSG_ERROR(There is no 'groups' programm on this system)
259           else
260             AC_MSG_RESULT(none specified)
261             GROUP=$with_group;
262           fi
263         ]
264   )
265   AC_SUBST(GROUP)
266
267 fi
268
269 dnl =================================================================
270 dnl additional gcc flags
271 dnl =================================================================
272 dnl
273 if test "$GCC"; then
274   if test "$host" != "powerpc-unknown-amigaos"; then
275     CFLAGS="-pipe $CFLAGS"
276   fi
277 fi
278
279
280 dnl =================================================================
281 dnl Build type
282 dnl =================================================================
283 dnl
284 dnl Must do this first.
285 dnl
286 dnl Reason: This sets CFLAGS in order to switch the Cygwin compiler
287 dnl into Cygwin or MinGW32 modes.  Depending on the mode selected,
288 dnl the compiler will use completely different sets of library
289 dnl and include files.
290 dnl
291 dnl =================================================================
292
293 AC_MINGW32
294 AC_CYGWIN
295
296 if test "$MINGW32" = "yes"; then
297   target_type=mingw
298 else
299   if test "$CYGWIN" = "yes"; then
300     target_type=cygwin
301   else
302     target_type=unix
303   fi
304 fi
305
306 if test $dodk = auto; then
307         dodk=no
308         if test $target_type = unix; then
309                 case "$host_os" in
310                 linux* | gnu* | *bsd*)
311                         dodk=yes
312                 ;;
313                 esac
314         fi
315 fi
316
317 dnl Decide what to do based on target_type
318 dnl Note: PTHREAD_LIB is always set, even if pthread is disabled.
319 dnl This is because we don't know yet whether pthread is enabled.
320
321 AC_ARG_ENABLE(mingw32,
322 [  --enable-mingw32                Use mingw32 for a Windows GUI],
323 [if test $enableval = yes; then
324   target_type=mingw
325 fi])
326
327 if test $target_type = mingw; then
328   WIN_ONLY=
329   CFLAGS="$CFLAGS -DWINVER=0x501"
330   SPECIAL_CFLAGS="-mwindows"
331 dnl from the cygwin FAQ: The regular setup allows you to use the -mwindows option
332 dnl to include a set of the basic libraries user32, gdi32 and comdlg32.
333 dnl (and also make your program a GUI program instead of a console program)
334   PTHREAD_LIB=-lpthread
335   echo "Using mingw32 (Win32 GUI)"
336 else
337   WIN_ONLY=#
338   if test $target_type = cygwin; then
339     SPECIAL_CFLAGS="-mno-win32"
340     PTHREAD_LIB=
341     echo "Using Cygnus (Win32 command line)"
342   else
343     SPECIAL_CFLAGS=
344     PTHREAD_LIB=-lpthread
345   fi
346 fi
347 AC_SUBST(WIN_ONLY)
348
349 if test $dodk != no; then
350         AC_CHECK_PROGS(W3M, w3m, false)
351         if test "$W3M" = false; then
352                 AC_MSG_WARN(You need w3m to build text documentation.)
353         fi
354         if test $DB2HTML = false; then
355                 dnl We need to clean the variable, otherwise AC_CHECK_PROGS
356                 dnl will fail
357                 DB2HTML=""
358                 AC_CHECK_PROGS(DB2HTML,db2html docbook2html,false)
359         fi
360 fi
361 AC_SUBST(W3M)
362 AC_SUBST(DB2HTML)
363
364 dnl prefer openjade to jade
365 dnl Check for jade, so we can build the documentation
366 AC_CHECK_PROGS(JADEBIN,openjade jade,false)
367 AC_SUBST(JADEBIN)
368
369 dnl Prefer OpenSP to SP
370 dnl   ref: https://lists.privoxy.org/pipermail/privoxy-devel/2018-November/000293.html
371 AC_CHECK_PROGS(NSGMLS,onsgmls nsgmls,false)
372 AC_SUBST(NSGMLS)
373
374 dnl Check for man2html for docs.
375 AC_CHECK_PROGS(MAN2HTML,man2html,false)
376 AC_SUBST(MAN2HTML)
377
378 dnl Set doc status flag for conditional content inclusions
379 DOC_STATUS=p-not-stable
380 if  test $CODE_STATUS = stable; then
381      DOC_STATUS="p-stable"
382 fi
383 AC_SUBST(DOC_STATUS)
384
385 dnl Checking for the docbook.dsl stylesheet file
386 dnl It is still not portable (directory slash)
387 JADECAT=""
388 if test $dodk = yes; then
389   if test $DKPREFIX = none; then
390     for i in /usr/share/sgml/docbook/dsssl-stylesheets \
391              /usr/share/sgml/docbkdsl /usr/share/sgml/docbook-dsssl \
392              /usr/local/share/sgml/docbook/dsssl/modular \
393              /usr/share/sgml/docbook/stylesheet/dsssl/modular/ \
394              ; do
395 dnl  echo -n does not fly with /bin/sh.
396 dnl      echo -n "checking for $i/html/docbook.dsl..."
397       AC_MSG_CHECKING([for $i])
398       if test -f $i/html/docbook.dsl; then
399         echo "yes"
400         DKPREFIX=$i
401         break
402       else
403         echo "no"
404       fi
405     done
406 # where are the catalogs?
407     for i in /usr/share/sgml/CATALOG.docbk30 \
408              /usr/share/sgml/CATALOG.docbk31 \
409              /usr/share/sgml/CATALOG.docbk31 \
410              /usr/local/share/sgml/docbook/2.4.1/docbook.cat \
411              /usr/local/share/sgml/docbook/3.0/docbook.cat \
412              /usr/local/share/sgml/docbook/3.1/docbook.cat \
413              /usr/share/sgml/docbook/dtd/3.1/docbook.cat \
414              ; do
415 dnl     echo -n "checking for $i..."
416       AC_MSG_CHECKING([for $i])
417       if test -f $i; then
418         echo "yes"
419         JADECAT="$JADECAT -c $i"
420       else
421         echo "no"
422       fi
423     done
424   fi
425 fi
426 AC_SUBST(JADECAT)
427 AC_SUBST(DKPREFIX)
428
429 AC_ARG_ENABLE(large-file-support,
430 [  --enable-large-file-support     Define _LARGE_FILES and friends.
431                                   Required by some systems to support files larger then 2GB.],
432 [if test $enableval = yes; then
433     CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D_LARGEFILE_SOURCE=1"
434 fi])
435
436 AC_ARG_ENABLE(static-linking,
437 [  --enable-static-linking         Use static linking instead of dynamic linking (ie. LDFLAGS=-static)],
438 [ if test $enableval = yes; then LDFLAGS="$LDFLAGS -static"; use_static_pcre="yes"; fi ])
439
440 dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
441 old_CFLAGS_nospecial=$CFLAGS
442 CFLAGS="$CFLAGS $SPECIAL_CFLAGS"
443
444 # Hack to force AutoConf to use the CFLAGS we just set
445 dnl Warning: This may break with a future version of Autoconf
446 dnl          Tested with autoconf 2.13
447 ac_cpp='$CPP $CPPFLAGS $SPECIAL_CFLAGS'
448 ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
449 ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
450
451
452 dnl =================================================================
453 dnl Thread support
454 dnl =================================================================
455
456 AC_CHECK_HEADER(pthread.h, [have_pthread=yes], [have_pthread=no])
457
458 AC_ARG_ENABLE(pthread,
459 [  --disable-pthread               Don't use POSIX threads (pthreads)],
460 [if test $enableval = no; then
461   # Disable pthreads
462   if test $have_pthread = yes; then
463      AC_MSG_WARN([pthreads seem to be available but you are using --disable-pthread.])
464      AC_MSG_WARN([This is almost always a mistake and can render Privoxy unacceptable slow.])
465   fi
466   have_pthread=no
467 fi])
468
469 if test $have_pthread = yes; then
470   PTHREAD_ONLY=
471   AC_DEFINE(FEATURE_PTHREAD)
472   echo Using POSIX threads
473   if test "$GCC" = "yes"; then
474     # Set a GCC specific switch:
475     if test "$target_type" = "unix"; then
476       ac_jgf_save_CFLAGS=$CFLAGS
477       CFLAGS="$CFLAGS -pthread"
478       AC_TRY_LINK([#include <pthread.h>],
479         [void *p = pthread_create;],
480         [
481           # This compiler switch makes GCC on Linux thread-safe
482           # However, it's not supported on most other OS.
483           PTHREAD_LIB=
484           SPECIAL_CFLAGS="-pthread"
485         ])
486       CFLAGS=$ac_jgf_save_CFLAGS
487     fi
488   fi
489 else
490   PTHREAD_ONLY=#
491   echo Using native threads
492 fi
493
494 AC_SUBST(PTHREAD_ONLY)
495
496 dnl =================================================================
497 dnl On most platforms select() does not support fd numbers above
498 dnl FD_SETSIZE, as a result Privoxy can't handle more than
499 dnl approximately FD_SETSIZE/2 client connections.
500 dnl On some platforms the value can be changed at compile time,
501 dnl on others it's hardcoded and requires recompilation of the OS.
502 dnl Only relevant if select() is actually being used.
503 dnl =================================================================
504 AC_ARG_WITH(fdsetsize,
505  [  --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().],
506  [
507    if test "x$withval" != "xyes"; then
508      AC_DEFINE_UNQUOTED(FD_SETSIZE,$with_fdsetsize,[Relevant for select(). Not honoured by all OS.])
509      echo "Redefining FD_SETSIZE to $with_fdsetsize."
510      AC_MSG_WARN(On platforms that don't support FD_SETSIZE redefinition it may cause memory corruption.)
511    else
512      AC_MSG_ERROR(--with-fdsetsize used without value)
513    fi
514    ]
515 )
516
517 dnl =================================================================
518 dnl Support for thread-safe versions of gethostbyaddr, gethostbyname,
519 dnl gmtime and localtime
520 dnl =================================================================
521
522 dnl Next line needed to find the gethost*_r functions on Solaris
523 AC_CHECK_LIB(nsl, gethostbyname)
524
525 AC_CHECK_FUNC(gethostbyaddr_r, [
526   AC_MSG_CHECKING([signature of gethostbyaddr_r])
527   AC_TRY_COMPILE([
528 #   include <netdb.h>
529   ], [
530     struct hostent *h, *hp;
531     char *a, *b;
532     int l, bl, t, e;
533     (void) gethostbyaddr_r(a, l, t, h, b, bl, &hp, &e)
534   ], [
535     AC_DEFINE(HAVE_GETHOSTBYADDR_R_8_ARGS)
536     AC_MSG_RESULT([8 args])
537   ], [
538     AC_TRY_COMPILE([
539 #     include <netdb.h>
540     ], [
541       struct hostent *h;
542       char *a, *b;
543       int l, bl, t, e;
544       (void) gethostbyaddr_r(a, l, t, h, b, bl, &e)
545     ], [
546       AC_DEFINE(HAVE_GETHOSTBYADDR_R_7_ARGS)
547       AC_MSG_RESULT([7 args])
548     ], [
549       AC_TRY_COMPILE([
550 #       include <netdb.h>
551       ], [
552         struct hostent_data *d;
553         struct hostent *h;
554         char a,
555         int l, t;
556         (void) gethostbyaddr_r(a, l, t, h, d)
557       ], [
558         AC_DEFINE(HAVE_GETHOSTBYADDR_R_5_ARGS)
559         AC_MSG_RESULT([5 args])
560       ], [
561         AC_MSG_RESULT(unrecognised)
562       ])
563     ])
564   ])
565 ], [
566   AC_MSG_RESULT(no)
567 ])
568
569 AC_CHECK_FUNC(gethostbyname_r, [
570   AC_MSG_CHECKING([signature of gethostbyname_r])
571   AC_TRY_COMPILE([
572 #   include <netdb.h>
573   ], [
574     struct hostent *h, *r;
575     char *n, *b;
576     int bl, e;
577     (void) gethostbyname_r(n, h, b, bl, &r, &e)
578   ], [
579     AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARGS)
580     AC_MSG_RESULT([6 args])
581   ], [
582     AC_TRY_COMPILE([
583 #     include <netdb.h>
584     ], [
585       struct hostent *h;
586       char *n, *b;
587       int bl, e;
588       (void) gethostbyname_r(n, h, b, bl, &e)
589     ], [
590       AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARGS)
591       AC_MSG_RESULT([5 args])
592     ], [
593       AC_TRY_COMPILE([
594 #       include <netdb.h>
595       ], [
596         struct hostent_data *d;
597         struct hostent *h;
598         char *n,
599         (void) gethostbyname_r(n, h, d)
600       ], [
601         AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARGS)
602         AC_MSG_RESULT([3 args])
603       ], [
604         AC_MSG_RESULT(unrecognised)
605       ])
606     ])
607   ])
608 ], [
609   AC_MSG_RESULT(no)
610 ])
611
612 AC_CHECK_FUNC(gmtime_r, [
613   AC_MSG_CHECKING([signature of gmtime_r])
614   AC_TRY_COMPILE([
615 #   include <time.h>
616   ], [
617     struct time *t;
618     struct tm *tm;
619     (void) gmtime_r(t, tm)
620   ], [
621     AC_MSG_RESULT(ok)
622     AC_DEFINE(HAVE_GMTIME_R)
623   ], [
624     AC_MSG_RESULT(unrecognised)
625   ])
626 ], [
627   AC_MSG_RESULT(no)
628 ])
629
630 AC_CHECK_FUNC(localtime_r, [
631   AC_MSG_CHECKING([signature of localtime_r])
632   AC_TRY_COMPILE([
633 #   include <time.h>
634   ], [
635     struct time *t;
636     struct tm *tm;
637     (void) localtime_r(t, tm)
638   ], [
639     AC_MSG_RESULT(ok)
640     AC_DEFINE(HAVE_LOCALTIME_R)
641   ], [
642     AC_MSG_RESULT(unrecognised)
643   ])
644 ], [
645   AC_MSG_RESULT(no)
646 ])
647
648 dnl =================================================================
649 dnl Solaris specific
650 dnl FIXME: Not tested on Solaris yet...
651 dnl ISFIXED: Have tested it on Solaris, but there are other ways to
652 dnl     make these checks generic, e.g.:
653 dnl AC_CHECK_FUNC(getsockopt, , AC_CHECK_LIB(socket, getsockopt))
654 dnl     (Moritz Barsnick <moritz@barsnick.net>)
655 dnl =================================================================
656
657
658 SOCKET_LIB=
659
660 case "$host" in
661 *-solaris*) SOCKET_LIB="-lsocket -lnsl"
662             AC_DEFINE(__EXTENSIONS__)
663             if test "$GCC" = "yes"; then
664               # Set a GCC specific switch:
665               # This compiler switch makes Solaris thread-safe
666               PTHREAD_LIB=
667               SPECIAL_CFLAGS="-pthreads"
668             else
669               # What do we do without GCC? Guess this:
670               SPECIAL_CFLAGS="-D_REENTRANT"
671             fi
672 ;;
673 esac
674
675 AC_SUBST(SOCKET_LIB)
676
677 dnl =================================================================
678 dnl Solaris problem, and others perhaps (socklen_t is undefined)
679 dnl =================================================================
680
681 if test $target_type != mingw; then
682 # i686-w64-mingw32-gcc gets socklen_t define from ws2tcpip.h
683
684 AC_MSG_CHECKING([for socklen_t])
685 AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]),
686         AC_MSG_RESULT([no])
687         AC_DEFINE(socklen_t,int,
688                 [ Define to 'int' if <sys/socket.h> doesn't have it. ]))
689
690 fi
691
692 dnl =================================================================
693 dnl Mac OSX specific
694 dnl =================================================================
695
696 case "$host" in
697 *-apple-darwin*) SPECIAL_CFLAGS="-Dunix"
698 ;;
699 esac
700
701 dnl =================================================================
702 dnl OpenBSD specific
703 dnl =================================================================
704
705 case "$host" in
706 *-openbsd*) SPECIAL_CFLAGS="$SPECIAL_CFLAGS -Dunix"
707 ;;
708 esac
709
710 dnl =================================================================
711 dnl Haiku specific
712 dnl =================================================================
713
714 if test "$host_os" = haiku; then
715   # Omit the "-pthread" flag to gcc, even when building with gcc 2.95
716   SPECIAL_CFLAGS=
717
718   # Haiku's pthreads implementation exists in its system library,
719   # libroot, not in a separate pthreads library
720   PTHREAD_LIB=
721
722   # Networking code exists in libnetwork
723   SOCKET_LIB=-lnetwork
724
725   # Search Haiku's common-library folder to find its pcre and
726   # pcreposix libraries
727   LIBS="-L/boot/common/lib $LIBS"
728 fi
729
730 dnl =================================================================
731 dnl Check for standard compiler stuff
732 dnl =================================================================
733
734 AC_EXEEXT
735 AC_OBJEXT
736 AC_HEADER_STDC
737 AC_HEADER_DIRENT
738 AC_C_CONST
739 AC_TYPE_SIZE_T
740 AC_TYPE_PID_T
741 AC_HEADER_TIME
742 AC_STRUCT_TM
743 AC_CHECK_SIZEOF(int, 4)
744 AC_CHECK_SIZEOF(char *, 4)
745 AC_CHECK_SIZEOF(long, 4)
746 AC_CHECK_SIZEOF(long long, 8)
747 AC_CHECK_SIZEOF(size_t, 4)
748 AC_CHECK_SIZEOF(time_t, 8)
749
750 dnl Checks for header files.
751 AC_CHECK_HEADERS([ \
752  OS.h \
753  arpa/inet.h \
754  errno.h \
755  fcntl.h \
756  limits.h \
757  locale.h \
758  netdb.h \
759  netinet/in.h \
760  stddef.h \
761  stdlib.h \
762  string.h \
763  sys/ioctl.h \
764  sys/socket.h \
765  sys/time.h \
766  sys/timeb.h \
767  sys/wait.h \
768  unistd.h \
769 ])
770
771 dnl Checks for library functions.
772 AC_PROG_GCC_TRADITIONAL
773 AC_TYPE_SIGNAL
774 AC_CHECK_FUNCS([ \
775  access \
776  arc4random \
777  atexit \
778  calloc \
779  getcwd \
780  gethostbyaddr \
781  gethostbyaddr_r \
782  gethostbyname \
783  gethostbyname_r \
784  gettimeofday \
785  inet_ntoa \
786  memchr \
787  memmove \
788  memset \
789  nanosleep \
790  poll \
791  putenv \
792  random \
793  regcomp \
794  select \
795  setlocale \
796  shutdown \
797  snprintf \
798  socket \
799  strchr \
800  strdup \
801  strerror \
802  strftime \
803  strlcat \
804  strlcpy \
805  strptime \
806  strtoul \
807  timegm \
808  tzset \
809 ])
810
811 dnl Checks for RFC 2553 resolver and socket functions
812 AC_ARG_ENABLE(ipv6-support,
813 [  --disable-ipv6-support          Disable IPv6 support and other RFC-2554-related improvements],
814 [if test $enableval = yes; then
815   enable_ipv6_support=yes
816 fi], enable_ipv6_support=yes)
817
818 if test $enable_ipv6_support != yes; then
819   AC_MSG_WARN([Skipping checks for IPv6 support and other RFC-2554-related improvements.
820     Due to lock contention, this may result in slower DNS resolution for IPv4 setups, too.])
821 elif test $target_type = mingw; then
822   AC_CHECK_LIB(ws2_32, main)
823
824   AC_MSG_CHECKING(getaddrinfo in ws2_32)
825   AC_TRY_LINK(
826     [
827       #include<winsock2.h>
828       #include<windows.h>
829       #include<ws2tcpip.h>
830     ],
831     [getaddrinfo(0,0,0,0)],
832     have_ws2_32_getaddrinfo=yes
833   )
834   AC_MSG_RESULT($have_ws2_32_getaddrinfo)
835
836   AC_MSG_CHECKING(getnameinfo in ws2_32)
837   AC_TRY_LINK(
838     [
839       #include<winsock2.h>
840       #include<windows.h>
841       #include<ws2tcpip.h>
842     ],
843     [getnameinfo(0,0,0,0,0,0,0)],
844     have_ws2_32_getnameinfo=yes
845   )
846   AC_MSG_RESULT($have_ws2_32_getnameinfo)
847
848   if test $have_ws2_32_getaddrinfo ; then
849     if test $have_ws2_32_getnameinfo ; then
850       AC_DEFINE([HAVE_RFC2553], [1],
851         [Define if RFC 2553 resolver functions like getaddrinfo(3) and
852          getnameinfo(3) present])
853     fi
854   fi
855 else
856   AC_CHECK_FUNC([getaddrinfo],
857      [AC_CHECK_FUNC([getnameinfo],
858         [AC_DEFINE([HAVE_RFC2553], [1],
859            [Define if RFC 2553 resolver functions like getaddrinfo(3) and
860             getnameinfo(3) present])
861         ])
862   ])
863 fi
864
865 dnl =================================================================
866 dnl Checks for libraries.
867 dnl =================================================================
868 dnl Note: Some systems may have the library but not the system header
869 dnl       file, so we must check for both.
870 dnl       Also check for correct version
871 AC_CHECK_LIB(pcre, pcre_compile, [
872    AC_CHECK_HEADER(pcre.h, [
873       AC_EGREP_HEADER(pcre_fullinfo, pcre.h, [have_pcre=yes], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no])
874    ], [
875       AC_CHECK_HEADER(pcre/pcre.h, [
876          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])
877       ], [have_pcre=no])
878    ])
879 ], [have_pcre=no])
880
881 AC_CHECK_LIB(pcreposix, regcomp, [
882    AC_CHECK_HEADER(pcreposix.h, [
883       AC_EGREP_HEADER(pcreposix_regerror, pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes])
884    ], [
885       AC_CHECK_HEADER(pcre/pcreposix.h, [
886          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)])
887       ], [have_pcreposix=no])
888    ])
889 ], [have_pcreposix=no], -lpcre)
890
891 dnl ================================================================
892 dnl libpcrs is temporarily disabled.
893 dnl
894 dnl Privoxy's own pcrs version fixes some problems that
895 dnl are present in libpcrs 0.3, the last pcrs release we
896 dnl know of, and as libpcrs seems to be currently unmaintained
897 dnl we can't send these fixes upstream.
898 dnl ================================================================
899 dnl
900 dnl AC_CHECK_LIB(pcrs, pcrs_compile, [AC_CHECK_HEADER(pcrs.h, [have_pcrs=yes], [have_pcrs=no])], [have_pcrs=no], -lpcre)
901
902 dnl =================================================================
903 dnl Always defined
904 dnl =================================================================
905
906 AC_DEFINE(__MT__)
907
908 dnl =================================================================
909 dnl Features
910 dnl =================================================================
911
912 AC_ARG_ENABLE(toggle,
913 [  --disable-toggle                Don't support temporary disable],
914 [if test $enableval = yes; then
915   AC_DEFINE(FEATURE_TOGGLE)
916 fi],AC_DEFINE(FEATURE_TOGGLE))
917
918 AC_ARG_ENABLE(force,
919 [  --disable-force                 Don't allow single-page disable],
920 [if test $enableval = yes; then
921   AC_DEFINE(FEATURE_FORCE_LOAD)
922 fi],AC_DEFINE(FEATURE_FORCE_LOAD))
923
924 AC_ARG_ENABLE(fast-redirects,
925 [  --disable-fast-redirects        Don't support fast redirects],
926 [if test $enableval = yes; then
927   AC_DEFINE(FEATURE_FAST_REDIRECTS)
928 fi], AC_DEFINE(FEATURE_FAST_REDIRECTS))
929
930 AC_ARG_ENABLE(stats,
931 [  --disable-stats                 Don't keep statistics],
932 [if test $enableval = yes; then
933   AC_DEFINE(FEATURE_STATISTICS)
934 fi],AC_DEFINE(FEATURE_STATISTICS))
935
936 AC_ARG_ENABLE(extended-statistics,
937 [  --enable-extended-statistics    Gather extended statistics.],
938 [if test $enableval = yes; then
939   AC_DEFINE(FEATURE_EXTENDED_STATISTICS)
940 fi])
941
942 AC_ARG_ENABLE(image-blocking,
943 [  --disable-image-blocking        Don't try to figure out whether a request is
944                                   for an image or HTML - assume HTML.],
945 [if test $enableval = yes; then
946   AC_DEFINE(FEATURE_IMAGE_BLOCKING)
947 fi],
948 AC_DEFINE(FEATURE_IMAGE_BLOCKING))
949
950 AC_ARG_ENABLE(acl-support,
951 [  --disable-acl-support           Prevents the use of ACLs to control access to
952                                   Privoxy by IP address.],
953 [if test $enableval = yes; then
954   AC_DEFINE(FEATURE_ACL)
955 fi],
956 AC_DEFINE(FEATURE_ACL))
957
958 AC_ARG_ENABLE(trust-files,
959 [  --disable-trust-files           Prevents the use of trust files.],
960 [if test $enableval = yes; then
961   AC_DEFINE(FEATURE_TRUST)
962 fi],
963 AC_DEFINE(FEATURE_TRUST))
964
965 AC_ARG_ENABLE(editor,
966 [  --disable-editor                Prevents the use of the web-based actions file
967                                   editor and web-based temporary disable setting.],
968 [if test $enableval = yes; then
969   AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS)
970 fi],
971 AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS))
972
973 AC_ARG_ENABLE(no-gifs,
974 [  --enable-no-gifs                Use politically correct PNG format instead of GIF
975                                   for built-in images. May not work with all browsers.],
976 [if test $enableval = yes; then
977   AC_DEFINE(FEATURE_NO_GIFS)
978 fi])
979
980 AC_ARG_ENABLE(graceful-termination,
981 [  --enable-graceful-termination   Allow to shutdown Privoxy through the webinterface.],
982 [if test $enableval = yes; then
983   AC_DEFINE(FEATURE_GRACEFUL_TERMINATION)
984 fi])
985
986 AC_ARG_ENABLE(pcre-host-patterns,
987 [  --enable-pcre-host-patterns     Allow to use PCRE syntax in host patterns by prefixing the pattern with
988                                   "PCRE-HOST-PATTERN:". You can use tools/url-pattern-translator.pl to
989                                   convert existing action files to use PCRE host patterns.],
990 [if test $enableval = yes; then
991   AC_DEFINE(FEATURE_PCRE_HOST_PATTERNS)
992 fi])
993
994 AC_ARG_ENABLE(pcre-jit-compilation,
995 [  --disable-pcre-jit-compilation     Don't let pcrs use pcre JIT compilation even if pcre supports it.],
996 [if test $enableval != yes; then
997   AC_DEFINE(DISABLE_PCRE_JIT_COMPILATION)
998 fi])
999
1000 AC_ARG_ENABLE(external-filters,
1001 [  --enable-external-filters       Allow to filter content with scripts and programs. Experimental.],
1002 [if test $enableval = yes; then
1003   AC_DEFINE(FEATURE_EXTERNAL_FILTERS,1,[Define to 1 to allow to filter content with scripts and programs.])
1004 fi])
1005
1006 AC_ARG_ENABLE(accept-filter,
1007 [  --enable-accept-filter          Try to use accf_http(9) if supported.],
1008 [if test $enableval = yes; then
1009   AC_DEFINE(FEATURE_ACCEPT_FILTER)
1010 fi])
1011
1012 AC_ARG_ENABLE(strptime-sanity-checks,
1013 [  --enable-strptime-sanity-checks Only trust strptime() results if an additional strftime()/strptime()
1014                                   conversion doesn't change the result. Can be useful if strptime() is
1015                                   known or suspected to be broken.],
1016 [if test $enableval = yes; then
1017   AC_DEFINE(FEATURE_STRPTIME_SANITY_CHECKS)
1018 fi])
1019
1020 AC_ARG_ENABLE(client-tags,
1021 [  --disable-client-tags           Disable support for client-specific tags],
1022 [ if test $enableval = "no"; then have_client_tags=no; fi ])
1023 if test "${have_client_tags}" = "no"; then
1024   echo "Disabling support for client-specific tags."
1025   FEATURE_CLIENT_TAGS_ONLY="#"
1026 else
1027   echo "Enabling support for client-specific tags."
1028   AC_DEFINE(FEATURE_CLIENT_TAGS,1,[Define to enable support for client-specific tags.])
1029   FEATURE_CLIENT_TAGS_ONLY=""
1030 fi
1031 AC_SUBST(FEATURE_CLIENT_TAGS_ONLY)
1032
1033 FUZZ_ONLY="#"
1034 AC_ARG_ENABLE(fuzz,
1035 [  --enable-fuzz                   Enable code that makes fuzzing more convenient],
1036 [if test $enableval = yes; then
1037   FUZZ_ONLY=""
1038   AC_DEFINE(FUZZ,1,[Define to make fuzzing more convenient.])
1039 fi])
1040 AC_SUBST(FUZZ_ONLY)
1041
1042 dnl pcre/pcrs is needed for CGI anyway, so
1043 dnl the choice is only between static and
1044 dnl dynamic:
1045
1046 AC_ARG_ENABLE(dynamic-pcre,
1047 [  --disable-dynamic-pcre          Use the built-in, static pcre, even if libpcre is available],
1048 [ if test $enableval = "no"; then have_pcre=no; fi ])
1049
1050 dnl =================================================
1051 dnl libpcrs is temporarily disabled,
1052 dnl see comment above for the reason.
1053 dnl =================================================
1054 dnl AC_ARG_ENABLE(dynamic-pcrs,
1055 dnl [  --disable-dynamic-pcrs          Use the built-in, static pcrs, even if libpcrs is available],
1056 dnl [ if test $enableval = "no"; then have_pcrs=no; fi ])
1057
1058
1059 dnl ====================================================
1060 dnl This check is incomplete. For mingw32 zlib is found
1061 dnl by configure, but not necessarily by the compiler.
1062 dnl ====================================================
1063 AC_ARG_ENABLE(zlib,
1064 [  --disable-zlib                  Don't use zlib to decompress data before filtering.],
1065 [enableval2=$enableval],
1066 [enableval2=yes])
1067 if test $enableval2 = yes; then
1068   AC_CHECK_LIB(z, zlibVersion, [have_zlib="yes"], [have_zlib="no"])
1069   if test $have_zlib = "yes"; then
1070     LIBS="$LIBS -lz"
1071     AC_DEFINE(FEATURE_ZLIB,1,[Define to 1 to use zlib to decompress data before filtering.])
1072   else
1073    AC_MSG_WARN([No zlib found.
1074    Privoxy will not be able to filter compressed content.
1075    This may become a fatal error in the future.])
1076   fi
1077 fi
1078
1079 AC_ARG_ENABLE(compression,
1080 [  --enable-compression            Allow Privoxy to compress buffered content if the client supports it. Requires zlib support.],
1081 [enableval2=$enableval],
1082 [enableval2=no])
1083 if test $enableval2 = yes; then
1084   if test $have_zlib = "yes"; then
1085     echo Enabling compression support.
1086     AC_DEFINE(FEATURE_COMPRESSION,1,[Define to 1 to use compression through the zlib library.])
1087   else
1088    AC_MSG_WARN([No zlib found. Privoxy will not be able to (re-)compressed buffered content.])
1089   fi
1090 fi
1091
1092
1093 # If we have libpcre and either we also have pcreposix or
1094 # we don't need pcreposix, then link pcre dynamically; else
1095 # build it and link statically
1096 #
1097 if test $have_pcre = "yes"; then
1098   echo "using libpcre"
1099   STATIC_PCRE_ONLY=#
1100   LIBS="$LIBS -lpcre -lpcreposix"
1101   if test "$use_static_pcre" = "yes"; then
1102     pcre_dyn=no
1103     AC_DEFINE(PCRE_STATIC,1,[Define to statically link to pcre library on Windows.])
1104 #     see /usr/i686-w64-mingw32/sys-root/mingw/include/pcre.h line 54
1105 #       #if defined(_WIN32) && !defined(PCRE_STATIC)
1106 #       #  ifndef PCRE_EXP_DECL
1107 #       #    define PCRE_EXP_DECL  extern __declspec(dllimport)
1108 #       #  endif
1109 #     If you want to statically link a program against a PCRE library in the form of
1110 #     a non-dll .a file, you must define PCRE_STATIC before including pcre.h or
1111 #     pcrecpp.h, otherwise the pcre_malloc() and pcre_free() exported functions will
1112 #     be declared __declspec(dllimport), with unwanted results.
1113   else
1114     pcre_dyn=yes
1115     AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.])
1116   fi
1117 else
1118   AC_MSG_ERROR(pcre library not detected.)
1119 fi
1120
1121 AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE)
1122
1123 if test $have_pthread = "yes" -o $target_type = "mingw"; then
1124   echo Enabling connection-sharing support.
1125   AC_DEFINE(FEATURE_CONNECTION_SHARING)
1126 fi
1127
1128 dnl =================================================
1129 dnl libpcrs is temporarily disabled,
1130 dnl see comment above for the reason.
1131 dnl =================================================
1132 dnl # If we have libpcrs and pcre is linked dynamically
1133 dnl # then also link pcrs dynamically, else build and link
1134 dnl # pcrs statically
1135 dnl
1136 dnl if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
1137 dnl  echo "using libpcrs"
1138 dnl  STATIC_PCRS_ONLY=#
1139 dnl  LIBS="$LIBS -lpcrs"
1140 dnl else
1141 dnl  echo "using built-in static pcrs"
1142   AC_DEFINE(STATIC_PCRS)
1143   STATIC_PCRS_ONLY=
1144 dnl fi
1145
1146 AC_SUBST(STATIC_PCRE_ONLY)
1147 AC_SUBST(STATIC_PCRS_ONLY)
1148
1149 FEATURE_HTTPS_INSPECTION_ONLY=#
1150 dnl ========================================================
1151 dnl check for mbedTLS which can be used for https inspection
1152 dnl ========================================================
1153 FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=#
1154 OPT_MBEDTLS=no
1155 AC_ARG_WITH(mbedtls,dnl
1156 AC_HELP_STRING([--with-mbedtls], [Enable mbedTLS detection for https inspection.])
1157 AC_HELP_STRING([--without-mbedtls], [Disable mbedTLS detection]),
1158   OPT_MBEDTLS=$withval)
1159
1160 if test X"$OPT_MBEDTLS" != Xno; then
1161
1162   AC_CHECK_LIB(mbedtls, mbedtls_ssl_init,
1163    [
1164      AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1165      AC_DEFINE(FEATURE_HTTPS_INSPECTION_MBEDTLS, 1, [if mbedTLS is enabled])
1166      AC_SUBST(FEATURE_HTTPS_INSPECTION_MBEDTLS, [1])
1167      FEATURE_HTTPS_INSPECTION_MBEDTLS="yes"
1168    ], [], -lmbedx509 -lmbedcrypto)
1169
1170   if test "x$FEATURE_HTTPS_INSPECTION_MBEDTLS" = "xyes"; then
1171     AC_MSG_NOTICE([Detected mbedTLS. Enabling https inspection.])
1172
1173     LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
1174     old_CFLAGS_nospecial="-Imbedtls/include $old_CFLAGS_nospecial"
1175
1176     FEATURE_HTTPS_INSPECTION_ONLY=
1177     FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=
1178   fi
1179 fi
1180 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS)
1181
1182 dnl =================================================================
1183 dnl check for OpenSSL/LibreSSL which can be used for https inspection
1184 dnl =================================================================
1185 FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=#
1186 OPT_OPENSSL=no
1187 AC_ARG_WITH(openssl,dnl
1188 AC_HELP_STRING([--with-openssl], [Enable OpenSSL/LibreSSL detection for https inspection.])
1189 AC_HELP_STRING([--without-openssl], [Disable OpenSSL/LibreSSL detection]),
1190   OPT_OPENSSL=$withval)
1191
1192 if test X"$OPT_OPENSSL" != Xno; then
1193    if test X"$OPT_MBEDTLS" != Xno; then
1194       AC_MSG_ERROR([OpenSSL and mbedTLS support can't be enabled at the same time])
1195    fi
1196
1197   if test "$PORTNAME" != "win32"; then
1198      AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])])
1199      FOUND_SSL_LIB="no"
1200      AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [FOUND_SSL_LIB="yes"])
1201      AC_CHECK_LIB(ssl, SSL_library_init, [FOUND_SSL_LIB="yes"])
1202      AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
1203   else
1204      AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])])
1205      FOUND_SSL_LIB="no"
1206      AC_SEARCH_LIBS(OPENSSL_init_ssl, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
1207      AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
1208      AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])])
1209   fi
1210
1211   if test "x$FOUND_SSL_LIB" = xyes; then
1212      AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1213      AC_DEFINE(FEATURE_HTTPS_INSPECTION_OPENSSL, 1, [if OpenSSL is enabled])
1214      AC_SUBST(FEATURE_HTTPS_INSPECTION_OPENSSL, [1])
1215      FEATURE_HTTPS_INSPECTION="yes"
1216      FEATURE_HTTPS_INSPECTION_OPENSSL="yes"
1217   fi
1218
1219   if test "x$FEATURE_HTTPS_INSPECTION_OPENSSL" = "xyes"; then
1220     AC_MSG_NOTICE([Detected OpenSSL. Enabling https inspection.])
1221     AC_MSG_WARN([If you intend to redistribute Privoxy, please make sure the "special exception" from section 3 of the GPLv2 applies.])
1222
1223     LIBS="$LIBS -lssl -lcrypto"
1224     old_CFLAGS_nospecial="$old_CFLAGS_nospecial"
1225
1226     FEATURE_HTTPS_INSPECTION_ONLY=
1227     FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=
1228   fi
1229 fi
1230 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL)
1231
1232 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY)
1233
1234 dnl ========================================================
1235 dnl Check for Brotli which can be used for decompression
1236 dnl ========================================================
1237 WITH_BROTLI=no
1238 AC_ARG_WITH(brotli,
1239 AC_HELP_STRING([--with-brotli], [Enable Brotli detection])
1240 AC_HELP_STRING([--without-brotli], [Disable Brotli detection]),
1241   WITH_BROTLI=$withval)
1242
1243 if test X"$WITH_BROTLI" != Xno; then
1244
1245   LIBS="$LIBS -lbrotlidec"
1246   if test $target_type = mingw; then
1247     # XXX: why does just the mingw build need this???
1248     LIBS="$LIBS -lbrotlicommon -lbrotlienc"
1249   fi
1250
1251   AC_CHECK_LIB(brotlidec, BrotliDecoderDecompress)
1252
1253   AC_CHECK_HEADERS(brotli/decode.h,
1254     FEATURE_BROTLI=1
1255     AC_DEFINE(FEATURE_BROTLI, 1, [If Brotli is used for decompression])
1256     AC_SUBST(FEATURE_BROTLI, [1])
1257   )
1258 fi
1259
1260
1261 dnl =================================================================
1262 dnl Final cleanup and output
1263 dnl =================================================================
1264
1265 dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it separately
1266 dnl in the Makefile
1267 CFLAGS=$old_CFLAGS_nospecial
1268 AC_SUBST(SPECIAL_CFLAGS)
1269
1270 AC_SUBST(PTHREAD_LIB)
1271
1272 AC_OUTPUT(GNUmakefile doc/source/ldp.dsl)