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