1dnl Process this file with autoconf to produce a configure script.
2dnl
3dnl Written by and Copyright (C) 2001-2021 the
4dnl Privoxy team. https://www.privoxy.org/
5dnl
6dnl Based on the Internet Junkbuster originally written
7dnl by and Copyright (C) 1997 Anonymous Coders and
8dnl Junkbusters Corporation.  http://www.junkbusters.com
9dnl
10dnl This program is free software; you can redistribute it
11dnl and/or modify it under the terms of the GNU General
12dnl Public License as published by the Free Software
13dnl Foundation; either version 2 of the License, or (at
14dnl your option) any later version.
15dnl
16dnl This program is distributed in the hope that it will
17dnl be useful, but WITHOUT ANY WARRANTY; without even the
18dnl implied warranty of MERCHANTABILITY or FITNESS FOR A
19dnl PARTICULAR PURPOSE.  See the GNU General Public
20dnl License for more details.
21dnl
22dnl The GNU General Public License should be included with
23dnl this file.  If not, you can view it at
24dnl http://www.gnu.org/copyleft/gpl.html
25dnl or write to the Free Software Foundation, Inc., 59
26dnl Temple Place - Suite 330, Boston, MA  02111-1307, USA.
27dnl
28
29dnl =================================================================
30dnl AutoConf Initialization
31dnl =================================================================
32
33AC_REVISION($Revision: 1.213 $)
34AC_INIT(jcc.c)
35
36if 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
45fi
46
47AC_CONFIG_HEADER([config.h])
48AC_CANONICAL_HOST
49
50dodk=auto
51DKPREFIX=none
52AC_ARG_WITH(docbook, dnl
53  --with-docbook=[[yes|no|directory]]
54                           Enable docbook documentation creation
55			   (default = yes, for gnu and linux),[dnl
56case "$with_docbook" in
57yes) dodk=yes;;
58no) dodk=no;;
59*)
60	dodk=yes
61	DKPREFIX=$withval
62	;;
63esac
64])
65DB2HTML=false
66AC_ARG_WITH(db2html, dnl
67  --with-db2html=<path/executable>
68                          Set the location of the docbook to html converter
69                          (default = search),[dnl
70DB2HTML=$withval
71])
72
73dnl =================================================================
74dnl Application version number
75dnl =================================================================
76dnl CODE_STATUS can be "alpha", "beta", "stable" or "UNRELEASED",
77dnl and will be used for CGI output. Increment version number and
78dnl set status to "UNRELEASED" whenever git differs from the last
79dnl release and no new release is near.
80
81VERSION_MAJOR=3
82VERSION_MINOR=0
83VERSION_POINT=33
84CODE_STATUS="stable"
85
86dnl Timestamp (date +%s) used by the mtree-spec target.
87dnl Should be updated before releases but forgetting it isn't critical.
88SOURCE_DATE_EPOCH=1636218132
89
90dnl =================================================================
91dnl Substitute the version numbers
92dnl =================================================================
93
94AC_SUBST(VERSION_MAJOR)
95AC_SUBST(VERSION_MINOR)
96AC_SUBST(VERSION_POINT)
97AC_SUBST(CODE_STATUS)
98AC_SUBST(SOURCE_DATE_EPOCH)
99
100dnl
101AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR})
102AC_DEFINE_UNQUOTED(VERSION_MINOR,${VERSION_MINOR})
103AC_DEFINE_UNQUOTED(VERSION_POINT,${VERSION_POINT})
104AC_DEFINE_UNQUOTED(VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_POINT}")
105AC_DEFINE_UNQUOTED(CODE_STATUS,"${CODE_STATUS}")
106
107dnl =================================================================
108dnl Checks for programs needed to build.
109dnl =================================================================
110
111dnl Keep AC_PROG_CC from setting its own defaults:
112if test "X$CFLAGS" = "X"; then
113   CFLAGS=" "
114fi
115
116AC_PROG_CC
117AC_PROG_CPP
118AC_PROG_INSTALL
119AC_PROG_LN_S
120AC_PROG_MAKE_SET
121AC_PROG_AWK
122
123AC_CHECK_PROG(GDB,gdb,yes,no)
124AC_PATH_PROG(BGROUPS,groups,no,$PATH:/bin:/usr/bin:/usr/local/bin)
125AC_PATH_PROG(ID,id,no,$PATH:/bin:/usr/bin:/usr/local/bin)
126AC_SUBST(ID)
127AC_SUBST(BGROUPS)
128
129dnl =================================================================
130dnl debug, gcc and gdb support
131dnl =================================================================
132
133AC_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
160AC_ARG_WITH(assertions, [  --with-assertions       Enable assertions])
161if test "x$with_assertions" != "xyes"; then
162    CFLAGS="$CFLAGS -DNDEBUG"
163fi
164
165AC_ARG_WITH(asan, [  --with-asan       Enable AddressSanitizer. Requires compiler support.])
166if test "x$with_asan" = "xyes"; then
167    CFLAGS="$CFLAGS -fsanitize=address"
168    LDFLAGS="$LDFLAGS -fsanitize=address"
169fi
170
171AC_ARG_WITH(asan, [  --with-msan       Enable MemorySanitizer. Requires compiler support.])
172if test "x$with_msan" = "xyes"; then
173    CFLAGS="$CFLAGS -fsanitize=memory"
174    LDFLAGS="$LDFLAGS -fsanitize=memory"
175fi
176
177AC_ARG_WITH(usan, [  --with-usan       Enable UndefinedBehaviorSanitizer. Requires compiler support.])
178if test "x$with_usan" = "xyes"; then
179    CFLAGS="$CFLAGS -fsanitize=undefined"
180    LDFLAGS="$LDFLAGS -fsanitize=undefined"
181fi
182
183dnl =================================================================
184dnl Check for user and group validity
185dnl =================================================================
186
187
188if test "$host_os" = haiku; then
189  echo "Skipping user and group validity stuff.";
190
191else
192
193  $ID privoxy >/dev/null 2>/dev/null
194  if test $? -ne 0 ; then
195   AC_MSG_WARN(There is no user 'privoxy' on this system)
196  fi
197  AC_MSG_CHECKING([for user])
198  AC_ARG_WITH(user,
199        [  --with-user=privoxy          Set user under which privoxy will run],
200        [
201                if test "x$withval" != "xyes"; then
202                  if test $ID = no ; then
203                    AC_MSG_ERROR(There is no 'id' program on this system)
204                  else
205                    AC_MSG_RESULT($with_user)
206                    $ID $with_user 2>/dev/null >/dev/null
207                    if test $? -eq 0 ; then
208                      USER=$with_user;
209                    else
210                      AC_MSG_ERROR(There is no user '$with_user' on this system)
211                    fi
212                  fi
213                  else
214                   AC_MSG_ERROR(We need a user if you give me this parameter)
215                fi
216        ],
217        [
218          if test $ID = no ; then
219            AC_MSG_ERROR(There is no 'id' programm on this system)
220          else
221            AC_MSG_RESULT(none specified)
222            USER=$with_user
223          fi
224        ]
225  )
226  AC_SUBST(USER)
227
228  AC_MSG_CHECKING([for group])
229  AC_ARG_WITH(group,
230        [  --with-group=privoxy         Set group for privoxy],
231        [
232                if test "x$withval" != "xyes"; then
233                  if test $BGROUPS = no ; then
234                    AC_MSG_ERROR(There is no 'groups' program on this system)
235                  else
236                    AC_MSG_RESULT($with_group)
237                    $BGROUPS $USER >/dev/null
238                    if test $? -eq 0 ; then
239                      for i in `$BGROUPS $USER | sed 's/.*: //' 2>/dev/null`; do
240                        if test "x$i" = "x$with_group" ; then
241                          GROUP=$with_group
242                          break
243                        fi
244                      done
245                      if test "x$GROUP" != "x$with_group" ; then
246                        AC_MSG_ERROR(The given value '$withval' does not match group entry)
247                      fi
248                    else
249                      AC_MSG_ERROR(There is no group entry for user '$USER')
250                    fi
251                  fi
252                else
253                   AC_MSG_ERROR(We need a group if you give me this parameter)
254                fi
255        ],
256        [
257          if test $BGROUPS = no ; then
258            AC_MSG_ERROR(There is no 'groups' programm on this system)
259          else
260            AC_MSG_RESULT(none specified)
261            GROUP=$with_group;
262          fi
263        ]
264  )
265  AC_SUBST(GROUP)
266
267fi
268
269dnl =================================================================
270dnl additional gcc flags
271dnl =================================================================
272dnl
273if test "$GCC"; then
274  if test "$host" != "powerpc-unknown-amigaos"; then
275    CFLAGS="-pipe $CFLAGS"
276  fi
277fi
278
279
280dnl =================================================================
281dnl Build type
282dnl =================================================================
283dnl
284dnl Must do this first.
285dnl
286dnl Reason: This sets CFLAGS in order to switch the Cygwin compiler
287dnl into Cygwin or MinGW32 modes.  Depending on the mode selected,
288dnl the compiler will use completely different sets of library
289dnl and include files.
290dnl
291dnl =================================================================
292
293AC_MINGW32
294AC_CYGWIN
295
296if test "$MINGW32" = "yes"; then
297  target_type=mingw
298else
299  if test "$CYGWIN" = "yes"; then
300    target_type=cygwin
301  else
302    target_type=unix
303  fi
304fi
305
306if 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
315fi
316
317dnl Decide what to do based on target_type
318dnl Note: PTHREAD_LIB is always set, even if pthread is disabled.
319dnl This is because we don't know yet whether pthread is enabled.
320
321AC_ARG_ENABLE(mingw32,
322[  --enable-mingw32                Use mingw32 for a Windows GUI],
323[if test $enableval = yes; then
324  target_type=mingw
325fi])
326
327if test $target_type = mingw; then
328  WIN_ONLY=
329  CFLAGS="$CFLAGS -DWINVER=0x501"
330  SPECIAL_CFLAGS="-mwindows"
331dnl from the cygwin FAQ: The regular setup allows you to use the -mwindows option
332dnl to include a set of the basic libraries user32, gdi32 and comdlg32.
333dnl (and also make your program a GUI program instead of a console program)
334  PTHREAD_LIB=-lpthread
335  echo "Using mingw32 (Win32 GUI)"
336else
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
346fi
347AC_SUBST(WIN_ONLY)
348
349if 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
360fi
361AC_SUBST(W3M)
362AC_SUBST(DB2HTML)
363
364dnl prefer openjade to jade
365dnl Check for jade, so we can build the documentation
366AC_CHECK_PROGS(JADEBIN,openjade jade,false)
367AC_SUBST(JADEBIN)
368
369dnl Prefer OpenSP to SP
370dnl   ref: https://lists.privoxy.org/pipermail/privoxy-devel/2018-November/000293.html
371AC_CHECK_PROGS(NSGMLS,onsgmls nsgmls,false)
372AC_SUBST(NSGMLS)
373
374dnl Check for man2html for docs.
375AC_CHECK_PROGS(MAN2HTML,man2html,false)
376AC_SUBST(MAN2HTML)
377
378dnl Set doc status flag for conditional content inclusions
379DOC_STATUS=p-not-stable
380if  test $CODE_STATUS = stable; then
381     DOC_STATUS="p-stable"
382fi
383AC_SUBST(DOC_STATUS)
384
385dnl Checking for the docbook.dsl stylesheet file
386dnl It is still not portable (directory slash)
387JADECAT=""
388if 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
395dnl  echo -n does not fly with /bin/sh.
396dnl      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
415dnl     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
425fi
426AC_SUBST(JADECAT)
427AC_SUBST(DKPREFIX)
428
429AC_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"
434fi])
435
436AC_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
440dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
441old_CFLAGS_nospecial=$CFLAGS
442CFLAGS="$CFLAGS $SPECIAL_CFLAGS"
443
444# Hack to force AutoConf to use the CFLAGS we just set
445dnl Warning: This may break with a future version of Autoconf
446dnl          Tested with autoconf 2.13
447ac_cpp='$CPP $CPPFLAGS $SPECIAL_CFLAGS'
448ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
449ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
450
451
452dnl =================================================================
453dnl Thread support
454dnl =================================================================
455
456AC_CHECK_HEADER(pthread.h, [have_pthread=yes], [have_pthread=no])
457
458AC_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
468fi])
469
470if 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
490else
491  PTHREAD_ONLY=#
492  echo Using native threads
493fi
494
495AC_SUBST(PTHREAD_ONLY)
496
497dnl =================================================================
498dnl On most platforms select() does not support fd numbers above
499dnl FD_SETSIZE, as a result Privoxy can't handle more than
500dnl approximately FD_SETSIZE/2 client connections.
501dnl On some platforms the value can be changed at compile time,
502dnl on others it's hardcoded and requires recompilation of the OS.
503dnl Only relevant if select() is actually being used.
504dnl =================================================================
505AC_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
518dnl =================================================================
519dnl Support for thread-safe versions of gethostbyaddr, gethostbyname,
520dnl gmtime and localtime
521dnl =================================================================
522
523dnl Next line needed to find the gethost*_r functions on Solaris
524AC_CHECK_LIB(nsl, gethostbyname)
525
526AC_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
570AC_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
613AC_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
631AC_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
649dnl =================================================================
650dnl Solaris specific
651dnl FIXME: Not tested on Solaris yet...
652dnl ISFIXED: Have tested it on Solaris, but there are other ways to
653dnl 	make these checks generic, e.g.:
654dnl AC_CHECK_FUNC(getsockopt, , AC_CHECK_LIB(socket, getsockopt))
655dnl	(Moritz Barsnick <moritz@barsnick.net>)
656dnl =================================================================
657
658
659SOCKET_LIB=
660
661case "$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;;
674esac
675
676AC_SUBST(SOCKET_LIB)
677
678dnl =================================================================
679dnl Solaris problem, and others perhaps (socklen_t is undefined)
680dnl =================================================================
681
682if test $target_type != mingw; then
683# i686-w64-mingw32-gcc gets socklen_t define from ws2tcpip.h
684
685AC_MSG_CHECKING([for socklen_t])
686AC_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
691fi
692
693dnl =================================================================
694dnl Mac OSX specific
695dnl =================================================================
696
697case "$host" in
698*-apple-darwin*) SPECIAL_CFLAGS="-Dunix"
699;;
700esac
701
702dnl =================================================================
703dnl OpenBSD specific
704dnl =================================================================
705
706case "$host" in
707*-openbsd*) SPECIAL_CFLAGS="$SPECIAL_CFLAGS -Dunix"
708;;
709esac
710
711dnl =================================================================
712dnl Haiku specific
713dnl =================================================================
714
715if 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"
729fi
730
731dnl =================================================================
732dnl Check for standard compiler stuff
733dnl =================================================================
734
735AC_EXEEXT
736AC_OBJEXT
737AC_HEADER_STDC
738AC_HEADER_DIRENT
739AC_C_CONST
740AC_TYPE_SIZE_T
741AC_TYPE_PID_T
742AC_HEADER_TIME
743AC_STRUCT_TM
744AC_CHECK_SIZEOF(int, 4)
745AC_CHECK_SIZEOF(char *, 4)
746AC_CHECK_SIZEOF(long, 4)
747AC_CHECK_SIZEOF(long long, 8)
748AC_CHECK_SIZEOF(size_t, 4)
749AC_CHECK_SIZEOF(time_t, 8)
750
751dnl Checks for header files.
752AC_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
772dnl Checks for library functions.
773AC_PROG_GCC_TRADITIONAL
774AC_TYPE_SIGNAL
775AC_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
812dnl Checks for RFC 2553 resolver and socket functions
813AC_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
817fi], enable_ipv6_support=yes)
818
819if 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.])
822elif 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
856else
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  ])
864fi
865
866dnl =================================================================
867dnl Checks for libraries.
868dnl =================================================================
869dnl Note: Some systems may have the library but not the system header
870dnl       file, so we must check for both.
871dnl       Also check for correct version
872AC_CHECK_LIB(pcre, pcre_compile, [
873   AC_CHECK_HEADER(pcre.h, [
874      AC_EGREP_HEADER(pcre_fullinfo, pcre.h, [have_pcre=yes], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no])
875   ], [
876      AC_CHECK_HEADER(pcre/pcre.h, [
877         AC_EGREP_HEADER(pcre_fullinfo, pcre/pcre.h, [have_pcre=yes]; [AC_DEFINE(PCRE_H_IN_SUBDIR)], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no])
878      ], [have_pcre=no])
879   ])
880], [have_pcre=no])
881
882AC_CHECK_LIB(pcreposix, regcomp, [
883   AC_CHECK_HEADER(pcreposix.h, [
884      AC_EGREP_HEADER(pcreposix_regerror, pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes])
885   ], [
886      AC_CHECK_HEADER(pcre/pcreposix.h, [
887         AC_EGREP_HEADER(pcreposix_regerror, pcre/pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes]; [AC_DEFINE(PCREPOSIX_H_IN_SUBDIR)])
888      ], [have_pcreposix=no])
889   ])
890], [have_pcreposix=no], -lpcre)
891
892dnl ================================================================
893dnl libpcrs is temporarily disabled.
894dnl
895dnl Privoxy's own pcrs version fixes some problems that
896dnl are present in libpcrs 0.3, the last pcrs release we
897dnl know of, and as libpcrs seems to be currently unmaintained
898dnl we can't send these fixes upstream.
899dnl ================================================================
900dnl
901dnl AC_CHECK_LIB(pcrs, pcrs_compile, [AC_CHECK_HEADER(pcrs.h, [have_pcrs=yes], [have_pcrs=no])], [have_pcrs=no], -lpcre)
902
903dnl =================================================================
904dnl Always defined
905dnl =================================================================
906
907AC_DEFINE(__MT__)
908
909dnl =================================================================
910dnl Features
911dnl =================================================================
912
913AC_ARG_ENABLE(toggle,
914[  --disable-toggle                Don't support temporary disable],
915[if test $enableval = yes; then
916  AC_DEFINE(FEATURE_TOGGLE)
917fi],AC_DEFINE(FEATURE_TOGGLE))
918
919AC_ARG_ENABLE(force,
920[  --disable-force                 Don't allow single-page disable],
921[if test $enableval = yes; then
922  AC_DEFINE(FEATURE_FORCE_LOAD)
923fi],AC_DEFINE(FEATURE_FORCE_LOAD))
924
925AC_ARG_ENABLE(fast-redirects,
926[  --disable-fast-redirects        Don't support fast redirects],
927[if test $enableval = yes; then
928  AC_DEFINE(FEATURE_FAST_REDIRECTS)
929fi], AC_DEFINE(FEATURE_FAST_REDIRECTS))
930
931AC_ARG_ENABLE(stats,
932[  --disable-stats                 Don't keep statistics],
933[if test $enableval = yes; then
934  AC_DEFINE(FEATURE_STATISTICS)
935fi],AC_DEFINE(FEATURE_STATISTICS))
936
937AC_ARG_ENABLE(extended-statistics,
938[  --enable-extended-statistics    Gather extended statistics.],
939[if test $enableval = yes; then
940  AC_DEFINE(FEATURE_EXTENDED_STATISTICS)
941fi])
942
943AC_ARG_ENABLE(image-blocking,
944[  --disable-image-blocking        Don't try to figure out whether a request is
945                                  for an image or HTML - assume HTML.],
946[if test $enableval = yes; then
947  AC_DEFINE(FEATURE_IMAGE_BLOCKING)
948fi],
949AC_DEFINE(FEATURE_IMAGE_BLOCKING))
950
951AC_ARG_ENABLE(acl-support,
952[  --disable-acl-support           Prevents the use of ACLs to control access to
953                                  Privoxy by IP address.],
954[if test $enableval = yes; then
955  AC_DEFINE(FEATURE_ACL)
956fi],
957AC_DEFINE(FEATURE_ACL))
958
959AC_ARG_ENABLE(trust-files,
960[  --disable-trust-files           Prevents the use of trust files.],
961[if test $enableval = yes; then
962  AC_DEFINE(FEATURE_TRUST)
963fi],
964AC_DEFINE(FEATURE_TRUST))
965
966AC_ARG_ENABLE(editor,
967[  --disable-editor                Prevents the use of the web-based actions file
968                                  editor and web-based temporary disable setting.],
969[if test $enableval = yes; then
970  AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS)
971fi],
972AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS))
973
974AC_ARG_ENABLE(no-gifs,
975[  --enable-no-gifs                Use politically correct PNG format instead of GIF
976                                  for built-in images. May not work with all browsers.],
977[if test $enableval = yes; then
978  AC_DEFINE(FEATURE_NO_GIFS)
979fi])
980
981AC_ARG_ENABLE(graceful-termination,
982[  --enable-graceful-termination   Allow to shutdown Privoxy through the webinterface.],
983[if test $enableval = yes; then
984  AC_DEFINE(FEATURE_GRACEFUL_TERMINATION)
985fi])
986
987AC_ARG_ENABLE(pcre-host-patterns,
988[  --enable-pcre-host-patterns     Allow to use PCRE syntax in host patterns by prefixing the pattern with
989                                  "PCRE-HOST-PATTERN:". You can use tools/url-pattern-translator.pl to
990                                  convert existing action files to use PCRE host patterns.],
991[if test $enableval = yes; then
992  AC_DEFINE(FEATURE_PCRE_HOST_PATTERNS)
993fi])
994
995AC_ARG_ENABLE(pcre-jit-compilation,
996[  --disable-pcre-jit-compilation     Don't let pcrs use pcre JIT compilation even if pcre supports it.],
997[if test $enableval != yes; then
998  AC_DEFINE(DISABLE_PCRE_JIT_COMPILATION)
999fi])
1000
1001AC_ARG_ENABLE(external-filters,
1002[  --enable-external-filters       Allow to filter content with scripts and programs. Experimental.],
1003[if test $enableval = yes; then
1004  AC_DEFINE(FEATURE_EXTERNAL_FILTERS,1,[Define to 1 to allow to filter content with scripts and programs.])
1005fi])
1006
1007AC_ARG_ENABLE(accept-filter,
1008[  --enable-accept-filter          Try to use accf_http(9) if supported.],
1009[if test $enableval = yes; then
1010  AC_DEFINE(FEATURE_ACCEPT_FILTER)
1011fi])
1012
1013AC_ARG_ENABLE(strptime-sanity-checks,
1014[  --enable-strptime-sanity-checks Only trust strptime() results if an additional strftime()/strptime()
1015                                  conversion doesn't change the result. Can be useful if strptime() is
1016                                  known or suspected to be broken.],
1017[if test $enableval = yes; then
1018  AC_DEFINE(FEATURE_STRPTIME_SANITY_CHECKS)
1019fi])
1020
1021AC_ARG_ENABLE(client-tags,
1022[  --disable-client-tags           Disable support for client-specific tags],
1023[ if test $enableval = "no"; then have_client_tags=no; fi ])
1024if test "${have_client_tags}" = "no"; then
1025  echo "Disabling support for client-specific tags."
1026  FEATURE_CLIENT_TAGS_ONLY="#"
1027else
1028  echo "Enabling support for client-specific tags."
1029  AC_DEFINE(FEATURE_CLIENT_TAGS,1,[Define to enable support for client-specific tags.])
1030  FEATURE_CLIENT_TAGS_ONLY=""
1031fi
1032AC_SUBST(FEATURE_CLIENT_TAGS_ONLY)
1033
1034FUZZ_ONLY="#"
1035AC_ARG_ENABLE(fuzz,
1036[  --enable-fuzz                   Enable code that makes fuzzing more convenient],
1037[if test $enableval = yes; then
1038  FUZZ_ONLY=""
1039  AC_DEFINE(FUZZ,1,[Define to make fuzzing more convenient.])
1040fi])
1041AC_SUBST(FUZZ_ONLY)
1042
1043dnl pcre/pcrs is needed for CGI anyway, so
1044dnl the choice is only between static and
1045dnl dynamic:
1046
1047AC_ARG_ENABLE(dynamic-pcre,
1048[  --disable-dynamic-pcre          Use the built-in, static pcre, even if libpcre is available],
1049[ if test $enableval = "no"; then have_pcre=no; fi ])
1050
1051dnl =================================================
1052dnl libpcrs is temporarily disabled,
1053dnl see comment above for the reason.
1054dnl =================================================
1055dnl AC_ARG_ENABLE(dynamic-pcrs,
1056dnl [  --disable-dynamic-pcrs          Use the built-in, static pcrs, even if libpcrs is available],
1057dnl [ if test $enableval = "no"; then have_pcrs=no; fi ])
1058
1059
1060dnl ====================================================
1061dnl This check is incomplete. For mingw32 zlib is found
1062dnl by configure, but not necessarily by the compiler.
1063dnl ====================================================
1064AC_ARG_ENABLE(zlib,
1065[  --disable-zlib                  Don't use zlib to decompress data before filtering.],
1066[enableval2=$enableval],
1067[enableval2=yes])
1068if test $enableval2 = yes; then
1069  AC_CHECK_LIB(z, zlibVersion, [have_zlib="yes"], [have_zlib="no"])
1070  if test $have_zlib = "yes"; then
1071    LIBS="$LIBS -lz"
1072    AC_DEFINE(FEATURE_ZLIB,1,[Define to 1 to use zlib to decompress data before filtering.])
1073  else
1074   AC_MSG_WARN([No zlib found.
1075   Privoxy will not be able to filter compressed content.
1076   This may become a fatal error in the future.])
1077  fi
1078fi
1079
1080AC_ARG_ENABLE(compression,
1081[  --enable-compression            Allow Privoxy to compress buffered content if the client supports it. Requires zlib support.],
1082[enableval2=$enableval],
1083[enableval2=no])
1084if test $enableval2 = yes; then
1085  if test $have_zlib = "yes"; then
1086    echo Enabling compression support.
1087    AC_DEFINE(FEATURE_COMPRESSION,1,[Define to 1 to use compression through the zlib library.])
1088  else
1089   AC_MSG_WARN([No zlib found. Privoxy will not be able to (re-)compressed buffered content.])
1090  fi
1091fi
1092
1093
1094# If we have libpcre and either we also have pcreposix or
1095# we don't need pcreposix, then link pcre dynamically; else
1096# build it and link statically
1097#
1098if test $have_pcre = "yes"; then
1099  echo "using libpcre"
1100  STATIC_PCRE_ONLY=#
1101  LIBS="$LIBS -lpcre -lpcreposix"
1102  if test "$use_static_pcre" = "yes"; then
1103    pcre_dyn=no
1104    AC_DEFINE(PCRE_STATIC,1,[Define to statically link to pcre library on Windows.])
1105#     see /usr/i686-w64-mingw32/sys-root/mingw/include/pcre.h line 54
1106#       #if defined(_WIN32) && !defined(PCRE_STATIC)
1107#       #  ifndef PCRE_EXP_DECL
1108#       #    define PCRE_EXP_DECL  extern __declspec(dllimport)
1109#       #  endif
1110#     If you want to statically link a program against a PCRE library in the form of
1111#     a non-dll .a file, you must define PCRE_STATIC before including pcre.h or
1112#     pcrecpp.h, otherwise the pcre_malloc() and pcre_free() exported functions will
1113#     be declared __declspec(dllimport), with unwanted results.
1114  else
1115    pcre_dyn=yes
1116    AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.])
1117  fi
1118else
1119  AC_MSG_ERROR(pcre library not detected.)
1120fi
1121
1122AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE)
1123
1124if test $have_pthread = "yes" -o $target_type = "mingw"; then
1125  echo Enabling connection-sharing support.
1126  AC_DEFINE(FEATURE_CONNECTION_SHARING)
1127fi
1128
1129dnl =================================================
1130dnl libpcrs is temporarily disabled,
1131dnl see comment above for the reason.
1132dnl =================================================
1133dnl # If we have libpcrs and pcre is linked dynamically
1134dnl # then also link pcrs dynamically, else build and link
1135dnl # pcrs statically
1136dnl
1137dnl if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
1138dnl  echo "using libpcrs"
1139dnl  STATIC_PCRS_ONLY=#
1140dnl  LIBS="$LIBS -lpcrs"
1141dnl else
1142dnl  echo "using built-in static pcrs"
1143  AC_DEFINE(STATIC_PCRS)
1144  STATIC_PCRS_ONLY=
1145dnl fi
1146
1147AC_SUBST(STATIC_PCRE_ONLY)
1148AC_SUBST(STATIC_PCRS_ONLY)
1149
1150FEATURE_HTTPS_INSPECTION_ONLY=#
1151dnl ========================================================
1152dnl check for mbedTLS which can be used for https inspection
1153dnl ========================================================
1154FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=#
1155OPT_MBEDTLS=no
1156AC_ARG_WITH(mbedtls,dnl
1157AC_HELP_STRING([--with-mbedtls], [Enable mbedTLS detection for https inspection.])
1158AC_HELP_STRING([--without-mbedtls], [Disable mbedTLS detection]),
1159  OPT_MBEDTLS=$withval)
1160
1161if test X"$OPT_MBEDTLS" != Xno; then
1162
1163  AC_CHECK_LIB(mbedtls, mbedtls_ssl_init,
1164   [
1165     AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1166     AC_DEFINE(FEATURE_HTTPS_INSPECTION_MBEDTLS, 1, [if mbedTLS is enabled])
1167     AC_SUBST(FEATURE_HTTPS_INSPECTION_MBEDTLS, [1])
1168     FEATURE_HTTPS_INSPECTION_MBEDTLS="yes"
1169   ], [], -lmbedx509 -lmbedcrypto)
1170
1171  if test "x$FEATURE_HTTPS_INSPECTION_MBEDTLS" = "xyes"; then
1172    AC_MSG_NOTICE([Detected mbedTLS. Enabling https inspection.])
1173
1174    LIBS="-lmbedtls -lmbedx509 -lmbedcrypto $LIBS"
1175    old_CFLAGS_nospecial="-Imbedtls/include $old_CFLAGS_nospecial"
1176
1177    FEATURE_HTTPS_INSPECTION_ONLY=
1178    FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS=
1179  fi
1180fi
1181AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_MBEDTLS)
1182
1183dnl =================================================================
1184dnl check for OpenSSL/LibreSSL which can be used for https inspection
1185dnl =================================================================
1186FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=#
1187OPT_OPENSSL=no
1188AC_ARG_WITH(openssl,dnl
1189AC_HELP_STRING([--with-openssl], [Enable OpenSSL/LibreSSL detection for https inspection.])
1190AC_HELP_STRING([--without-openssl], [Disable OpenSSL/LibreSSL detection]),
1191  OPT_OPENSSL=$withval)
1192
1193if test X"$OPT_OPENSSL" != Xno; then
1194   if test X"$OPT_MBEDTLS" != Xno; then
1195      AC_MSG_ERROR([OpenSSL and mbedTLS support can't be enabled at the same time])
1196   fi
1197
1198  if test "$PORTNAME" != "win32"; then
1199     AC_CHECK_LIB(crypto, CRYPTO_new_ex_data, [], [AC_MSG_ERROR([library 'crypto' is required for OpenSSL])])
1200     FOUND_SSL_LIB="no"
1201     AC_CHECK_LIB(ssl, OPENSSL_init_ssl, [FOUND_SSL_LIB="yes"])
1202     AC_CHECK_LIB(ssl, SSL_library_init, [FOUND_SSL_LIB="yes"])
1203     AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssl' is required for OpenSSL])])
1204  else
1205     AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])])
1206     FOUND_SSL_LIB="no"
1207     AC_SEARCH_LIBS(OPENSSL_init_ssl, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
1208     AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [FOUND_SSL_LIB="yes"])
1209     AS_IF([test "x$FOUND_SSL_LIB" = xno], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])])
1210  fi
1211
1212  if test "x$FOUND_SSL_LIB" = xyes; then
1213     AC_DEFINE(FEATURE_HTTPS_INSPECTION, 1, [if SSL/TLS is enabled])
1214     AC_DEFINE(FEATURE_HTTPS_INSPECTION_OPENSSL, 1, [if OpenSSL is enabled])
1215     AC_SUBST(FEATURE_HTTPS_INSPECTION_OPENSSL, [1])
1216     FEATURE_HTTPS_INSPECTION="yes"
1217     FEATURE_HTTPS_INSPECTION_OPENSSL="yes"
1218  fi
1219
1220  if test "x$FEATURE_HTTPS_INSPECTION_OPENSSL" = "xyes"; then
1221    AC_MSG_NOTICE([Detected OpenSSL. Enabling https inspection.])
1222    AC_MSG_WARN([If you intend to redistribute Privoxy, please make sure the "special exception" from section 3 of the GPLv2 applies.])
1223
1224    LIBS="$LIBS -lssl -lcrypto"
1225    old_CFLAGS_nospecial="$old_CFLAGS_nospecial"
1226
1227    FEATURE_HTTPS_INSPECTION_ONLY=
1228    FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL=
1229  fi
1230fi
1231AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY_OPENSSL)
1232
1233AC_SUBST(FEATURE_HTTPS_INSPECTION_ONLY)
1234
1235dnl ========================================================
1236dnl Check for Brotli which can be used for decompression
1237dnl ========================================================
1238WITH_BROTLI=no
1239AC_ARG_WITH(brotli,
1240AC_HELP_STRING([--with-brotli], [Enable Brotli detection])
1241AC_HELP_STRING([--without-brotli], [Disable Brotli detection]),
1242  WITH_BROTLI=$withval)
1243
1244if test X"$WITH_BROTLI" != Xno; then
1245
1246  LIBS="$LIBS -lbrotlidec"
1247  if test $target_type = mingw; then
1248    # XXX: why does just the mingw build need this???
1249    LIBS="$LIBS -lbrotlicommon -lbrotlienc"
1250  fi
1251
1252  AC_CHECK_LIB(brotlidec, BrotliDecoderDecompress)
1253
1254  AC_CHECK_HEADERS(brotli/decode.h,
1255    FEATURE_BROTLI=1
1256    AC_DEFINE(FEATURE_BROTLI, 1, [If Brotli is used for decompression])
1257    AC_SUBST(FEATURE_BROTLI, [1])
1258  )
1259fi
1260
1261
1262dnl =================================================================
1263dnl Final cleanup and output
1264dnl =================================================================
1265
1266dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it separately
1267dnl in the Makefile
1268CFLAGS=$old_CFLAGS_nospecial
1269AC_SUBST(SPECIAL_CFLAGS)
1270
1271AC_SUBST(PTHREAD_LIB)
1272
1273AC_OUTPUT(GNUmakefile doc/source/ldp.dsl)
1274