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