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