configure: Add another warning in case --disable-pthread is used
[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      AC_MSG_WARN([Also various Privoxy features only work when using threads and won't even compile without them.])
466   fi
467   have_pthread=no
468 fi])
469
470 if test $have_pthread = yes; then
471   PTHREAD_ONLY=
472   AC_DEFINE(FEATURE_PTHREAD)
473   echo Using POSIX threads
474   if test "$GCC" = "yes"; then
475     # Set a GCC specific switch:
476     if test "$target_type" = "unix"; then
477       ac_jgf_save_CFLAGS=$CFLAGS
478       CFLAGS="$CFLAGS -pthread"
479       AC_TRY_LINK([#include <pthread.h>],
480         [void *p = pthread_create;],
481         [
482           # This compiler switch makes GCC on Linux thread-safe
483           # However, it's not supported on most other OS.
484           PTHREAD_LIB=
485           SPECIAL_CFLAGS="-pthread"
486         ])
487       CFLAGS=$ac_jgf_save_CFLAGS
488     fi
489   fi
490 else
491   PTHREAD_ONLY=#
492   echo Using native threads
493 fi
494
495 AC_SUBST(PTHREAD_ONLY)
496
497 dnl =================================================================
498 dnl On most platforms select() does not support fd numbers above
499 dnl FD_SETSIZE, as a result Privoxy can't handle more than
500 dnl approximately FD_SETSIZE/2 client connections.
501 dnl On some platforms the value can be changed at compile time,
502 dnl on others it's hardcoded and requires recompilation of the OS.
503 dnl Only relevant if select() is actually being used.
504 dnl =================================================================
505 AC_ARG_WITH(fdsetsize,
506  [  --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().],
507  [
508    if test "x$withval" != "xyes"; then
509      AC_DEFINE_UNQUOTED(FD_SETSIZE,$with_fdsetsize,[Relevant for select(). Not honoured by all OS.])
510      echo "Redefining FD_SETSIZE to $with_fdsetsize."
511      AC_MSG_WARN(On platforms that don't support FD_SETSIZE redefinition it may cause memory corruption.)
512    else
513      AC_MSG_ERROR(--with-fdsetsize used without value)
514    fi
515    ]
516 )
517
518 dnl =================================================================
519 dnl Support for thread-safe versions of gethostbyaddr, gethostbyname,
520 dnl gmtime and localtime
521 dnl =================================================================
522
523 dnl Next line needed to find the gethost*_r functions on Solaris
524 AC_CHECK_LIB(nsl, gethostbyname)
525
526 AC_CHECK_FUNC(gethostbyaddr_r, [
527   AC_MSG_CHECKING([signature of gethostbyaddr_r])
528   AC_TRY_COMPILE([
529 #   include <netdb.h>
530   ], [
531     struct hostent *h, *hp;
532     char *a, *b;
533     int l, bl, t, e;
534     (void) gethostbyaddr_r(a, l, t, h, b, bl, &hp, &e)
535   ], [
536     AC_DEFINE(HAVE_GETHOSTBYADDR_R_8_ARGS)
537     AC_MSG_RESULT([8 args])
538   ], [
539     AC_TRY_COMPILE([
540 #     include <netdb.h>
541     ], [
542       struct hostent *h;
543       char *a, *b;
544       int l, bl, t, e;
545       (void) gethostbyaddr_r(a, l, t, h, b, bl, &e)
546     ], [
547       AC_DEFINE(HAVE_GETHOSTBYADDR_R_7_ARGS)
548       AC_MSG_RESULT([7 args])
549     ], [
550       AC_TRY_COMPILE([
551 #       include <netdb.h>
552       ], [
553         struct hostent_data *d;
554         struct hostent *h;
555         char a,
556         int l, t;
557         (void) gethostbyaddr_r(a, l, t, h, d)
558       ], [
559         AC_DEFINE(HAVE_GETHOSTBYADDR_R_5_ARGS)
560         AC_MSG_RESULT([5 args])
561       ], [
562         AC_MSG_RESULT(unrecognised)
563       ])
564     ])
565   ])
566 ], [
567   AC_MSG_RESULT(no)
568 ])
569
570 AC_CHECK_FUNC(gethostbyname_r, [
571   AC_MSG_CHECKING([signature of gethostbyname_r])
572   AC_TRY_COMPILE([
573 #   include <netdb.h>
574   ], [
575     struct hostent *h, *r;
576     char *n, *b;
577     int bl, e;
578     (void) gethostbyname_r(n, h, b, bl, &r, &e)
579   ], [
580     AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARGS)
581     AC_MSG_RESULT([6 args])
582   ], [
583     AC_TRY_COMPILE([
584 #     include <netdb.h>
585     ], [
586       struct hostent *h;
587       char *n, *b;
588       int bl, e;
589       (void) gethostbyname_r(n, h, b, bl, &e)
590     ], [
591       AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARGS)
592       AC_MSG_RESULT([5 args])
593     ], [
594       AC_TRY_COMPILE([
595 #       include <netdb.h>
596       ], [
597         struct hostent_data *d;
598         struct hostent *h;
599         char *n,
600         (void) gethostbyname_r(n, h, d)
601       ], [
602         AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARGS)
603         AC_MSG_RESULT([3 args])
604       ], [
605         AC_MSG_RESULT(unrecognised)
606       ])
607     ])
608   ])
609 ], [
610   AC_MSG_RESULT(no)
611 ])
612
613 AC_CHECK_FUNC(gmtime_r, [
614   AC_MSG_CHECKING([signature of gmtime_r])
615   AC_TRY_COMPILE([
616 #   include <time.h>
617   ], [
618     struct time *t;
619     struct tm *tm;
620     (void) gmtime_r(t, tm)
621   ], [
622     AC_MSG_RESULT(ok)
623     AC_DEFINE(HAVE_GMTIME_R)
624   ], [
625     AC_MSG_RESULT(unrecognised)
626   ])
627 ], [
628   AC_MSG_RESULT(no)
629 ])
630
631 AC_CHECK_FUNC(localtime_r, [
632   AC_MSG_CHECKING([signature of localtime_r])
633   AC_TRY_COMPILE([
634 #   include <time.h>
635   ], [
636     struct time *t;
637     struct tm *tm;
638     (void) localtime_r(t, tm)
639   ], [
640     AC_MSG_RESULT(ok)
641     AC_DEFINE(HAVE_LOCALTIME_R)
642   ], [
643     AC_MSG_RESULT(unrecognised)
644   ])
645 ], [
646   AC_MSG_RESULT(no)
647 ])
648
649 dnl =================================================================
650 dnl Solaris specific
651 dnl FIXME: Not tested on Solaris yet...
652 dnl ISFIXED: Have tested it on Solaris, but there are other ways to
653 dnl     make these checks generic, e.g.:
654 dnl AC_CHECK_FUNC(getsockopt, , AC_CHECK_LIB(socket, getsockopt))
655 dnl     (Moritz Barsnick <moritz@barsnick.net>)
656 dnl =================================================================
657
658
659 SOCKET_LIB=
660
661 case "$host" in
662 *-solaris*) SOCKET_LIB="-lsocket -lnsl"
663             AC_DEFINE(__EXTENSIONS__)
664             if test "$GCC" = "yes"; then
665               # Set a GCC specific switch:
666               # This compiler switch makes Solaris thread-safe
667               PTHREAD_LIB=
668               SPECIAL_CFLAGS="-pthreads"
669             else
670               # What do we do without GCC? Guess this:
671               SPECIAL_CFLAGS="-D_REENTRANT"
672             fi
673 ;;
674 esac
675
676 AC_SUBST(SOCKET_LIB)
677
678 dnl =================================================================
679 dnl Solaris problem, and others perhaps (socklen_t is undefined)
680 dnl =================================================================
681
682 if test $target_type != mingw; then
683 # i686-w64-mingw32-gcc gets socklen_t define from ws2tcpip.h
684
685 AC_MSG_CHECKING([for socklen_t])
686 AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]),
687         AC_MSG_RESULT([no])
688         AC_DEFINE(socklen_t,int,
689                 [ Define to 'int' if <sys/socket.h> doesn't have it. ]))
690
691 fi
692
693 dnl =================================================================
694 dnl Mac OSX specific
695 dnl =================================================================
696
697 case "$host" in
698 *-apple-darwin*) SPECIAL_CFLAGS="-Dunix"
699 ;;
700 esac
701
702 dnl =================================================================
703 dnl OpenBSD specific
704 dnl =================================================================
705
706 case "$host" in
707 *-openbsd*) SPECIAL_CFLAGS="$SPECIAL_CFLAGS -Dunix"
708 ;;
709 esac
710
711 dnl =================================================================
712 dnl Haiku specific
713 dnl =================================================================
714
715 if test "$host_os" = haiku; then
716   # Omit the "-pthread" flag to gcc, even when building with gcc 2.95
717   SPECIAL_CFLAGS=
718
719   # Haiku's pthreads implementation exists in its system library,
720   # libroot, not in a separate pthreads library
721   PTHREAD_LIB=
722
723   # Networking code exists in libnetwork
724   SOCKET_LIB=-lnetwork
725
726   # Search Haiku's common-library folder to find its pcre and
727   # pcreposix libraries
728   LIBS="-L/boot/common/lib $LIBS"
729 fi
730
731 dnl =================================================================
732 dnl Check for standard compiler stuff
733 dnl =================================================================
734
735 AC_EXEEXT
736 AC_OBJEXT
737 AC_HEADER_STDC
738 AC_HEADER_DIRENT
739 AC_C_CONST
740 AC_TYPE_SIZE_T
741 AC_TYPE_PID_T
742 AC_HEADER_TIME
743 AC_STRUCT_TM
744 AC_CHECK_SIZEOF(int, 4)
745 AC_CHECK_SIZEOF(char *, 4)
746 AC_CHECK_SIZEOF(long, 4)
747 AC_CHECK_SIZEOF(long long, 8)
748 AC_CHECK_SIZEOF(size_t, 4)
749 AC_CHECK_SIZEOF(time_t, 8)
750
751 dnl Checks for header files.
752 AC_CHECK_HEADERS([ \
753  OS.h \
754  arpa/inet.h \
755  errno.h \
756  fcntl.h \
757  limits.h \
758  locale.h \
759  netdb.h \
760  netinet/in.h \
761  stddef.h \
762  stdlib.h \
763  string.h \
764  sys/ioctl.h \
765  sys/socket.h \
766  sys/time.h \
767  sys/timeb.h \
768  sys/wait.h \
769  unistd.h \
770 ])
771
772 dnl Checks for library functions.
773 AC_PROG_GCC_TRADITIONAL
774 AC_TYPE_SIGNAL
775 AC_CHECK_FUNCS([ \
776  access \
777  arc4random \
778  atexit \
779  calloc \
780  getcwd \
781  gethostbyaddr \
782  gethostbyaddr_r \
783  gethostbyname \
784  gethostbyname_r \
785  gettimeofday \
786  inet_ntoa \
787  memchr \
788  memmove \
789  memset \
790  nanosleep \
791  poll \
792  putenv \
793  random \
794  regcomp \
795  select \
796  setlocale \
797  shutdown \
798  snprintf \
799  socket \
800  strchr \
801  strdup \
802  strerror \
803  strftime \
804  strlcat \
805  strlcpy \
806  strptime \
807  strtoul \
808  timegm \
809  tzset \
810 ])
811
812 dnl Checks for RFC 2553 resolver and socket functions
813 AC_ARG_ENABLE(ipv6-support,
814 [  --disable-ipv6-support          Disable IPv6 support and other RFC-2554-related improvements],
815 [if test $enableval = yes; then
816   enable_ipv6_support=yes
817 fi], enable_ipv6_support=yes)
818
819 if test $enable_ipv6_support != yes; then
820   AC_MSG_WARN([Skipping checks for IPv6 support and other RFC-2554-related improvements.
821     Due to lock contention, this may result in slower DNS resolution for IPv4 setups, too.])
822 elif test $target_type = mingw; then
823   AC_CHECK_LIB(ws2_32, main)
824
825   AC_MSG_CHECKING(getaddrinfo in ws2_32)
826   AC_TRY_LINK(
827     [
828       #include<winsock2.h>
829       #include<windows.h>
830       #include<ws2tcpip.h>
831     ],
832     [getaddrinfo(0,0,0,0)],
833     have_ws2_32_getaddrinfo=yes
834   )
835   AC_MSG_RESULT($have_ws2_32_getaddrinfo)
836
837   AC_MSG_CHECKING(getnameinfo in ws2_32)
838   AC_TRY_LINK(
839     [
840       #include<winsock2.h>
841       #include<windows.h>
842       #include<ws2tcpip.h>
843     ],
844     [getnameinfo(0,0,0,0,0,0,0)],
845     have_ws2_32_getnameinfo=yes
846   )
847   AC_MSG_RESULT($have_ws2_32_getnameinfo)
848
849   if test $have_ws2_32_getaddrinfo ; then
850     if test $have_ws2_32_getnameinfo ; then
851       AC_DEFINE([HAVE_RFC2553], [1],
852         [Define if RFC 2553 resolver functions like getaddrinfo(3) and
853          getnameinfo(3) present])
854     fi
855   fi
856 else
857   AC_CHECK_FUNC([getaddrinfo],
858      [AC_CHECK_FUNC([getnameinfo],
859         [AC_DEFINE([HAVE_RFC2553], [1],
860            [Define if RFC 2553 resolver functions like getaddrinfo(3) and
861             getnameinfo(3) present])
862         ])
863   ])
864 fi
865
866 dnl =================================================================
867 dnl Checks for libraries.
868 dnl =================================================================
869 dnl Note: Some systems may have the library but not the system header
870 dnl       file, so we must check for both.
871 dnl       Also check for correct version
872 AC_CHECK_LIB(pcre, pcre_compile, [
873    AC_CHECK_HEADER(pcre.h, [
874       AC_EGREP_HEADER(pcre_fullinfo, pcre.h, [have_pcre=yes], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no])
875    ], [
876       AC_CHECK_HEADER(pcre/pcre.h, [
877          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])
878       ], [have_pcre=no])
879    ])
880 ], [have_pcre=no])
881
882 AC_CHECK_LIB(pcreposix, regcomp, [
883    AC_CHECK_HEADER(pcreposix.h, [
884       AC_EGREP_HEADER(pcreposix_regerror, pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes])
885    ], [
886       AC_CHECK_HEADER(pcre/pcreposix.h, [
887          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)])
888       ], [have_pcreposix=no])
889    ])
890 ], [have_pcreposix=no], -lpcre)
891
892 dnl ================================================================
893 dnl libpcrs is temporarily disabled.
894 dnl
895 dnl Privoxy's own pcrs version fixes some problems that
896 dnl are present in libpcrs 0.3, the last pcrs release we
897 dnl know of, and as libpcrs seems to be currently unmaintained
898 dnl we can't send these fixes upstream.
899 dnl ================================================================
900 dnl
901 dnl AC_CHECK_LIB(pcrs, pcrs_compile, [AC_CHECK_HEADER(pcrs.h, [have_pcrs=yes], [have_pcrs=no])], [have_pcrs=no], -lpcre)
902
903 dnl =================================================================
904 dnl Always defined
905 dnl =================================================================
906
907 AC_DEFINE(__MT__)
908
909 dnl =================================================================
910 dnl Features
911 dnl =================================================================
912
913 AC_ARG_ENABLE(toggle,
914 [  --disable-toggle                Don't support temporary disable],
915 [if test $enableval = yes; then
916   AC_DEFINE(FEATURE_TOGGLE)
917 fi],AC_DEFINE(FEATURE_TOGGLE))
918
919 AC_ARG_ENABLE(force,
920 [  --disable-force                 Don't allow single-page disable],
921 [if test $enableval = yes; then
922   AC_DEFINE(FEATURE_FORCE_LOAD)
923 fi],AC_DEFINE(FEATURE_FORCE_LOAD))
924
925 AC_ARG_ENABLE(fast-redirects,
926 [  --disable-fast-redirects        Don't support fast redirects],
927 [if test $enableval = yes; then
928   AC_DEFINE(FEATURE_FAST_REDIRECTS)
929 fi], AC_DEFINE(FEATURE_FAST_REDIRECTS))
930
931 AC_ARG_ENABLE(stats,
932 [  --disable-stats                 Don't keep statistics],
933 [if test $enableval = yes; then
934   AC_DEFINE(FEATURE_STATISTICS)
935 fi],AC_DEFINE(FEATURE_STATISTICS))
936
937 AC_ARG_ENABLE(extended-statistics,
938 [  --enable-extended-statistics    Gather extended statistics.],
939 [if test $enableval = yes; then
940   AC_DEFINE(FEATURE_EXTENDED_STATISTICS)
941 fi])
942
943 AC_ARG_ENABLE(image-blocking,
944 [  --disable-image-blocking        Don't try to figure out whether a request is
945                                   for an image or HTML - assume HTML.],
946 [if test $enableval = yes; then
947   AC_DEFINE(FEATURE_IMAGE_BLOCKING)
948 fi],
949 AC_DEFINE(FEATURE_IMAGE_BLOCKING))
950
951 AC_ARG_ENABLE(acl-support,
952 [  --disable-acl-support           Prevents the use of ACLs to control access to
953                                   Privoxy by IP address.],
954 [if test $enableval = yes; then
955   AC_DEFINE(FEATURE_ACL)
956 fi],
957 AC_DEFINE(FEATURE_ACL))
958
959 AC_ARG_ENABLE(trust-files,
960 [  --disable-trust-files           Prevents the use of trust files.],
961 [if test $enableval = yes; then
962   AC_DEFINE(FEATURE_TRUST)
963 fi],
964 AC_DEFINE(FEATURE_TRUST))
965
966 AC_ARG_ENABLE(editor,
967 [  --disable-editor                Prevents the use of the web-based actions file
968                                   editor and web-based temporary disable setting.],
969 [if test $enableval = yes; then
970   AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS)
971 fi],
972 AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS))
973
974 AC_ARG_ENABLE(no-gifs,
975 [  --enable-no-gifs                Use politically correct PNG format instead of GIF
976                                   for built-in images. May not work with all browsers.],
977 [if test $enableval = yes; then
978   AC_DEFINE(FEATURE_NO_GIFS)
979 fi])
980
981 AC_ARG_ENABLE(graceful-termination,
982 [  --enable-graceful-termination   Allow to shutdown Privoxy through the webinterface.],
983 [if test $enableval = yes; then
984   AC_DEFINE(FEATURE_GRACEFUL_TERMINATION)
985 fi])
986
987 AC_ARG_ENABLE(pcre-host-patterns,
988 [  --enable-pcre-host-patterns     Allow to use PCRE syntax in host patterns by prefixing the pattern with
989                                   "PCRE-HOST-PATTERN:". You can use tools/url-pattern-translator.pl to
990                                   convert existing action files to use PCRE host patterns.],
991 [if test $enableval = yes; then
992   AC_DEFINE(FEATURE_PCRE_HOST_PATTERNS)
993 fi])
994
995 AC_ARG_ENABLE(pcre-jit-compilation,
996 [  --disable-pcre-jit-compilation     Don't let pcrs use pcre JIT compilation even if pcre supports it.],
997 [if test $enableval != yes; then
998   AC_DEFINE(DISABLE_PCRE_JIT_COMPILATION)
999 fi])
1000
1001 AC_ARG_ENABLE(external-filters,
1002 [  --enable-external-filters       Allow to filter content with scripts and programs. Experimental.],
1003 [if test $enableval = yes; then
1004   AC_DEFINE(FEATURE_EXTERNAL_FILTERS,1,[Define to 1 to allow to filter content with scripts and programs.])
1005 fi])
1006
1007 AC_ARG_ENABLE(accept-filter,
1008 [  --enable-accept-filter          Try to use accf_http(9) if supported.],
1009 [if test $enableval = yes; then
1010   AC_DEFINE(FEATURE_ACCEPT_FILTER)
1011 fi])
1012
1013 AC_ARG_ENABLE(strptime-sanity-checks,
1014 [  --enable-strptime-sanity-checks Only trust strptime() results if an additional strftime()/strptime()
1015                                   conversion doesn't change the result. Can be useful if strptime() is
1016                                   known or suspected to be broken.],
1017 [if test $enableval = yes; then
1018   AC_DEFINE(FEATURE_STRPTIME_SANITY_CHECKS)
1019 fi])
1020
1021 AC_ARG_ENABLE(client-tags,
1022 [  --disable-client-tags           Disable support for client-specific tags],
1023 [ if test $enableval = "no"; then have_client_tags=no; fi ])
1024 if test "${have_client_tags}" = "no"; then
1025   echo "Disabling support for client-specific tags."
1026   FEATURE_CLIENT_TAGS_ONLY="#"
1027 else
1028   echo "Enabling support for client-specific tags."
1029   AC_DEFINE(FEATURE_CLIENT_TAGS,1,[Define to enable support for client-specific tags.])
1030   FEATURE_CLIENT_TAGS_ONLY=""
1031 fi
1032 AC_SUBST(FEATURE_CLIENT_TAGS_ONLY)
1033
1034 FUZZ_ONLY="#"
1035 AC_ARG_ENABLE(fuzz,
1036 [  --enable-fuzz                   Enable code that makes fuzzing more convenient],
1037 [if test $enableval = yes; then
1038   FUZZ_ONLY=""
1039   AC_DEFINE(FUZZ,1,[Define to make fuzzing more convenient.])
1040 fi])
1041 AC_SUBST(FUZZ_ONLY)
1042
1043 dnl pcre/pcrs is needed for CGI anyway, so
1044 dnl the choice is only between static and
1045 dnl dynamic:
1046
1047 AC_ARG_ENABLE(dynamic-pcre,
1048 [  --disable-dynamic-pcre          Use the built-in, static pcre, even if libpcre is available],
1049 [ if test $enableval = "no"; then have_pcre=no; fi ])
1050
1051 dnl =================================================
1052 dnl libpcrs is temporarily disabled,
1053 dnl see comment above for the reason.
1054 dnl =================================================
1055 dnl AC_ARG_ENABLE(dynamic-pcrs,
1056 dnl [  --disable-dynamic-pcrs          Use the built-in, static pcrs, even if libpcrs is available],
1057 dnl [ if test $enableval = "no"; then have_pcrs=no; fi ])
1058
1059
1060 dnl ====================================================
1061 dnl This check is incomplete. For mingw32 zlib is found
1062 dnl by configure, but not necessarily by the compiler.
1063 dnl ====================================================
1064 AC_ARG_ENABLE(zlib,
1065 [  --disable-zlib                  Don't use zlib to decompress data before filtering.],
1066 [enableval2=$enableval],
1067 [enableval2=yes])
1068 if test $enableval2 = yes; then
1069   AC_CHECK_LIB(z, zlibVersion, [have_zlib="yes"], [have_zlib="no"])
1070   if test $have_zlib = "yes"; then
1071     LIBS="$LIBS -lz"
1072     AC_DEFINE(FEATURE_ZLIB,1,[Define to 1 to use zlib to decompress data before filtering.])
1073   else
1074    AC_MSG_WARN([No zlib found.
1075    Privoxy will not be able to filter compressed content.
1076    This may become a fatal error in the future.])
1077   fi
1078 fi
1079
1080 AC_ARG_ENABLE(compression,
1081 [  --enable-compression            Allow Privoxy to compress buffered content if the client supports it. Requires zlib support.],
1082 [enableval2=$enableval],
1083 [enableval2=no])
1084 if test $enableval2 = yes; then
1085   if test $have_zlib = "yes"; then
1086     echo Enabling compression support.
1087     AC_DEFINE(FEATURE_COMPRESSION,1,[Define to 1 to use compression through the zlib library.])
1088   else
1089    AC_MSG_WARN([No zlib found. Privoxy will not be able to (re-)compressed buffered content.])
1090   fi
1091 fi
1092
1093
1094 # If we have libpcre and either we also have pcreposix or
1095 # we don't need pcreposix, then link pcre dynamically; else
1096 # build it and link statically
1097 #
1098 if test $have_pcre = "yes"; then
1099   echo "using libpcre"
1100   STATIC_PCRE_ONLY=#
1101   LIBS="$LIBS -lpcre -lpcreposix"
1102   if test "$use_static_pcre" = "yes"; then
1103     pcre_dyn=no
1104     AC_DEFINE(PCRE_STATIC,1,[Define to statically link to pcre library on Windows.])
1105 #     see /usr/i686-w64-mingw32/sys-root/mingw/include/pcre.h line 54
1106 #       #if defined(_WIN32) && !defined(PCRE_STATIC)
1107 #       #  ifndef PCRE_EXP_DECL
1108 #       #    define PCRE_EXP_DECL  extern __declspec(dllimport)
1109 #       #  endif
1110 #     If you want to statically link a program against a PCRE library in the form of
1111 #     a non-dll .a file, you must define PCRE_STATIC before including pcre.h or
1112 #     pcrecpp.h, otherwise the pcre_malloc() and pcre_free() exported functions will
1113 #     be declared __declspec(dllimport), with unwanted results.
1114   else
1115     pcre_dyn=yes
1116     AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.])
1117   fi
1118 else
1119   AC_MSG_ERROR(pcre library not detected.)
1120 fi
1121
1122 AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE)
1123
1124 if test $have_pthread = "yes" -o $target_type = "mingw"; then
1125   echo Enabling connection-sharing support.
1126   AC_DEFINE(FEATURE_CONNECTION_SHARING)
1127 fi
1128
1129 dnl =================================================
1130 dnl libpcrs is temporarily disabled,
1131 dnl see comment above for the reason.
1132 dnl =================================================
1133 dnl # If we have libpcrs and pcre is linked dynamically
1134 dnl # then also link pcrs dynamically, else build and link
1135 dnl # pcrs statically
1136 dnl
1137 dnl if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
1138 dnl  echo "using libpcrs"
1139 dnl  STATIC_PCRS_ONLY=#
1140 dnl  LIBS="$LIBS -lpcrs"
1141 dnl else
1142 dnl  echo "using built-in static pcrs"
1143   AC_DEFINE(STATIC_PCRS)
1144   STATIC_PCRS_ONLY=
1145 dnl fi
1146
1147 AC_SUBST(STATIC_PCRE_ONLY)
1148 AC_SUBST(STATIC_PCRS_ONLY)
1149
1150 FEATURE_HTTPS_INSPECTION_ONLY=#
1151 dnl ========================================================
1152 dnl check for mbedTLS which can be used for https inspection
1153 dnl ========================================================
1154 FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=#
1155 OPT_MBEDTLS=no
1156 AC_ARG_WITH(mbedtls,dnl
1157 AC_HELP_STRING([--with-mbedtls], [Enable mbedTLS detection for https inspection.])
1158 AC_HELP_STRING([--without-mbedtls], [Disable mbedTLS detection]),
1159   OPT_MBEDTLS=$withval)
1160
1161 if test X"$OPT_MBEDTLS" != Xno; then
1162
1163   AC_CHECK_LIB(mbedtls, mbedtls_ssl_init,
1164    [
1165      AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1166      AC_DEFINE(FEATURE_HTTPS_INSPECTION_MBEDTLS, 1, [if mbedTLS is enabled])
1167      AC_SUBST(FEATURE_HTTPS_INSPECTION_MBEDTLS, [1])
1168      FEATURE_HTTPS_INSPECTION_MBEDTLS="yes"
1169    ], [], -lmbedx509 -lmbedcrypto)
1170
1171   if test "x$FEATURE_HTTPS_INSPECTION_MBEDTLS" = "xyes"; then
1172     AC_MSG_NOTICE([Detected mbedTLS. Enabling https inspection.])
1173
1174     LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
1175     old_CFLAGS_nospecial="-Imbedtls/include $old_CFLAGS_nospecial"
1176
1177     FEATURE_HTTPS_INSPECTION_ONLY=
1178     FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=
1179   fi
1180 fi
1181 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS)
1182
1183 dnl =================================================================
1184 dnl check for OpenSSL/LibreSSL which can be used for https inspection
1185 dnl =================================================================
1186 FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=#
1187 OPT_OPENSSL=no
1188 AC_ARG_WITH(openssl,dnl
1189 AC_HELP_STRING([--with-openssl], [Enable OpenSSL/LibreSSL detection for https inspection.])
1190 AC_HELP_STRING([--without-openssl], [Disable OpenSSL/LibreSSL detection]),
1191   OPT_OPENSSL=$withval)
1192
1193 if test X"$OPT_OPENSSL" != Xno; then
1194    if test X"$OPT_MBEDTLS" != Xno; then
1195       AC_MSG_ERROR([OpenSSL and mbedTLS support can't be enabled at the same time])
1196    fi
1197
1198   if test "$PORTNAME" != "win32"; then
1199      AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])])
1200      FOUND_SSL_LIB="no"
1201      AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [FOUND_SSL_LIB="yes"])
1202      AC_CHECK_LIB(ssl, SSL_library_init, [FOUND_SSL_LIB="yes"])
1203      AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
1204   else
1205      AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])])
1206      FOUND_SSL_LIB="no"
1207      AC_SEARCH_LIBS(OPENSSL_init_ssl, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
1208      AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
1209      AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])])
1210   fi
1211
1212   if test "x$FOUND_SSL_LIB" = xyes; then
1213      AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1214      AC_DEFINE(FEATURE_HTTPS_INSPECTION_OPENSSL, 1, [if OpenSSL is enabled])
1215      AC_SUBST(FEATURE_HTTPS_INSPECTION_OPENSSL, [1])
1216      FEATURE_HTTPS_INSPECTION="yes"
1217      FEATURE_HTTPS_INSPECTION_OPENSSL="yes"
1218   fi
1219
1220   if test "x$FEATURE_HTTPS_INSPECTION_OPENSSL" = "xyes"; then
1221     AC_MSG_NOTICE([Detected OpenSSL. Enabling https inspection.])
1222     AC_MSG_WARN([If you intend to redistribute Privoxy, please make sure the "special exception" from section 3 of the GPLv2 applies.])
1223
1224     LIBS="$LIBS -lssl -lcrypto"
1225     old_CFLAGS_nospecial="$old_CFLAGS_nospecial"
1226
1227     FEATURE_HTTPS_INSPECTION_ONLY=
1228     FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=
1229   fi
1230 fi
1231 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL)
1232
1233 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY)
1234
1235 dnl ========================================================
1236 dnl Check for Brotli which can be used for decompression
1237 dnl ========================================================
1238 WITH_BROTLI=no
1239 AC_ARG_WITH(brotli,
1240 AC_HELP_STRING([--with-brotli], [Enable Brotli detection])
1241 AC_HELP_STRING([--without-brotli], [Disable Brotli detection]),
1242   WITH_BROTLI=$withval)
1243
1244 if test X"$WITH_BROTLI" != Xno; then
1245
1246   LIBS="$LIBS -lbrotlidec"
1247   if test $target_type = mingw; then
1248     # XXX: why does just the mingw build need this???
1249     LIBS="$LIBS -lbrotlicommon -lbrotlienc"
1250   fi
1251
1252   AC_CHECK_LIB(brotlidec, BrotliDecoderDecompress)
1253
1254   AC_CHECK_HEADERS(brotli/decode.h,
1255     FEATURE_BROTLI=1
1256     AC_DEFINE(FEATURE_BROTLI, 1, [If Brotli is used for decompression])
1257     AC_SUBST(FEATURE_BROTLI, [1])
1258   )
1259 fi
1260
1261
1262 dnl =================================================================
1263 dnl Final cleanup and output
1264 dnl =================================================================
1265
1266 dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it separately
1267 dnl in the Makefile
1268 CFLAGS=$old_CFLAGS_nospecial
1269 AC_SUBST(SPECIAL_CFLAGS)
1270
1271 AC_SUBST(PTHREAD_LIB)
1272
1273 AC_OUTPUT(GNUmakefile doc/source/ldp.dsl)