Add www.proxidize.com as Bronze level sponsor
[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-2023 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=35
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=1672586827
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(msan, [  --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' program 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' program 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 -a $target_type != mingw; 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     time_t 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     time_t 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 AC_ARG_ENABLE(pcre2,
867 [  --disable-pcre2                  Don't try to use pcre2 even if it's available],
868 [enableval2=$enableval],
869 [enableval2=yes])
870 if test $enableval2 = yes; then
871   try_pcre2=yes
872 else
873   AC_MSG_WARN([Ignoring pcre2 even if it's available])
874   try_pcre2=no
875   have_pcre2=no
876 fi
877
878 if test $try_pcre2 != no; then
879 dnl =================================================================
880 dnl Checks for libraries.
881 dnl =================================================================
882 dnl Note: Some systems may have the library but not the system header
883 dnl       file, so we must check for both.
884 dnl       Also check for correct version
885 AC_CHECK_LIB(pcre2-8, pcre2_compile_8, [
886    AC_CHECK_HEADER(pcre2.h, [
887       AC_EGREP_HEADER(pcre2_pattern_info, pcre2.h,[have_pcre2=yes; AC_DEFINE(HAVE_PCRE2)], [AC_MSG_WARN([[pcre2 old version installed]]); have_pcre2=no])
888    ], [
889       AC_CHECK_HEADER(pcre2/pcre2.h, [
890          AC_EGREP_HEADER(pcre2_pattern_info, pcre2/pcre2.h, [have_pcre2=yes; AC_DEFINE(PCRE2_H_IN_SUBDIR)], [AC_MSG_WARN([[pcre2 old version installed]]); have_pcre2=no])
891       ], [have_pcre2=no])
892    ], [#define PCRE2_CODE_UNIT_WIDTH 8])
893 ], [have_pcre2=no])
894
895 AC_CHECK_LIB(pcre2-posix, regcomp, [
896    AC_CHECK_HEADER(pcre2posix.h, [
897       AC_EGREP_HEADER(pcre2_regerror, pcre2posix.h, [have_pcre2posix=yes],[AC_MSG_WARN([[pcre2posix old version installed]]); have_pcre2posix=no])
898    ], [
899       AC_CHECK_HEADER(pcre/pcre2posix.h, [
900          AC_EGREP_HEADER(pcre2_regerror, pcre2/pcre2posix.h,  [have_pcre2posix=yes; AC_DEFINE(PCRE2POSIX_H_IN_SUBDIR)],[AC_MSG_WARN([[pcre2posix old version installed]]); have_pcre2posix=no])
901       ], [have_pcre2posix=no])
902    ])
903 ], [have_pcre2posix=no], -lpcre2-8)
904 fi
905
906 if test $have_pcre2 = "no"; then
907
908 AC_CHECK_LIB(pcre, pcre_compile, [
909    AC_CHECK_HEADER(pcre.h, [
910       AC_EGREP_HEADER(pcre_fullinfo, pcre.h, [have_pcre=yes], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no])
911    ], [
912       AC_CHECK_HEADER(pcre/pcre.h, [
913          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])
914       ], [have_pcre=no])
915    ])
916 ], [have_pcre=no])
917
918 AC_CHECK_LIB(pcreposix, regcomp, [
919    AC_CHECK_HEADER(pcreposix.h, [
920       AC_EGREP_HEADER(pcreposix_regerror, pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes])
921    ], [
922       AC_CHECK_HEADER(pcre/pcreposix.h, [
923          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)])
924       ], [have_pcreposix=no])
925    ])
926 ], [have_pcreposix=no], -lpcre)
927
928 fi
929 dnl ================================================================
930 dnl libpcrs is temporarily disabled.
931 dnl
932 dnl Privoxy's own pcrs version fixes some problems that
933 dnl are present in libpcrs 0.3, the last pcrs release we
934 dnl know of, and as libpcrs seems to be currently unmaintained
935 dnl we can't send these fixes upstream.
936 dnl ================================================================
937 dnl
938 dnl AC_CHECK_LIB(pcrs, pcrs_compile, [AC_CHECK_HEADER(pcrs.h, [have_pcrs=yes], [have_pcrs=no])], [have_pcrs=no], -lpcre)
939
940 dnl =================================================================
941 dnl Always defined
942 dnl =================================================================
943
944 AC_DEFINE(__MT__)
945
946 dnl =================================================================
947 dnl Features
948 dnl =================================================================
949
950 AC_ARG_ENABLE(toggle,
951 [  --disable-toggle                Don't support temporary disable],
952 [if test $enableval = yes; then
953   AC_DEFINE(FEATURE_TOGGLE)
954 fi],AC_DEFINE(FEATURE_TOGGLE))
955
956 AC_ARG_ENABLE(force,
957 [  --disable-force                 Don't allow single-page disable],
958 [if test $enableval = yes; then
959   AC_DEFINE(FEATURE_FORCE_LOAD)
960 fi],AC_DEFINE(FEATURE_FORCE_LOAD))
961
962 AC_ARG_ENABLE(fast-redirects,
963 [  --disable-fast-redirects        Don't support fast redirects],
964 [if test $enableval = yes; then
965   AC_DEFINE(FEATURE_FAST_REDIRECTS)
966 fi], AC_DEFINE(FEATURE_FAST_REDIRECTS))
967
968 AC_ARG_ENABLE(stats,
969 [  --disable-stats                 Don't keep statistics],
970 [if test $enableval = yes; then
971   AC_DEFINE(FEATURE_STATISTICS)
972 fi],AC_DEFINE(FEATURE_STATISTICS))
973
974 AC_ARG_ENABLE(extended-statistics,
975 [  --enable-extended-statistics    Gather extended statistics.],
976 [if test $enableval = yes; then
977   AC_DEFINE(FEATURE_EXTENDED_STATISTICS)
978 fi])
979
980 AC_ARG_ENABLE(image-blocking,
981 [  --disable-image-blocking        Don't try to figure out whether a request is
982                                   for an image or HTML - assume HTML.],
983 [if test $enableval = yes; then
984   AC_DEFINE(FEATURE_IMAGE_BLOCKING)
985 fi],
986 AC_DEFINE(FEATURE_IMAGE_BLOCKING))
987
988 AC_ARG_ENABLE(acl-support,
989 [  --disable-acl-support           Prevents the use of ACLs to control access to
990                                   Privoxy by IP address.],
991 [if test $enableval = yes; then
992   AC_DEFINE(FEATURE_ACL)
993 fi],
994 AC_DEFINE(FEATURE_ACL))
995
996 AC_ARG_ENABLE(trust-files,
997 [  --disable-trust-files           Prevents the use of trust files.],
998 [if test $enableval = yes; then
999   AC_DEFINE(FEATURE_TRUST)
1000 fi],
1001 AC_DEFINE(FEATURE_TRUST))
1002
1003 AC_ARG_ENABLE(editor,
1004 [  --disable-editor                Prevents the use of the web-based actions file
1005                                   editor and web-based temporary disable setting.],
1006 [if test $enableval = yes; then
1007   AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS)
1008 fi],
1009 AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS))
1010
1011 AC_ARG_ENABLE(no-gifs,
1012 [  --enable-no-gifs                Use politically correct PNG format instead of GIF
1013                                   for built-in images. May not work with all browsers.],
1014 [if test $enableval = yes; then
1015   AC_DEFINE(FEATURE_NO_GIFS)
1016 fi])
1017
1018 AC_ARG_ENABLE(graceful-termination,
1019 [  --enable-graceful-termination   Allow to shutdown Privoxy through the webinterface.],
1020 [if test $enableval = yes; then
1021   AC_DEFINE(FEATURE_GRACEFUL_TERMINATION)
1022 fi])
1023
1024 AC_ARG_ENABLE(pcre-host-patterns,
1025 [  --enable-pcre-host-patterns     Allow to use PCRE syntax in host patterns by prefixing the pattern with
1026                                   "PCRE-HOST-PATTERN:". You can use tools/url-pattern-translator.pl to
1027                                   convert existing action files to use PCRE host patterns.],
1028 [if test $enableval = yes; then
1029   AC_DEFINE(FEATURE_PCRE_HOST_PATTERNS)
1030 fi])
1031
1032 AC_ARG_ENABLE(pcre-jit-compilation,
1033 [  --disable-pcre-jit-compilation     Don't let pcrs use pcre JIT compilation even if pcre supports it.],
1034 [if test $enableval != yes; then
1035   AC_DEFINE(DISABLE_PCRE_JIT_COMPILATION)
1036 fi])
1037
1038 AC_ARG_ENABLE(external-filters,
1039 [  --enable-external-filters       Allow to filter content with scripts and programs. Experimental.],
1040 [if test $enableval = yes; then
1041   AC_DEFINE(FEATURE_EXTERNAL_FILTERS,1,[Define to 1 to allow to filter content with scripts and programs.])
1042 fi])
1043
1044 AC_ARG_ENABLE(accept-filter,
1045 [  --enable-accept-filter          Try to use accf_http(9) if supported.],
1046 [if test $enableval = yes; then
1047   AC_DEFINE(FEATURE_ACCEPT_FILTER)
1048 fi])
1049
1050 AC_ARG_ENABLE(strptime-sanity-checks,
1051 [  --enable-strptime-sanity-checks Only trust strptime() results if an additional strftime()/strptime()
1052                                   conversion doesn't change the result. Can be useful if strptime() is
1053                                   known or suspected to be broken.],
1054 [if test $enableval = yes; then
1055   AC_DEFINE(FEATURE_STRPTIME_SANITY_CHECKS)
1056 fi])
1057
1058 AC_ARG_ENABLE(client-tags,
1059 [  --disable-client-tags           Disable support for client-specific tags],
1060 [ if test $enableval = "no"; then have_client_tags=no; fi ])
1061 if test "${have_client_tags}" = "no"; then
1062   echo "Disabling support for client-specific tags."
1063   FEATURE_CLIENT_TAGS_ONLY="#"
1064 else
1065   echo "Enabling support for client-specific tags."
1066   AC_DEFINE(FEATURE_CLIENT_TAGS,1,[Define to enable support for client-specific tags.])
1067   FEATURE_CLIENT_TAGS_ONLY=""
1068 fi
1069 AC_SUBST(FEATURE_CLIENT_TAGS_ONLY)
1070
1071 FUZZ_ONLY="#"
1072 AC_ARG_ENABLE(fuzz,
1073 [  --enable-fuzz                   Enable code that makes fuzzing more convenient],
1074 [if test $enableval = yes; then
1075   FUZZ_ONLY=""
1076   AC_DEFINE(FUZZ,1,[Define to make fuzzing more convenient.])
1077 fi])
1078 AC_SUBST(FUZZ_ONLY)
1079
1080 dnl pcre/pcrs is needed for CGI anyway, so
1081 dnl the choice is only between static and
1082 dnl dynamic:
1083
1084 AC_ARG_ENABLE(dynamic-pcre,
1085 [  --disable-dynamic-pcre          Use the built-in, static pcre, even if libpcre is available],
1086 [ if test $enableval = "no"; then have_pcre=no; fi ])
1087
1088 dnl =================================================
1089 dnl libpcrs is temporarily disabled,
1090 dnl see comment above for the reason.
1091 dnl =================================================
1092 dnl AC_ARG_ENABLE(dynamic-pcrs,
1093 dnl [  --disable-dynamic-pcrs          Use the built-in, static pcrs, even if libpcrs is available],
1094 dnl [ if test $enableval = "no"; then have_pcrs=no; fi ])
1095
1096
1097 dnl ====================================================
1098 dnl This check is incomplete. For mingw32 zlib is found
1099 dnl by configure, but not necessarily by the compiler.
1100 dnl ====================================================
1101 AC_ARG_ENABLE(zlib,
1102 [  --disable-zlib                  Don't use zlib to decompress data before filtering.],
1103 [enableval2=$enableval],
1104 [enableval2=yes])
1105 if test $enableval2 = yes; then
1106   AC_CHECK_LIB(z, zlibVersion, [have_zlib="yes"], [have_zlib="no"])
1107   if test $have_zlib = "yes"; then
1108     LIBS="$LIBS -lz"
1109     AC_DEFINE(FEATURE_ZLIB,1,[Define to 1 to use zlib to decompress data before filtering.])
1110   else
1111    AC_MSG_WARN([No zlib found.
1112    Privoxy will not be able to filter compressed content.
1113    This may become a fatal error in the future.])
1114   fi
1115 fi
1116
1117 AC_ARG_ENABLE(compression,
1118 [  --enable-compression            Allow Privoxy to compress buffered content if the client supports it. Requires zlib support.],
1119 [enableval2=$enableval],
1120 [enableval2=no])
1121 if test $enableval2 = yes; then
1122   if test $have_zlib = "yes"; then
1123     echo Enabling compression support.
1124     AC_DEFINE(FEATURE_COMPRESSION,1,[Define to 1 to use compression through the zlib library.])
1125   else
1126    AC_MSG_WARN([No zlib found. Privoxy will not be able to (re-)compressed buffered content.])
1127   fi
1128 fi
1129
1130
1131 # If we have libpcre and either we also have pcreposix or
1132 # we don't need pcreposix, then link pcre dynamically; else
1133 # build it and link statically
1134 #
1135
1136 #check for libpcre2 first. then regular pcre
1137
1138 if test $have_pcre2 = "yes"; then
1139   echo "using libpcre2"
1140   STATIC_PCRE_ONLY=#
1141   LIBS="$LIBS -lpcre2-8 -lpcre2-posix"
1142   if test "$use_static_pcre" = "yes"; then
1143     pcre_dyn=no
1144     AC_DEFINE(PCRE2_STATIC,1,[Define to statically link to the pcre2 library on Windows.])
1145 #     see pcre2-10.42/src/pcre2.h line 54
1146 #       #if defined(_WIN32) && !defined(PCRE2_STATIC)
1147 #       #  ifndef PCRE2_EXP_DECL
1148 #       #    define PCRE2_EXP_DECL  extern __declspec(dllimport)
1149 #       #  endif
1150 #       #endif
1151 #     If you want to statically link a program against a PCRE2 library in the form of
1152 #     a non-dll .a file, you must define PCRE2_STATIC before including src/pcre2.h.
1153 #     Otherwise the exported functions will be declared __declspec(dllimport),
1154 #     with unwanted results.  eg: build failures with error messages like
1155 #       undefined reference to `_imp__pcre2_compile_8'
1156   else
1157     pcre_dyn=yes
1158     AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.])
1159   fi
1160 else
1161
1162 if test $have_pcre = "yes"; then
1163   echo "using libpcre"
1164   STATIC_PCRE_ONLY=#
1165   LIBS="$LIBS -lpcre -lpcreposix"
1166   if test "$use_static_pcre" = "yes"; then
1167     pcre_dyn=no
1168     AC_DEFINE(PCRE_STATIC,1,[Define to statically link to pcre library on Windows.])
1169 #     see /usr/i686-w64-mingw32/sys-root/mingw/include/pcre.h line 54
1170 #       #if defined(_WIN32) && !defined(PCRE_STATIC)
1171 #       #  ifndef PCRE_EXP_DECL
1172 #       #    define PCRE_EXP_DECL  extern __declspec(dllimport)
1173 #       #  endif
1174 #     If you want to statically link a program against a PCRE library in the form of
1175 #     a non-dll .a file, you must define PCRE_STATIC before including pcre.h or
1176 #     pcrecpp.h, otherwise the pcre_malloc() and pcre_free() exported functions will
1177 #     be declared __declspec(dllimport), with unwanted results.
1178   else
1179     pcre_dyn=yes
1180     AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.])
1181   fi
1182 else
1183   AC_MSG_ERROR(Detected neither pcre2 nor pcre library.)
1184 fi
1185 fi
1186
1187 AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE)
1188
1189 if test $have_pthread = "yes" -o $target_type = "mingw"; then
1190   echo Enabling connection-sharing support.
1191   AC_DEFINE(FEATURE_CONNECTION_SHARING)
1192 fi
1193
1194 dnl =================================================
1195 dnl libpcrs is temporarily disabled,
1196 dnl see comment above for the reason.
1197 dnl =================================================
1198 dnl # If we have libpcrs and pcre is linked dynamically
1199 dnl # then also link pcrs dynamically, else build and link
1200 dnl # pcrs statically
1201 dnl
1202 dnl if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
1203 dnl  echo "using libpcrs"
1204 dnl  STATIC_PCRS_ONLY=#
1205 dnl  LIBS="$LIBS -lpcrs"
1206 dnl else
1207 dnl  echo "using built-in static pcrs"
1208   AC_DEFINE(STATIC_PCRS)
1209   STATIC_PCRS_ONLY=
1210 dnl fi
1211
1212 AC_SUBST(STATIC_PCRE_ONLY)
1213 AC_SUBST(STATIC_PCRS_ONLY)
1214
1215 FEATURE_HTTPS_INSPECTION_ONLY=#
1216 dnl ========================================================
1217 dnl check for mbedTLS which can be used for https inspection
1218 dnl ========================================================
1219 FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=#
1220 OPT_MBEDTLS=no
1221 AC_ARG_WITH(mbedtls,dnl
1222 AC_HELP_STRING([--with-mbedtls], [Enable mbedTLS detection for https inspection.])
1223 AC_HELP_STRING([--without-mbedtls], [Disable mbedTLS detection]),
1224   OPT_MBEDTLS=$withval)
1225
1226 if test X"$OPT_MBEDTLS" != Xno; then
1227
1228   AC_CHECK_LIB(mbedtls, mbedtls_ssl_init,
1229    [
1230      AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1231      AC_DEFINE(FEATURE_HTTPS_INSPECTION_MBEDTLS, 1, [if mbedTLS is enabled])
1232      AC_SUBST(FEATURE_HTTPS_INSPECTION_MBEDTLS, [1])
1233      FEATURE_HTTPS_INSPECTION_MBEDTLS="yes"
1234    ], [], -lmbedx509 -lmbedcrypto)
1235
1236   if test "x$FEATURE_HTTPS_INSPECTION_MBEDTLS" = "xyes"; then
1237     AC_MSG_NOTICE([Detected mbedTLS. Enabling https inspection.])
1238
1239     LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
1240     old_CFLAGS_nospecial="-Imbedtls/include $old_CFLAGS_nospecial"
1241
1242     FEATURE_HTTPS_INSPECTION_ONLY=
1243     FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=
1244   fi
1245 fi
1246 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS)
1247
1248 dnl =================================================================
1249 dnl check for OpenSSL/LibreSSL which can be used for https inspection
1250 dnl =================================================================
1251 FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=#
1252 OPT_OPENSSL=no
1253 AC_ARG_WITH(openssl,dnl
1254 AC_HELP_STRING([--with-openssl], [Enable OpenSSL/LibreSSL detection for https inspection.])
1255 AC_HELP_STRING([--without-openssl], [Disable OpenSSL/LibreSSL detection]),
1256   OPT_OPENSSL=$withval)
1257
1258 if test X"$OPT_OPENSSL" != Xno; then
1259    if test X"$OPT_MBEDTLS" != Xno; then
1260       AC_MSG_ERROR([OpenSSL and mbedTLS support can't be enabled at the same time])
1261    fi
1262
1263   if test "$PORTNAME" != "win32"; then
1264      AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])])
1265      FOUND_SSL_LIB="no"
1266      AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [FOUND_SSL_LIB="yes"])
1267      AC_CHECK_LIB(ssl, SSL_library_init, [FOUND_SSL_LIB="yes"])
1268      AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
1269   else
1270      AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])])
1271      FOUND_SSL_LIB="no"
1272      AC_SEARCH_LIBS(OPENSSL_init_ssl, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
1273      AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
1274      AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])])
1275   fi
1276
1277   if test "x$FOUND_SSL_LIB" = xyes; then
1278      AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1279      AC_DEFINE(FEATURE_HTTPS_INSPECTION_OPENSSL, 1, [if OpenSSL is enabled])
1280      AC_SUBST(FEATURE_HTTPS_INSPECTION_OPENSSL, [1])
1281      FEATURE_HTTPS_INSPECTION="yes"
1282      FEATURE_HTTPS_INSPECTION_OPENSSL="yes"
1283   fi
1284
1285   if test "x$FEATURE_HTTPS_INSPECTION_OPENSSL" = "xyes"; then
1286     AC_MSG_NOTICE([Detected OpenSSL. Enabling https inspection.])
1287     AC_MSG_WARN([If you intend to redistribute Privoxy, please make sure the "special exception" from section 3 of the GPLv2 applies.])
1288
1289     LIBS="$LIBS -lssl -lcrypto"
1290     old_CFLAGS_nospecial="$old_CFLAGS_nospecial"
1291
1292     FEATURE_HTTPS_INSPECTION_ONLY=
1293     FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=
1294   fi
1295 fi
1296 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL)
1297
1298 dnl ========================================================
1299 dnl check for wolfSSL which can be used for https inspection
1300 dnl ========================================================
1301 FEATURE_HTTPS_INSPECTION_ONLY_WOLFSSL=#
1302 OPT_WOLFSSL=no
1303 AC_ARG_WITH(wolfssl,dnl
1304 AC_HELP_STRING([--with-wolfssl], [Enable Wolfssl/LibreSSL detection for https inspection.])
1305 AC_HELP_STRING([--without-wolfssl], [Disable Wolfssl/LibreSSL detection]),
1306   OPT_WOLFSSL=$withval)
1307
1308 if test X"$OPT_WOLFSSL" != Xno; then
1309     if test X"$OPT_MBEDTLS" != Xno; then
1310         AC_MSG_ERROR([wolfSSL and mbedTLS support can't be enabled at the same time])
1311     fi
1312     if test X"$OPT_OPENSSL" != Xno; then
1313         AC_MSG_ERROR([wolfSSL and OpenSSL support can't be enabled at the same time])
1314     fi
1315
1316     AC_CHECK_LIB(wolfssl, wolfSSL_Init, [HAVE_WOLFSSL_INIT="yes"])
1317
1318     if test "x$HAVE_WOLFSSL_INIT" = "xyes"; then
1319         AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1320         AC_DEFINE(FEATURE_HTTPS_INSPECTION_WOLFSSL, 1, [if Wolfssl is enabled])
1321         AC_SUBST(FEATURE_HTTPS_INSPECTION_WOLFSSL, [1])
1322         FEATURE_HTTPS_INSPECTION="yes"
1323         FEATURE_HTTPS_INSPECTION_WOLFSSL="yes"
1324     fi
1325
1326     if test "x$FEATURE_HTTPS_INSPECTION_WOLFSSL" = "xyes"; then
1327     AC_MSG_NOTICE([Detected wolfSSL. Enabling https inspection.])
1328
1329     LIBS="$LIBS -lwolfssl"
1330
1331     FEATURE_HTTPS_INSPECTION_ONLY=
1332     FEATURE_HTTPS_INSPECTION_ONLY_WOLFSSL=
1333   fi
1334 fi
1335 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_WOLFSSL)
1336
1337 AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY)
1338
1339 dnl ========================================================
1340 dnl Check for Brotli which can be used for decompression
1341 dnl ========================================================
1342 WITH_BROTLI=no
1343 AC_ARG_WITH(brotli,
1344 AC_HELP_STRING([--with-brotli], [Enable Brotli detection])
1345 AC_HELP_STRING([--without-brotli], [Disable Brotli detection]),
1346   WITH_BROTLI=$withval)
1347
1348 if test X"$WITH_BROTLI" != Xno; then
1349
1350   LIBS="$LIBS -lbrotlidec"
1351   if test $target_type = mingw; then
1352     # XXX: why does just the mingw build need this???
1353     LIBS="$LIBS -lbrotlicommon -lbrotlienc"
1354   fi
1355
1356   AC_CHECK_LIB(brotlidec, BrotliDecoderDecompress)
1357
1358   AC_CHECK_HEADERS(brotli/decode.h,
1359     FEATURE_BROTLI=1
1360     AC_DEFINE(FEATURE_BROTLI, 1, [If Brotli is used for decompression])
1361     AC_SUBST(FEATURE_BROTLI, [1])
1362   )
1363 fi
1364
1365
1366 dnl =================================================================
1367 dnl Final cleanup and output
1368 dnl =================================================================
1369
1370 dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it separately
1371 dnl in the Makefile
1372 CFLAGS=$old_CFLAGS_nospecial
1373 AC_SUBST(SPECIAL_CFLAGS)
1374
1375 AC_SUBST(PTHREAD_LIB)
1376
1377 AC_OUTPUT(GNUmakefile doc/source/ldp.dsl)