Add a more verbose description for the --enable-extended-host-patterns option.
[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.139 2009/10/24 11:11:33 fabiankeil Exp $
4 dnl 
5 dnl Written by and Copyright (C) 2001-2009 the
6 dnl Privoxy team. http://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.139 $)
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=16
82 CODE_STATUS="UNRELEASED"
83
84 dnl CODE_STATUS can be "alpha", "beta", or "stable", and will be
85 dnl used for CGI output. Set version to 0.0.0 and status to "UNRELEASED"
86 dnl whenever CVS in a stable branch differs from the last release.
87
88 dnl =================================================================
89 dnl Substitute the version numbers
90 dnl =================================================================
91
92 AC_SUBST(VERSION_MAJOR)
93 AC_SUBST(VERSION_MINOR)
94 AC_SUBST(VERSION_POINT)
95 AC_SUBST(CODE_STATUS)
96
97 dnl
98 AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR})
99 AC_DEFINE_UNQUOTED(VERSION_MINOR,${VERSION_MINOR})
100 AC_DEFINE_UNQUOTED(VERSION_POINT,${VERSION_POINT})
101 AC_DEFINE_UNQUOTED(VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_POINT}")
102 AC_DEFINE_UNQUOTED(CODE_STATUS,"${CODE_STATUS}")
103
104 dnl =================================================================
105 dnl Checks for programs needed to build.
106 dnl =================================================================
107
108 dnl Keep AC_PROG_CC from setting its own defaults:
109 if test "X$CFLAGS" = "X"; then
110    CFLAGS=" "
111 fi
112
113 AC_PROG_CC
114 AC_PROG_CPP
115 AC_PROG_INSTALL
116 AC_PROG_LN_S
117 AC_PROG_MAKE_SET
118 AC_PROG_AWK
119
120 AC_CHECK_PROG(GDB,gdb,yes,no)
121 AC_PATH_PROG(BGROUPS,groups,no,$PATH:/bin:/usr/bin:/usr/local/bin)
122 AC_PATH_PROG(ID,id,no,$PATH:/bin:/usr/bin:/usr/local/bin)
123 AC_SUBST(ID)
124 AC_SUBST(BGROUPS)
125
126 dnl =================================================================
127 dnl debug, gcc and gdb support 
128 dnl =================================================================
129
130 AC_ARG_WITH(debug,
131         [  --with-debug            Enable debug mode],
132         [
133                 if test "x$withval" != "xno" ; then
134                     if test $ac_cv_prog_cc_g = yes; then
135                       if test "$GCC" = yes; then
136                         if test "$GDB"; then
137                           CFLAGS="$CFLAGS -ggdb"
138                         else
139                           CFLAGS="$CFLAGS -g"
140                         fi
141                         CFLAGS="$CFLAGS -Wshadow  -Wconversion"
142                       else
143                         CFLAGS="$CFLAGS -g"
144                       fi
145                    fi
146                 fi
147         ],
148         [
149             if test "X$CFLAGS" = "X "; then # if CFLAGS were unset (see above)
150               if test "$GCC" = yes; then
151                 CFLAGS="-O2"
152               fi
153             fi
154         ]
155 )
156
157 dnl =================================================================
158 dnl Check for user and group validity
159 dnl =================================================================
160
161
162 if test "$EMXOS2" = yes; then
163   echo "Skipping user and group validity stuff.";
164
165 else
166
167   $ID privoxy >/dev/null 2>/dev/null
168   if test $? -ne 0 ; then
169    AC_MSG_WARN(There is no user 'privoxy' on this system)
170   fi
171   AC_MSG_CHECKING([for user])
172   AC_ARG_WITH(user,
173         [  --with-user=privoxy          Set user under which privoxy will run],
174         [
175                 if test "x$withval" != "xyes"; then
176                   if test $ID = no ; then
177                     AC_MSG_ERROR(There is no 'id' program on this system)
178                   else
179                     AC_MSG_RESULT($with_user)
180                     $ID $with_user 2>/dev/null >/dev/null
181                     if test $? -eq 0 ; then
182                       USER=$with_user;
183                     else
184                       AC_MSG_ERROR(There is no user '$with_user' on this system)
185                     fi
186                   fi
187                   else
188                    AC_MSG_ERROR(We need a user if you give me this parameter)
189                 fi
190         ],
191         [
192           if test $ID = no ; then
193             AC_MSG_ERROR(There is no 'id' programm on this system)
194           else
195             AC_MSG_RESULT(none specified)
196             USER=$with_user
197           fi
198         ]
199   )
200   AC_SUBST(USER)
201
202   AC_MSG_CHECKING([for group])
203   AC_ARG_WITH(group,
204         [  --with-group=privoxy         Set group for privoxy],
205         [ 
206                 if test "x$withval" != "xyes"; then
207                   if test $BGROUPS = no ; then
208                     AC_MSG_ERROR(There is no 'groups' program on this system)
209                   else
210                     AC_MSG_RESULT($with_group)
211                     $BGROUPS $USER >/dev/null
212                     if test $? -eq 0 ; then
213                     # FIXME: this fails if valid group, but not first group
214                     # listed.
215                       if test "$with_group" != "`$BGROUPS $USER | sed 's/.*: //' 2>/dev/null |$AWK '{print $1}'`" ; then
216                         AC_MSG_ERROR(The given value '$withval' does not match group entry)
217                       else
218                         GROUP=$with_group;
219                       fi
220                     else
221                       AC_MSG_ERROR(There is no group entry for user '$USER')
222                     fi
223                   fi
224                 else
225                    AC_MSG_ERROR(We need a group if you give me this parameter)
226                 fi
227         ],
228         [
229           if test $BGROUPS = no ; then
230             AC_MSG_ERROR(There is no 'groups' programm on this system)
231           else
232             AC_MSG_RESULT(none specified)
233             GROUP=$with_group;
234           fi
235         ]
236   )
237   AC_SUBST(GROUP)
238
239 fi
240
241 dnl =================================================================
242 dnl additional gcc flags
243 dnl =================================================================
244 dnl 
245 if test "$GCC"; then
246   if test "$host" != "powerpc-unknown-amigaos"; then
247     CFLAGS="-pipe $CFLAGS"
248   fi
249 fi
250
251
252 dnl =================================================================
253 dnl Build type
254 dnl =================================================================
255 dnl
256 dnl Must do this first.
257 dnl
258 dnl Reason: This sets CFLAGS in order to switch the Cygwin compiler
259 dnl into Cygwin or MinGW32 modes.  Depending on the mode selected,
260 dnl the compiler will use completely different sets of library
261 dnl and include files.
262 dnl 
263 dnl =================================================================
264
265 AC_MINGW32
266 AC_CYGWIN
267
268 if test "$MINGW32" = "yes"; then
269   target_type=mingw
270 else
271   if test "$CYGWIN" = "yes"; then
272     target_type=cygwin
273   else
274     target_type=unix
275   fi
276 fi
277
278 if test $dodk = auto; then
279         dodk=no
280         if test $target_type = unix; then
281                 case "$host_os" in
282                 linux* | gnu*)
283                         dodk=yes
284                 ;;
285                 esac
286         fi
287 fi
288
289 dnl Decide what to do based on target_type
290 dnl Note: PTHREAD_LIB is always set, even if pthread is disabled.
291 dnl This is because we don't know yet whether pthread is enabled.
292
293 AC_ARG_ENABLE(mingw32,
294 [  --enable-mingw32                Use mingw32 for a Windows GUI],
295 [if test $enableval = yes; then
296   target_type=mingw
297 fi])
298
299 if test $target_type = mingw; then
300   WIN_ONLY=
301   SPECIAL_CFLAGS="-mwindows -mno-cygwin"
302   PTHREAD_LIB=-lpthreadGC
303   echo "Using mingw32 (Win32 GUI)"
304 else
305   WIN_ONLY=#
306   if test $target_type = cygwin; then
307     SPECIAL_CFLAGS="-mno-win32"
308     PTHREAD_LIB=
309     echo "Using Cygnus (Win32 command line)"
310   else
311     SPECIAL_CFLAGS=
312     PTHREAD_LIB=-lpthread
313   fi
314 fi
315 AC_SUBST(WIN_ONLY)
316
317 dnl Checking which text html browser we have avaliable
318 if test $dodk != no; then
319         AC_CHECK_PROGS(WDUMP,w3m lynx links,false)
320         if test "$WDUMP" = false; then
321                 AC_MSG_WARN(You need some kind of text browser to build documentation \(w3m, lynx and links are supported\))
322         fi
323         if test $DB2HTML = false; then
324                 dnl We need to clean the variable, otherwise AC_CHECK_PROGS
325                 dnl will fail   
326                 DB2HTML=""
327                 AC_CHECK_PROGS(DB2HTML,db2html docbook2html,false)
328         fi
329 fi
330 AC_SUBST(WDUMP)
331 AC_SUBST(DB2HTML)
332
333 dnl If we use rpm, we need to check where %_topdir is
334 AC_CHECK_PROGS(RPMBIN,rpm,false)
335 if test $RPMBIN != false; then
336                 RPM_BASE=`rpm --eval "%{_topdir}"`
337                 if test "$RPM_BASE" = ""; then
338                         RPM_BASE=/usr/src/redhat
339                 fi
340 fi
341 AC_SUBST(RPM_BASE)
342
343 dnl Check for jade, so we can build the documentation
344 AC_CHECK_PROGS(JADEBIN,jade openjade,false)
345 AC_SUBST(JADEBIN)
346
347 dnl Check for man2html for docs.
348 AC_CHECK_PROGS(MAN2HTML,man2html,false)
349 AC_SUBST(MAN2HTML)
350
351 dnl Set doc status flag for conditional content inclusions
352 DOC_STATUS=p-not-stable
353 if  test $CODE_STATUS = stable; then
354      DOC_STATUS="p-stable"
355 fi
356 AC_SUBST(DOC_STATUS)
357
358 dnl Checking for the docbook.dsl stylesheet file
359 dnl It is still not portable (directory slash)
360 JADECAT=""
361 if test $dodk = yes; then
362   if test $DKPREFIX = none; then
363     for i in /usr/share/sgml/docbook/dsssl-stylesheets \
364              /usr/share/sgml/docbkdsl /usr/share/sgml/docbook-dsssl \
365              /usr/local/share/sgml/docbook/dsssl/modular \
366              /usr/share/sgml/docbook/stylesheet/dsssl/modular/ \
367              ; do
368 dnl  echo -n does not fly with /bin/sh.
369 dnl      echo -n "checking for $i/html/docbook.dsl..."
370       AC_MSG_CHECKING([for $i])
371       if test -f $i/html/docbook.dsl; then
372         echo "yes"
373         DKPREFIX=$i
374         break
375       else
376         echo "no"
377       fi
378     done
379 # where are the catalogs?
380     for i in /usr/share/sgml/CATALOG.docbk30 \
381              /usr/share/sgml/CATALOG.docbk31 \
382              /usr/share/sgml/CATALOG.docbk31 \
383              /usr/local/share/sgml/docbook/3.0/docbook.cat \
384              /usr/local/share/sgml/docbook/3.1/docbook.cat \
385              /usr/share/sgml/docbook/dtd/3.1/docbook.cat \
386              ; do
387 dnl     echo -n "checking for $i..."
388       AC_MSG_CHECKING([for $i])
389       if test -f $i; then
390         echo "yes"
391         JADECAT="$JADECAT -c $i"
392       else
393         echo "no"
394       fi
395     done
396   fi
397 fi
398 AC_SUBST(JADECAT)
399 AC_SUBST(DKPREFIX)
400
401 dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
402 old_CFLAGS_nospecial=$CFLAGS
403 CFLAGS="$CFLAGS $SPECIAL_CFLAGS"
404
405 # Hack to force AutoConf to use the CFLAGS we just set
406 dnl Warning: This may break with a future version of Autoconf
407 dnl          Tested with autoconf 2.13
408 ac_cpp='$CPP $CPPFLAGS $SPECIAL_CFLAGS'
409 ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
410 ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
411
412
413 dnl =================================================================
414 dnl Thread support
415 dnl =================================================================
416
417 AC_CHECK_HEADER(pthread.h, [have_pthread=yes], [have_pthread=no])
418
419 AC_ARG_ENABLE(pthread,
420 [  --disable-pthread               Don't use POSIX threads (pthreads)],
421 [if test $enableval = no; then
422   # Disable pthreads
423   if test $have_pthread = yes; then
424      AC_MSG_WARN([pthreads seem to be available but you are using --disable-pthread.]) 
425      AC_MSG_WARN([This is almost always a mistake and can render Privoxy unacceptable slow.])
426   fi
427   have_pthread=no
428 fi])
429
430 if test $have_pthread = yes; then
431   PTHREAD_ONLY=
432   AC_DEFINE(FEATURE_PTHREAD)
433   echo Using POSIX threads
434   if test "$GCC" = "yes"; then
435     # Set a GCC specific switch:
436     if test "$target_type" = "unix"; then
437       ac_jgf_save_CFLAGS=$CFLAGS
438       CFLAGS="$CFLAGS -pthread"
439       AC_TRY_LINK([#include <pthread.h>],
440         [void *p = pthread_create;],
441         [
442           # This compiler switch makes GCC on Linux thread-safe
443           # However, it's not supported on most other OS.
444           PTHREAD_LIB=
445           SPECIAL_CFLAGS="-pthread"
446         ])
447       CFLAGS=$ac_jgf_save_CFLAGS
448     fi
449   fi
450 else
451   PTHREAD_ONLY=#
452   echo Using native threads
453 fi
454
455 AC_SUBST(PTHREAD_ONLY)
456
457 dnl =================================================================
458 dnl Support for thread-safe versions of gethostbyaddr, gethostbyname,
459 dnl gmtime and localtime
460 dnl =================================================================
461
462 dnl Next line needed to find the gethost*_r functions on Solaris
463 AC_CHECK_LIB(nsl, gethostbyname)
464
465 AC_CHECK_FUNC(gethostbyaddr_r, [
466   AC_MSG_CHECKING([signature of gethostbyaddr_r])
467   AC_TRY_COMPILE([
468 #   include <netdb.h>
469   ], [
470     struct hostent *h, *hp;
471     char *a, *b;
472     int l, bl, t, e;
473     (void) gethostbyaddr_r(a, l, t, h, b, bl, &hp, &e)
474   ], [
475     AC_DEFINE(HAVE_GETHOSTBYADDR_R_8_ARGS)
476     AC_MSG_RESULT([8 args])
477   ], [
478     AC_TRY_COMPILE([
479 #     include <netdb.h>
480     ], [
481       struct hostent *h;
482       char *a, *b;
483       int l, bl, t, e;
484       (void) gethostbyaddr_r(a, l, t, h, b, bl, &e)
485     ], [
486       AC_DEFINE(HAVE_GETHOSTBYADDR_R_7_ARGS)
487       AC_MSG_RESULT([7 args])
488     ], [
489       AC_TRY_COMPILE([
490 #       include <netdb.h>
491       ], [
492         struct hostent_data *d;
493         struct hostent *h;
494         char a,
495         int l, t;
496         (void) gethostbyaddr_r(a, l, t, h, d)
497       ], [
498         AC_DEFINE(HAVE_GETHOSTBYADDR_R_5_ARGS)
499         AC_MSG_RESULT([5 args])
500       ], [
501         AC_MSG_RESULT(unrecognised)
502       ])
503     ])
504   ])
505 ], [
506   AC_MSG_RESULT(no)
507 ])
508
509 AC_CHECK_FUNC(gethostbyname_r, [
510   AC_MSG_CHECKING([signature of gethostbyname_r])
511   AC_TRY_COMPILE([
512 #   include <netdb.h>
513   ], [
514     struct hostent *h, *r;
515     char *n, *b;
516     int bl, e;
517     (void) gethostbyname_r(n, h, b, bl, &r, &e)
518   ], [
519     AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARGS)
520     AC_MSG_RESULT([6 args])
521   ], [
522     AC_TRY_COMPILE([
523 #     include <netdb.h>
524     ], [
525       struct hostent *h;
526       char *n, *b;
527       int bl, e;
528       (void) gethostbyname_r(n, h, b, bl, &e)
529     ], [
530       AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARGS)
531       AC_MSG_RESULT([5 args])
532     ], [
533       AC_TRY_COMPILE([
534 #       include <netdb.h>
535       ], [
536         struct hostent_data *d;
537         struct hostent *h;
538         char *n,
539         (void) gethostbyname_r(n, h, d)
540       ], [
541         AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARGS)
542         AC_MSG_RESULT([3 args])
543       ], [
544         AC_MSG_RESULT(unrecognised)
545       ])
546     ])
547   ])
548 ], [
549   AC_MSG_RESULT(no)
550 ])
551
552 AC_CHECK_FUNC(gmtime_r, [
553   AC_MSG_CHECKING([signature of gmtime_r])
554   AC_TRY_COMPILE([
555 #   include <time.h>
556   ], [
557     struct time *t;
558     struct tm *tm;
559     (void) gmtime_r(t, tm)
560   ], [
561     AC_MSG_RESULT(ok)
562     AC_DEFINE(HAVE_GMTIME_R)
563   ], [
564     AC_MSG_RESULT(unrecognised)
565   ])
566 ], [
567   AC_MSG_RESULT(no)
568 ])
569
570 AC_CHECK_FUNC(localtime_r, [
571   AC_MSG_CHECKING([signature of localtime_r])
572   AC_TRY_COMPILE([
573 #   include <time.h>
574   ], [
575     struct time *t;
576     struct tm *tm;
577     (void) localtime_r(t, tm)
578   ], [
579     AC_MSG_RESULT(ok)
580     AC_DEFINE(HAVE_LOCALTIME_R)
581   ], [
582     AC_MSG_RESULT(unrecognised)
583   ])
584 ], [
585   AC_MSG_RESULT(no)
586 ])
587
588 dnl =================================================================
589 dnl Solaris specific
590 dnl FIXME: Not tested on Solaris yet...
591 dnl ISFIXED: Have tested it on Solaris, but there are other ways to
592 dnl     make these checks generic, e.g.:
593 dnl AC_CHECK_FUNC(getsockopt, , AC_CHECK_LIB(socket, getsockopt))
594 dnl     (Moritz Barsnick <moritz@barsnick.net>)
595 dnl =================================================================
596
597
598 SOCKET_LIB=
599
600 case "$host" in
601 *-solaris*) SOCKET_LIB="-lsocket -lnsl"
602             AC_DEFINE(__EXTENSIONS__)
603             if test "$GCC" = "yes"; then
604               # Set a GCC specific switch:
605               # This compiler switch makes Solaris thread-safe
606               PTHREAD_LIB=
607               SPECIAL_CFLAGS="-pthreads"
608             else
609               # What do we do without GCC? Guess this:
610               SPECIAL_CFLAGS="-D_REENTRANT"
611             fi
612 ;;
613 esac
614
615 AC_SUBST(SOCKET_LIB)
616
617 dnl =================================================================
618 dnl Solaris problem, and others perhaps (socklen_t is undefined)
619 dnl =================================================================
620
621 AC_MSG_CHECKING([for socklen_t])
622 AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]),
623         AC_MSG_RESULT([no])
624         AC_DEFINE(socklen_t,int,
625                 [ Define to 'int' if <sys/socket.h> doesn't have it. ]))
626
627
628 dnl =================================================================
629 dnl OS/2 specific
630 dnl =================================================================
631
632 case "$host" in
633 *-os2-emx*) SOCKET_LIB=-lsocket
634 ;;
635 esac
636
637 AC_SUBST(SOCKET_LIB)
638
639 dnl =================================================================
640 dnl Mac OSX specific
641 dnl =================================================================
642     
643 case "$host" in
644 *-apple-darwin*) SPECIAL_CFLAGS="-Dunix"
645 ;;  
646 esac
647
648 dnl =================================================================
649 dnl OpenBSD specific
650 dnl =================================================================
651
652 case "$host" in
653 *-openbsd*) SPECIAL_CFLAGS="$SPECIAL_CFLAGS -Dunix"
654 ;;
655 esac
656
657 dnl =================================================================
658 dnl AmigaOS specific
659 dnl =================================================================
660
661 AMIGAOS_ONLY=#
662
663 case "$host" in
664 *-amigaos) AMIGAOS_ONLY=
665 ;;
666 esac
667
668 AC_SUBST(AMIGAOS_ONLY)
669
670 dnl =================================================================
671 dnl Check for standard compiler stuff
672 dnl =================================================================
673
674 AC_EXEEXT
675 AC_OBJEXT
676 AC_HEADER_STDC
677 AC_HEADER_DIRENT
678 AC_C_CONST
679 AC_TYPE_SIZE_T
680 AC_TYPE_PID_T
681 AC_HEADER_TIME
682 AC_STRUCT_TM
683 AC_CHECK_SIZEOF(int, 4)
684 AC_CHECK_SIZEOF(char *, 4)
685 AC_CHECK_SIZEOF(long, 4)
686 AC_CHECK_SIZEOF(long long, 8)
687 AC_CHECK_SIZEOF(size_t, 4)
688
689 dnl Checks for header files.
690 dnl AC_HEADER_SYS_WAIT
691 dnl AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/time.h unistd.h)
692 AC_CHECK_HEADERS([OS.h arpa/inet.h errno.h fcntl.h limits.h locale.h netdb.h netinet/in.h stddef.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h sys/timeb.h sys/wait.h unistd.h])
693
694 dnl Checks for library functions.
695 dnl AC_TYPE_SIGNAL
696 dnl AC_CHECK_FUNC(strstr)
697 dnl bcopy and memmove are for PCRE
698 AC_CHECK_FUNCS([strerror bcopy memmove])
699 AC_PROG_GCC_TRADITIONAL
700 dnl uncommenting does not work for swa. suse linux
701 dnl AC_FUNC_MALLOC
702 AC_FUNC_SETPGRP
703 AC_TYPE_SIGNAL
704 dnl uncommenting does not work for swa. suse linux
705 dnl AC_FUNC_STAT
706 AC_CHECK_FUNCS([access atexit getcwd gethostbyaddr gethostbyaddr_r gethostbyname gethostbyname_r gettimeofday inet_ntoa localtime_r memchr memmove memset poll putenv random regcomp select setlocale snprintf socket strchr strdup strerror strftime strlcat strlcpy strptime strstr strtoul timegm tzset])
707
708 dnl Checks for RFC 2553 resolver and socket functions
709 AC_CHECK_FUNC([getaddrinfo],
710    [AC_CHECK_FUNC([getnameinfo],
711       [AC_DEFINE([HAVE_RFC2553], [1],
712          [Define if RFC 2553 resolver functions like getaddrinfo(3) and
713           getnameinfo(3) present])
714       ])
715 ])
716
717 dnl =================================================================
718 dnl Checks for libraries.
719 dnl =================================================================
720 dnl Note: Some systems may have the library but not the system header
721 dnl       file, so we must check for both.
722 dnl       Also check for correct version
723 AC_CHECK_LIB(pcre, pcre_compile, [
724    AC_CHECK_HEADER(pcre.h, [
725       AC_EGREP_HEADER(pcre_fullinfo, pcre.h, [have_pcre=yes], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no])
726    ], [
727       AC_CHECK_HEADER(pcre/pcre.h, [
728          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])
729       ], [have_pcre=no])
730    ])
731 ], [have_pcre=no])
732  
733 AC_CHECK_LIB(pcreposix, regcomp, [
734    AC_CHECK_HEADER(pcreposix.h, [
735       AC_EGREP_HEADER(pcreposix_regerror, pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes])
736    ], [
737       AC_CHECK_HEADER(pcre/pcreposix.h, [
738          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)])
739       ], [have_pcreposix=no])
740    ])
741 ], [have_pcreposix=no], -lpcre) 
742
743 dnl ================================================================
744 dnl libpcrs is temporarily disabled.
745 dnl
746 dnl Privoxy's own pcrs version fixes some problems that
747 dnl are present in libpcrs 0.3, the last pcrs release we
748 dnl know of, and as libpcrs seems to be currently unmaintained
749 dnl we can't send these fixes upstream.
750 dnl ================================================================
751 dnl
752 dnl AC_CHECK_LIB(pcrs, pcrs_compile, [AC_CHECK_HEADER(pcrs.h, [have_pcrs=yes], [have_pcrs=no])], [have_pcrs=no], -lpcre)
753
754 dnl =================================================================
755 dnl Always defined
756 dnl =================================================================
757
758 AC_DEFINE(__MT__)
759
760 dnl =================================================================
761 dnl Features
762 dnl =================================================================
763
764 AC_ARG_ENABLE(toggle,
765 [  --disable-toggle                Don't support temporary disable],
766 [if test $enableval = yes; then
767   AC_DEFINE(FEATURE_TOGGLE)
768 fi],AC_DEFINE(FEATURE_TOGGLE))
769
770 AC_ARG_ENABLE(force,
771 [  --disable-force                 Don't allow single-page disable],
772 [if test $enableval = yes; then
773   AC_DEFINE(FEATURE_FORCE_LOAD)
774 fi],AC_DEFINE(FEATURE_FORCE_LOAD))
775
776 AC_ARG_ENABLE(fast-redirects,
777 [  --disable-fast-redirects        Don't support fast redirects],
778 [if test $enableval = yes; then
779   AC_DEFINE(FEATURE_FAST_REDIRECTS)
780 fi], AC_DEFINE(FEATURE_FAST_REDIRECTS))
781
782 AC_ARG_ENABLE(stats,
783 [  --disable-stats                 Don't keep statistics],
784 [if test $enableval = yes; then
785   AC_DEFINE(FEATURE_STATISTICS)
786 fi],AC_DEFINE(FEATURE_STATISTICS))
787
788 AC_ARG_ENABLE(ie-images,
789 [  --enable-ie-images              Enable a quick but not always reliable auto-detect whether requests from
790                                   MS Internet Explorer are for an image or not.],
791 [if test $enableval = yes; then
792   AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE)
793 fi],)
794
795 AC_ARG_ENABLE(image-blocking,
796 [  --disable-image-blocking        Don't try to figure out whether a request is 
797                                   for an image or HTML - assume HTML.],
798 [if test $enableval = yes; then
799   AC_DEFINE(FEATURE_IMAGE_BLOCKING)
800 fi],
801 AC_DEFINE(FEATURE_IMAGE_BLOCKING))
802
803 AC_ARG_ENABLE(acl-files,
804 [  --disable-acl-files             Prevents the use of ACL files to control access to
805                                   Privoxy by IP address.],
806 [if test $enableval = yes; then
807   AC_DEFINE(FEATURE_ACL)
808 fi],
809 AC_DEFINE(FEATURE_ACL))
810
811 AC_ARG_ENABLE(trust-files,
812 [  --disable-trust-files           Prevents the use of trust files.],
813 [if test $enableval = yes; then
814   AC_DEFINE(FEATURE_TRUST)
815 fi],
816 AC_DEFINE(FEATURE_TRUST))
817
818 AC_ARG_ENABLE(editor,
819 [  --disable-editor                Prevents the use of the web-based actions file
820                                   editor and web-based temporary disable setting.],
821 [if test $enableval = yes; then
822   AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS)
823 fi],
824 AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS))
825
826 AC_ARG_ENABLE(no-gifs,
827 [  --enable-no-gifs                Use politically correct PNG format instead of GIF
828                                   for built-in images. May not work with all browsers.],
829 [if test $enableval = yes; then
830   AC_DEFINE(FEATURE_NO_GIFS)
831 fi])
832
833 AC_ARG_ENABLE(graceful-termination,
834 [  --enable-graceful-termination   Allow to shutdown Privoxy through the webinterface.],
835 [if test $enableval = yes; then
836   AC_DEFINE(FEATURE_GRACEFUL_TERMINATION)
837 fi])
838
839 AC_ARG_ENABLE(extended-host-patterns,
840 [  --enable-extended-host-patterns Enable and require PCRE syntax in host patterns. This feature hasn't
841                                   been announced yet and it's not clear if it's a good idea. It's expected
842                                   to work, but undocumented. You should only enable it if you know what
843                                   PCRE is and are sure that you need it for your host patterns. You can
844                                   use tools/url-pattern-translator.pl to convert existing action files to
845                                   use PCRE host patterns. Please don't enable this option when creating
846                                   packages for others that may not be expecting it.],
847 [if test $enableval = yes; then
848   AC_DEFINE(FEATURE_EXTENDED_HOST_PATTERNS)
849 fi])
850
851 dnl pcre/pcrs is needed for CGI anyway, so
852 dnl the choice is only between static and
853 dnl dynamic:
854
855 AC_ARG_ENABLE(dynamic-pcre,
856 [  --disable-dynamic-pcre          Use the built-in, static pcre, even if libpcre is available],
857 [ if test $enableval = "no"; then have_pcre=no; fi ])
858
859 dnl =================================================
860 dnl libpcrs is temporarily disabled,
861 dnl see comment above for the reason.
862 dnl =================================================
863 dnl AC_ARG_ENABLE(dynamic-pcrs,
864 dnl [  --disable-dynamic-pcrs          Use the built-in, static pcrs, even if libpcrs is available],
865 dnl [ if test $enableval = "no"; then have_pcrs=no; fi ])
866
867
868 dnl ====================================================
869 dnl This check is incomplete. For mingw32 zlib is found
870 dnl by configure, but not necessarily by the compiler.
871 dnl ====================================================
872 AC_ARG_ENABLE(zlib,
873 [  --disable-zlib                  Don't use zlib to decompress data before filtering.],
874 [enableval2=$enableval],
875 [enableval2=yes])
876 if test $enableval2 = yes; then
877   AC_CHECK_LIB(z, zlibVersion, [have_zlib="yes"], [have_zlib="no"])
878   if test $have_zlib = "yes"; then
879     LIBS="$LIBS -lz"
880     AC_DEFINE(FEATURE_ZLIB,1,[Define to 1 to use compression through the zlib library.])
881   else
882    AC_MSG_WARN([No zlib found.
883    Privoxy will not be able to filter compressed content.
884    This may become a fatal error in the future.])
885   fi  
886 fi
887
888
889 # If we have libpcre and either we also have pcreposix or
890 # we don't need pcreposix, then link pcre dynamically; else
891 # build it and link statically
892 #
893 if test $have_pcre = "yes"; then
894   echo "using libpcre"
895   pcre_dyn=yes
896   STATIC_PCRE_ONLY=#
897   LIBS="$LIBS -lpcre -lpcreposix"
898 else
899   AC_MSG_WARN([You are using the static PCRE code which is scheduled for removal, for details see: 
900     https://sourceforge.net/mailarchive/message.php?msg_id=20080511195555.2dc6cfdc%40fabiankeil.de])
901   pcre_dyn=no
902   AC_DEFINE(STATIC_PCRE)
903   STATIC_PCRE_ONLY=
904 fi
905
906 AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE)
907
908 if test $have_pthread = "yes" -o $target_type = "mingw"; then
909   echo Enabling connection-sharing support.
910   AC_DEFINE(FEATURE_CONNECTION_SHARING)
911 fi
912
913 dnl =================================================
914 dnl libpcrs is temporarily disabled,
915 dnl see comment above for the reason.
916 dnl =================================================
917 dnl # If we have libpcrs and pcre is linked dynamically
918 dnl # then also link pcrs dynamically, else build and link
919 dnl # pcrs statically
920 dnl
921 dnl if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
922 dnl  echo "using libpcrs"
923 dnl  STATIC_PCRS_ONLY=#
924 dnl  LIBS="$LIBS -lpcrs"
925 dnl else
926 dnl  echo "using built-in static pcrs"
927   AC_DEFINE(STATIC_PCRS)
928   STATIC_PCRS_ONLY=
929 dnl fi
930
931 AC_SUBST(STATIC_PCRE_ONLY)
932 AC_SUBST(STATIC_PCRS_ONLY)
933
934 dnl =================================================================
935 dnl Final cleanup and output
936 dnl =================================================================
937
938 dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it seperately
939 dnl in the Makefile
940 CFLAGS=$old_CFLAGS_nospecial
941 AC_SUBST(SPECIAL_CFLAGS)
942
943 AC_SUBST(PTHREAD_LIB)
944
945 AC_OUTPUT(GNUmakefile doc/source/ldp.dsl)