Make it more obvious that the --with-fdsetsize configure switch is pointless if poll...
[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.212 2017/05/25 11:14:53 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.212 $)
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  getcwd \
786  gethostbyaddr \
787  gethostbyaddr_r \
788  gethostbyname \
789  gethostbyname_r \
790  gettimeofday \
791  inet_ntoa \
792  memchr \
793  memmove \
794  memset \
795  poll \
796  putenv \
797  random \
798  regcomp \
799  select \
800  setlocale \
801  shutdown \
802  snprintf \
803  socket \
804  strchr \
805  strdup \
806  strerror \
807  strftime \
808  strlcat \
809  strlcpy \
810  strptime \
811  strtoul \
812  timegm \
813  tzset \
814 ])
815
816 dnl Checks for RFC 2553 resolver and socket functions
817 AC_ARG_ENABLE(ipv6-support,
818 [  --disable-ipv6-support          Disable IPv6 support and other RFC-2554-related improvements],
819 [if test $enableval = yes; then
820   enable_ipv6_support=yes
821 fi], enable_ipv6_support=yes)
822
823 if test $enable_ipv6_support != yes; then
824   AC_MSG_WARN([Skipping checks for IPv6 support and other RFC-2554-related improvements.
825     Due to lock contention, this may result in slower DNS resolution for IPv4 setups, too.])
826 elif test $target_type = mingw; then
827   AC_CHECK_LIB(ws2_32, main)
828
829   AC_MSG_CHECKING(getaddrinfo in ws2_32)
830   AC_TRY_LINK(
831     [
832       #include<winsock2.h>
833       #include<windows.h>
834       #include<ws2tcpip.h>
835     ],
836     [getaddrinfo(0,0,0,0)],
837     have_ws2_32_getaddrinfo=yes
838   )
839   AC_MSG_RESULT($have_ws2_32_getaddrinfo)
840
841   AC_MSG_CHECKING(getnameinfo in ws2_32)
842   AC_TRY_LINK(
843     [
844       #include<winsock2.h>
845       #include<windows.h>
846       #include<ws2tcpip.h>
847     ],
848     [getnameinfo(0,0,0,0,0,0,0)],
849     have_ws2_32_getnameinfo=yes
850   )
851   AC_MSG_RESULT($have_ws2_32_getnameinfo)
852
853   if test $have_ws2_32_getaddrinfo ; then
854     if test $have_ws2_32_getnameinfo ; then
855       AC_DEFINE([HAVE_RFC2553], [1],
856         [Define if RFC 2553 resolver functions like getaddrinfo(3) and
857          getnameinfo(3) present])
858     fi
859   fi
860 else
861   AC_CHECK_FUNC([getaddrinfo],
862      [AC_CHECK_FUNC([getnameinfo],
863         [AC_DEFINE([HAVE_RFC2553], [1],
864            [Define if RFC 2553 resolver functions like getaddrinfo(3) and
865             getnameinfo(3) present])
866         ])
867   ])
868 fi
869
870 dnl =================================================================
871 dnl Checks for libraries.
872 dnl =================================================================
873 dnl Note: Some systems may have the library but not the system header
874 dnl       file, so we must check for both.
875 dnl       Also check for correct version
876 AC_CHECK_LIB(pcre, pcre_compile, [
877    AC_CHECK_HEADER(pcre.h, [
878       AC_EGREP_HEADER(pcre_fullinfo, pcre.h, [have_pcre=yes], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no])
879    ], [
880       AC_CHECK_HEADER(pcre/pcre.h, [
881          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])
882       ], [have_pcre=no])
883    ])
884 ], [have_pcre=no])
885
886 AC_CHECK_LIB(pcreposix, regcomp, [
887    AC_CHECK_HEADER(pcreposix.h, [
888       AC_EGREP_HEADER(pcreposix_regerror, pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes])
889    ], [
890       AC_CHECK_HEADER(pcre/pcreposix.h, [
891          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)])
892       ], [have_pcreposix=no])
893    ])
894 ], [have_pcreposix=no], -lpcre)
895
896 dnl ================================================================
897 dnl libpcrs is temporarily disabled.
898 dnl
899 dnl Privoxy's own pcrs version fixes some problems that
900 dnl are present in libpcrs 0.3, the last pcrs release we
901 dnl know of, and as libpcrs seems to be currently unmaintained
902 dnl we can't send these fixes upstream.
903 dnl ================================================================
904 dnl
905 dnl AC_CHECK_LIB(pcrs, pcrs_compile, [AC_CHECK_HEADER(pcrs.h, [have_pcrs=yes], [have_pcrs=no])], [have_pcrs=no], -lpcre)
906
907 dnl =================================================================
908 dnl Always defined
909 dnl =================================================================
910
911 AC_DEFINE(__MT__)
912
913 dnl =================================================================
914 dnl Features
915 dnl =================================================================
916
917 AC_ARG_ENABLE(toggle,
918 [  --disable-toggle                Don't support temporary disable],
919 [if test $enableval = yes; then
920   AC_DEFINE(FEATURE_TOGGLE)
921 fi],AC_DEFINE(FEATURE_TOGGLE))
922
923 AC_ARG_ENABLE(force,
924 [  --disable-force                 Don't allow single-page disable],
925 [if test $enableval = yes; then
926   AC_DEFINE(FEATURE_FORCE_LOAD)
927 fi],AC_DEFINE(FEATURE_FORCE_LOAD))
928
929 AC_ARG_ENABLE(fast-redirects,
930 [  --disable-fast-redirects        Don't support fast redirects],
931 [if test $enableval = yes; then
932   AC_DEFINE(FEATURE_FAST_REDIRECTS)
933 fi], AC_DEFINE(FEATURE_FAST_REDIRECTS))
934
935 AC_ARG_ENABLE(stats,
936 [  --disable-stats                 Don't keep statistics],
937 [if test $enableval = yes; then
938   AC_DEFINE(FEATURE_STATISTICS)
939 fi],AC_DEFINE(FEATURE_STATISTICS))
940
941 AC_ARG_ENABLE(image-blocking,
942 [  --disable-image-blocking        Don't try to figure out whether a request is
943                                   for an image or HTML - assume HTML.],
944 [if test $enableval = yes; then
945   AC_DEFINE(FEATURE_IMAGE_BLOCKING)
946 fi],
947 AC_DEFINE(FEATURE_IMAGE_BLOCKING))
948
949 AC_ARG_ENABLE(acl-support,
950 [  --disable-acl-support           Prevents the use of ACLs to control access to
951                                   Privoxy by IP address.],
952 [if test $enableval = yes; then
953   AC_DEFINE(FEATURE_ACL)
954 fi],
955 AC_DEFINE(FEATURE_ACL))
956
957 AC_ARG_ENABLE(trust-files,
958 [  --disable-trust-files           Prevents the use of trust files.],
959 [if test $enableval = yes; then
960   AC_DEFINE(FEATURE_TRUST)
961 fi],
962 AC_DEFINE(FEATURE_TRUST))
963
964 AC_ARG_ENABLE(editor,
965 [  --disable-editor                Prevents the use of the web-based actions file
966                                   editor and web-based temporary disable setting.],
967 [if test $enableval = yes; then
968   AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS)
969 fi],
970 AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS))
971
972 AC_ARG_ENABLE(no-gifs,
973 [  --enable-no-gifs                Use politically correct PNG format instead of GIF
974                                   for built-in images. May not work with all browsers.],
975 [if test $enableval = yes; then
976   AC_DEFINE(FEATURE_NO_GIFS)
977 fi])
978
979 AC_ARG_ENABLE(graceful-termination,
980 [  --enable-graceful-termination   Allow to shutdown Privoxy through the webinterface.],
981 [if test $enableval = yes; then
982   AC_DEFINE(FEATURE_GRACEFUL_TERMINATION)
983 fi])
984
985 AC_ARG_ENABLE(extended-host-patterns,
986 [  --enable-extended-host-patterns Enable and require PCRE syntax in host patterns. This feature hasn't
987                                   been announced yet and it's not clear if it's a good idea. It's expected
988                                   to work, but undocumented. You should only enable it if you know what
989                                   PCRE is and are sure that you need it for your host patterns. You can
990                                   use tools/url-pattern-translator.pl to convert existing action files to
991                                   use PCRE host patterns. Please don't enable this option when creating
992                                   packages for others that may not be expecting it.],
993 [if test $enableval = yes; then
994   AC_DEFINE(FEATURE_EXTENDED_HOST_PATTERNS)
995 fi])
996
997 AC_ARG_ENABLE(external-filters,
998 [  --enable-external-filters       Allow to filter content with scripts and programs. Experimental.],
999 [if test $enableval = yes; then
1000   AC_DEFINE(FEATURE_EXTERNAL_FILTERS,1,[Define to 1 to allow to filter content with scripts and programs.])
1001 fi])
1002
1003 AC_ARG_ENABLE(accept-filter,
1004 [  --enable-accept-filter          Try to use accf_http(9) if supported.],
1005 [if test $enableval = yes; then
1006   AC_DEFINE(FEATURE_ACCEPT_FILTER)
1007 fi])
1008
1009 AC_ARG_ENABLE(strptime-sanity-checks,
1010 [  --enable-strptime-sanity-checks Only trust strptime() results if an additional strftime()/strptime()
1011                                   conversion doesn't change the result. Can be useful if strptime() is
1012                                   known or suspected to be broken.],
1013 [if test $enableval = yes; then
1014   AC_DEFINE(FEATURE_STRPTIME_SANITY_CHECKS)
1015 fi])
1016
1017 AC_ARG_ENABLE(client-tags,
1018 [  --disable-client-tags           Disable support for client-specific tags],
1019 [ if test $enableval = "no"; then have_client_tags=no; fi ])
1020 if test "${have_client_tags}" = "no"; then
1021   echo "Disabling support for client-specific tags."
1022   FEATURE_CLIENT_TAGS_ONLY="#"
1023 else
1024   echo "Enabling support for client-specific tags."
1025   AC_DEFINE(FEATURE_CLIENT_TAGS,1,[Define to enable support for client-specific tags.])
1026   FEATURE_CLIENT_TAGS_ONLY=""
1027 fi
1028 AC_SUBST(FEATURE_CLIENT_TAGS_ONLY)
1029
1030 FUZZ_ONLY="#"
1031 AC_ARG_ENABLE(fuzz,
1032 [  --enable-fuzz                Enable code that makes fuzzing more convenient],
1033 [if test $enableval = yes; then
1034   FUZZ_ONLY=""
1035   AC_DEFINE(FUZZ,1,[Define to make fuzzing more convenient.])
1036 fi])
1037 AC_SUBST(FUZZ_ONLY)
1038
1039 dnl pcre/pcrs is needed for CGI anyway, so
1040 dnl the choice is only between static and
1041 dnl dynamic:
1042
1043 AC_ARG_ENABLE(dynamic-pcre,
1044 [  --disable-dynamic-pcre          Use the built-in, static pcre, even if libpcre is available],
1045 [ if test $enableval = "no"; then have_pcre=no; fi ])
1046
1047 dnl =================================================
1048 dnl libpcrs is temporarily disabled,
1049 dnl see comment above for the reason.
1050 dnl =================================================
1051 dnl AC_ARG_ENABLE(dynamic-pcrs,
1052 dnl [  --disable-dynamic-pcrs          Use the built-in, static pcrs, even if libpcrs is available],
1053 dnl [ if test $enableval = "no"; then have_pcrs=no; fi ])
1054
1055
1056 dnl ====================================================
1057 dnl This check is incomplete. For mingw32 zlib is found
1058 dnl by configure, but not necessarily by the compiler.
1059 dnl ====================================================
1060 AC_ARG_ENABLE(zlib,
1061 [  --disable-zlib                  Don't use zlib to decompress data before filtering.],
1062 [enableval2=$enableval],
1063 [enableval2=yes])
1064 if test $enableval2 = yes; then
1065   AC_CHECK_LIB(z, zlibVersion, [have_zlib="yes"], [have_zlib="no"])
1066   if test $have_zlib = "yes"; then
1067     LIBS="$LIBS -lz"
1068     AC_DEFINE(FEATURE_ZLIB,1,[Define to 1 to use zlib to decompress data before filtering.])
1069   else
1070    AC_MSG_WARN([No zlib found.
1071    Privoxy will not be able to filter compressed content.
1072    This may become a fatal error in the future.])
1073   fi
1074 fi
1075
1076 AC_ARG_ENABLE(compression,
1077 [  --enable-compression            Allow Privoxy to compress buffered content if the client supports it. Requires zlib support.],
1078 [enableval2=$enableval],
1079 [enableval2=no])
1080 if test $enableval2 = yes; then
1081   if test $have_zlib = "yes"; then
1082     echo Enabling compression support.
1083     AC_DEFINE(FEATURE_COMPRESSION,1,[Define to 1 to use compression through the zlib library.])
1084   else
1085    AC_MSG_WARN([No zlib found. Privoxy will not be able to (re-)compressed buffered content.])
1086   fi
1087 fi
1088
1089
1090 # If we have libpcre and either we also have pcreposix or
1091 # we don't need pcreposix, then link pcre dynamically; else
1092 # build it and link statically
1093 #
1094 if test $have_pcre = "yes"; then
1095   echo "using libpcre"
1096   pcre_dyn=yes
1097   AC_DEFINE(FEATURE_DYNAMIC_PCRE,1,[Define to dynamically link to pcre.])
1098   STATIC_PCRE_ONLY=#
1099   LIBS="$LIBS -lpcre -lpcreposix"
1100 else
1101   AC_MSG_WARN([You are using the static PCRE code which is out of date and scheduled for removal, for details see:
1102     http://sourceforge.net/mailarchive/forum.php?thread_name=20080511195555.2dc6cfdc%40fabiankeil.de&forum_name=ijbswa-developers])
1103   pcre_dyn=no
1104   # STATIC_PCRE is a name pcre needs to statically link on Windows.
1105   # Privoxy itself no longer uses it.
1106   AC_DEFINE(STATIC_PCRE,1,[Define to statically link to internal outdated pcre on Windows.])
1107   STATIC_PCRE_ONLY=
1108 fi
1109
1110 AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE)
1111
1112 if test $have_pthread = "yes" -o $target_type = "mingw"; then
1113   echo Enabling connection-sharing support.
1114   AC_DEFINE(FEATURE_CONNECTION_SHARING)
1115 fi
1116
1117 dnl =================================================
1118 dnl libpcrs is temporarily disabled,
1119 dnl see comment above for the reason.
1120 dnl =================================================
1121 dnl # If we have libpcrs and pcre is linked dynamically
1122 dnl # then also link pcrs dynamically, else build and link
1123 dnl # pcrs statically
1124 dnl
1125 dnl if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
1126 dnl  echo "using libpcrs"
1127 dnl  STATIC_PCRS_ONLY=#
1128 dnl  LIBS="$LIBS -lpcrs"
1129 dnl else
1130 dnl  echo "using built-in static pcrs"
1131   AC_DEFINE(STATIC_PCRS)
1132   STATIC_PCRS_ONLY=
1133 dnl fi
1134
1135 AC_SUBST(STATIC_PCRE_ONLY)
1136 AC_SUBST(STATIC_PCRS_ONLY)
1137
1138 dnl =================================================================
1139 dnl Final cleanup and output
1140 dnl =================================================================
1141
1142 dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it separately
1143 dnl in the Makefile
1144 CFLAGS=$old_CFLAGS_nospecial
1145 AC_SUBST(SPECIAL_CFLAGS)
1146
1147 AC_SUBST(PTHREAD_LIB)
1148
1149 AC_OUTPUT(GNUmakefile doc/source/ldp.dsl)