f7a04470ac3bf9e6c3c01590e5b9af14ca166a4e
[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.37 2002/03/08 12:58:21 oes Exp $
4 dnl 
5 dnl Written by and Copyright (C) 2001 the SourceForge
6 dnl IJBSWA team.  http://ijbswa.sourceforge.net
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 dnl $Log: configure.in,v $
31 dnl Revision 1.37  2002/03/08 12:58:21  oes
32 dnl Tiny bugfix in AC_ARG_WITH(debug)
33 dnl
34 dnl Revision 1.36  2002/03/06 23:50:36  morcego
35 dnl Will not test for a text browser if we are not using docbook.
36 dnl
37 dnl Revision 1.35  2002/03/06 21:55:52  morcego
38 dnl New configure option: --with-docbook=(yes|no|directory)
39 dnl Preliminary new platform detection code included. Will work with the
40 dnl old one for now. No use just trowing it away
41 dnl
42 dnl Revision 1.34  2002/03/06 20:57:00  morcego
43 dnl Fixing detection of stylesheets on SuSe.
44 dnl
45 dnl Revision 1.33  2002/03/05 17:31:11  morcego
46 dnl Search for docbook.dsl. Should solve portability problems for SuSe.
47 dnl
48 dnl Revision 1.32  2002/03/05 14:07:43  morcego
49 dnl configure now detects rpm topdir, and change GNUmakefile acordingly
50 dnl    (based on sugestion by Sarantis Paskalis)
51 dnl
52 dnl Revision 1.31  2002/03/05 13:43:28  morcego
53 dnl Checking for text browser, so redhat-dok can work.
54 dnl
55 dnl Revision 1.30  2002/03/04 17:58:01  oes
56 dnl Deleted _DEBUG and PID_FILE_PATH
57 dnl
58 dnl Revision 1.29  2002/02/28 14:20:53  oes
59 dnl Fixed detection of gethost*_r functions on Solaris
60 dnl
61 dnl Revision 1.28  2002/02/27 15:02:38  oes
62 dnl Incremented version number
63 dnl
64 dnl Revision 1.27  2002/01/10 12:35:18  oes
65 dnl Added cross-compile defaults to the AC_CHECK_SIZEOF macros
66 dnl to silence autoconf warnings. Numbers are for Intel/Linux.
67 dnl Is there a better way?
68 dnl
69 dnl Revision 1.26  2002/01/09 14:29:49  oes
70 dnl - Added AC_CHECK_FUNC tests for the availability of
71 dnl   gethostbyname_r, gethostbyaddr_r, gmtime_r and
72 dnl   localtime_r, as well as AC_TRY_COMPILE tests to
73 dnl   determine their signatures.
74 dnl
75 dnl - Fixed a bug with the init of CFLAGS that was
76 dnl   reported by barsnick
77 dnl
78 dnl Revision 1.25  2002/01/04 15:27:18  oes
79 dnl Changed quoting of CODE_STATUS for use in make
80 dnl
81 dnl Revision 1.24  2001/12/30 14:07:31  steudten
82 dnl - Add signal handling (unix)
83 dnl - Add SIGHUP handler (unix)
84 dnl - Add creation of pidfile (unix)
85 dnl - Add action 'top' in rc file (RH)
86 dnl - Add entry 'SIGNALS' to manpage
87 dnl - Add exit message to logfile (unix)
88 dnl
89 dnl Revision 1.23  2001/12/09 20:24:42  david__schmidt
90 dnl Change from "alpha" to "beta" in configure.in
91 dnl
92 dnl Revision 1.22  2001/12/01 11:24:01  jongfoster
93 dnl Renaming Makefile.in to GNUmakefile.in so that non-GNU versions of
94 dnl make break in a more obvious way.
95 dnl
96 dnl Revision 1.21  2001/11/30 21:35:54  jongfoster
97 dnl Bumping version number to 2.9.10
98 dnl
99 dnl Revision 1.20  2001/10/23 21:24:09  jongfoster
100 dnl Support for FEATURE_CGI_EDIT_ACTIONS
101 dnl
102 dnl Revision 1.19  2001/10/07 15:33:14  oes
103 dnl Removed FEATURE_DENY_GZIP
104 dnl Bumped up version number
105 dnl
106 dnl Revision 1.18  2001/09/13 13:10:24  steudten
107 dnl
108 dnl PreWork for Debug Interface.
109 dnl Add new option "--with-debug" to enable debugging (flags aso.)
110 dnl
111 dnl Revision 1.17  2001/09/12 23:44:55  david__schmidt
112 dnl Mac OSX (Darwin) support added.
113 dnl
114 dnl Revision 1.16  2001/09/12 22:55:45  joergs
115 dnl AmigaOS support added.
116 dnl
117 dnl Revision 1.15  2001/09/12 17:28:59  david__schmidt
118 dnl
119 dnl OS/2 port: update autoconf'd support for the platform.
120 dnl
121 dnl Revision 1.14  2001/07/30 22:12:11  jongfoster
122 dnl Fixing Solaris build (I hope) and tidying up #defines:
123 dnl - All feature #defines are now of the form FEATURE_xxx
124 dnl - Permanently turned off WIN_GUI_EDIT
125 dnl - Permanently turned on WEBDAV and SPLIT_PROXY_ARGS
126 dnl
127 dnl Revision 1.13  2001/07/29 17:09:17  jongfoster
128 dnl Major changes to build system in order to fix these bugs:
129 dnl - pthreads under Linux was broken - changed -lpthread to -pthread
130 dnl - Compiling in MinGW32 mode under CygWin now correctly detects
131 dnl   which shared libraries are available
132 dnl - Solaris support (?) (Not tested under Solaris yet)
133 dnl
134 dnl Revision 1.12  2001/07/25 19:16:27  oes
135 dnl Bumping version number to 2.9.8
136 dnl
137 dnl Revision 1.11  2001/07/21 18:00:07  jongfoster
138 dnl Bumping version number to 2.9.7
139 dnl
140 dnl Revision 1.10  2001/07/18 17:25:04  oes
141 dnl Fixed a typo
142 dnl
143 dnl Revision 1.9  2001/07/15 19:45:13  jongfoster
144 dnl Added support for linking with POSIX threads library
145 dnl
146 dnl Revision 1.8  2001/07/15 17:54:29  jongfoster
147 dnl Renaming #define STATIC to STATIC_PCRE
148 dnl Adding new #define FEATURE_PTHREAD that will be used to enable
149 dnl POSIX threads support.
150 dnl
151 dnl Revision 1.7  2001/07/13 13:58:05  oes
152 dnl    Completely reorganized the selection scheme for
153 dnl    pcre, pcreposix, pcrs and gnu_regex:
154 dnl
155 dnl    The presence of shared pcre, pcreposix or pcrs
156 dnl    libraried is now autodetected. Additionally, the
157 dnl    user can enforce using the built-in static variants
158 dnl    by specifying --disable-dynamic-(pcre|pcrs).
159 dnl    Care is taken to avoid that pcre is dyn, while pcreposix
160 dnl    is static, if both are used and that pcrs is static if
161 dnl    pcrs is.
162 dnl
163 dnl    The choice between pcre, gnu or no regex for actionsfile
164 dnl    URL matching is now via
165 dnl    --(enable|disable)-regex-matching[=(gnu|pcre|no)] with the
166 dnl    default being pcre.
167 dnl
168 dnl Revision 1.6  2001/06/29 21:56:40  oes
169 dnl Version -> 2.9.5
170 dnl
171 dnl Revision 1.5  2001/06/29 13:26:27  oes
172 dnl Introduced #define CODE_STATUS
173 dnl
174 dnl Revision 1.4  2001/05/29 09:50:24  jongfoster
175 dnl Unified blocklist/imagelist/permissionslist.
176 dnl File format is still under discussion, but the internal changes
177 dnl are (mostly) done.
178 dnl
179 dnl Also modified interceptor behaviour:
180 dnl - We now intercept all URLs beginning with one of the following
181 dnl   prefixes (and *only* these prefixes):
182 dnl     * http://i.j.b/
183 dnl     * http://ijbswa.sf.net/config/
184 dnl     * http://ijbswa.sourceforge.net/config/
185 dnl - New interceptors "home page" - go to http://i.j.b/ to see it.
186 dnl - Internal changes so that intercepted and fast redirect pages
187 dnl   are not replaced with an image.
188 dnl - Interceptors now have the option to send a binary page direct
189 dnl   to the client. (i.e. ijb-send-banner uses this)
190 dnl - Implemented show-url-info interceptor.  (Which is why I needed
191 dnl   the above interceptors changes - a typical URL is
192 dnl   "http://i.j.b/show-url-info?url=www.somesite.com/banner.gif".
193 dnl   The previous mechanism would not have intercepted that, and
194 dnl   if it had been intercepted then it then it would have replaced
195 dnl   it with an image.)
196 dnl
197 dnl Revision 1.3  2001/05/22 18:46:04  oes
198 dnl
199 dnl - Enabled filtering banners by size rather than URL
200 dnl   by adding patterns that replace all standard banner
201 dnl   sizes with the "Junkbuster" gif to the re_filterfile
202 dnl
203 dnl - Enabled filtering WebBugs by providing a pattern
204 dnl   which kills all 1x1 images
205 dnl
206 dnl - Added support for PCRE_UNGREEDY behaviour to pcrs,
207 dnl   which is selected by the (nonstandard and therefore
208 dnl   capital) letter 'U' in the option string.
209 dnl   It causes the quantifiers to be ungreedy by default.
210 dnl   Appending a ? turns back to greedy (!).
211 dnl
212 dnl - Added a new interceptor ijb-send-banner, which
213 dnl   sends back the "Junkbuster" gif. Without imagelist or
214 dnl   MSIE detection support, or if tinygif = 1, or the
215 dnl   URL isn't recognized as an imageurl, a lame HTML
216 dnl   explanation is sent instead.
217 dnl
218 dnl - Added new feature, which permits blocking remote
219 dnl   script redirects and firing back a local redirect
220 dnl   to the browser.
221 dnl   The feature is conditionally compiled, i.e. it
222 dnl   can be disabled with --disable-fast-redirects,
223 dnl   plus it must be activated by a "fast-redirects"
224 dnl   line in the config file, has its own log level
225 dnl   and of course wants to be displayed by show-proxy-args
226 dnl   Note: Boy, all the #ifdefs in 1001 locations and
227 dnl   all the fumbling with configure.in and acconfig.h
228 dnl   were *way* more work than the feature itself :-(
229 dnl
230 dnl - Because a generic redirect template was needed for
231 dnl   this, tinygif = 3 now uses the same.
232 dnl
233 dnl - Moved GIFs, and other static HTTP response templates
234 dnl   to project.h
235 dnl
236 dnl - Some minor fixes
237 dnl
238 dnl - Removed some >400 CRs again (Jon, you really worked
239 dnl   a lot! ;-)
240 dnl
241 dnl Revision 1.2  2001/05/20 01:21:20  jongfoster
242 dnl Version 2.9.4 checkin.
243 dnl - Merged popupfile and cookiefile, and added control over PCRS
244 dnl   filtering, in new "permissionsfile".
245 dnl - Implemented LOG_LEVEL_FATAL, so that if there is a configuration
246 dnl   file error you now get a message box (in the Win32 GUI) rather
247 dnl   than the program exiting with no explanation.
248 dnl - Made killpopup use the PCRS MIME-type checking and HTTP-header
249 dnl   skipping.
250 dnl - Removed tabs from "config"
251 dnl - Moved duplicated url parsing code in "loaders.c" to a new funcition.
252 dnl - Bumped up version number.
253 dnl
254 dnl Revision 1.1.1.1  2001/05/15 13:58:50  oes
255 dnl Initial import of version 2.9.3 source tree
256 dnl
257 dnl 
258
259
260 dnl =================================================================
261 dnl AutoConf Initialization
262 dnl =================================================================
263
264 AC_REVISION($Revision: 1.37 $)
265 AC_INIT(jcc.c)
266 AC_CONFIG_HEADER(config.h)
267 AC_CANONICAL_HOST
268
269 dodk=auto
270 DKPREFIX=none
271 AC_ARG_WITH(docbook, dnl
272   --with-docbook=[[yes|no|directory]]   
273                            Enable docbook documentation creation 
274                            (default = yes, for gnu and linux),[dnl
275 case "$with_docbook" in
276 yes) dodk=yes;;
277 no) dodk=no;;
278 *) 
279         dodk=no
280         DKPREFIX=$withval
281         ;;
282 esac
283 ])
284
285 dnl =================================================================
286 dnl Application version number
287 dnl =================================================================
288
289 VERSION_MAJOR=2
290 VERSION_MINOR=9
291 VERSION_POINT=11
292 CODE_STATUS="beta"
293
294 dnl CODE_STATUS can be "alpha", "beta", or "stable", and will be
295 dnl used for CGI output
296
297 dnl =================================================================
298 dnl Substitute the version numbers
299 dnl =================================================================
300
301 AC_SUBST(VERSION_MAJOR)
302 AC_SUBST(VERSION_MINOR)
303 AC_SUBST(VERSION_POINT)
304 AC_SUBST(CODE_STATUS)
305
306 dnl
307 AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR})
308 AC_DEFINE_UNQUOTED(VERSION_MINOR,${VERSION_MINOR})
309 AC_DEFINE_UNQUOTED(VERSION_POINT,${VERSION_POINT})
310 AC_DEFINE_UNQUOTED(VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_POINT}")
311 AC_DEFINE_UNQUOTED(CODE_STATUS,"${CODE_STATUS}")
312
313 dnl =================================================================
314 dnl Checks for programs needed to build.
315 dnl =================================================================
316 AC_PROG_CC
317 AC_PROG_CPP
318 dnl AC_PROG_CXX
319 dnl AC_PROG_INSTALL
320 dnl AC_PROG_LN_S
321 dnl AC_PROG_MAKE_SET
322 dnl RANLIB is for PCRE:
323 dnl AC_PROG_RANLIB
324
325 AC_CHECK_PROG(GDB,gdb,yes,no)
326
327 dnl =================================================================
328 dnl debug, gcc and gdb support 
329 dnl =================================================================
330
331 AC_ARG_WITH(debug,
332         [  --with-debug            Enable debug mode],
333         [
334                 if test "x$withval" != "xno" ; then
335                     if test $ac_cv_prog_cc_g = yes; then
336                       if test "$GCC" = yes; then
337                         if test "$GDB"; then
338                           CFLAGS="-ggdb"
339                         else
340                           CFLAGS="-g"
341                         fi
342                         CFLAGS="$CFLAGS -Wshadow  -Wconversion"
343                       else
344                         CFLAGS="-g"
345                       fi
346                    fi
347                 fi
348         ],
349         [
350             if test "X$CFLAGS" = "X"; then # if CFLAGS are unset
351               if test "$GCC" = yes; then
352                 CFLAGS="-O2"
353               else
354                 CFLAGS=
355               fi
356             fi
357         ]
358 )
359
360 dnl =================================================================
361 dnl additional gcc flags
362 dnl =================================================================
363 dnl 
364 if test "$GCC"; then
365   CFLAGS="-pipe $CFLAGS"
366 fi
367
368
369 dnl =================================================================
370 dnl Build type
371 dnl =================================================================
372 dnl
373 dnl Must do this first.
374 dnl
375 dnl Reason: This sets CFLAGS in order to switch the Cygwin compiler
376 dnl into Cygwin or MinGW32 modes.  Depending on the mode selected,
377 dnl the compiler will use completely different sets of library
378 dnl and include files.
379 dnl 
380 dnl =================================================================
381
382 AC_MINGW32
383 AC_CYGWIN
384
385 if test "$MINGW32" = "yes"; then
386   target_type=mingw
387 else
388   if test "$CYGWIN" = "yes"; then
389     target_type=cygwin
390   else
391     target_type=unix
392   fi
393 fi
394
395 if test $dodk = auto; then
396         dodk=no
397         if test $target_type = unix; then
398                 case "$host_os" in
399                 linux* | gnu*)
400                         dodk=yes
401                 ;;
402                 esac
403         fi
404 fi
405
406 dnl Decide what to do based on target_type
407 dnl Note: PTHREAD_LIB is always set, even if pthread is disabled.
408 dnl This is because we don't know yet whether pthread is enabled.
409
410 AC_ARG_ENABLE(mingw32,
411 [  --enable-mingw32        Use mingw32 for a Windows GUI],
412 [if test $enableval = yes; then
413   target_type=mingw
414 fi])
415
416 if test $target_type = mingw; then
417   WIN_ONLY=
418   SPECIAL_CFLAGS="-mwindows -mno-cygwin"
419   PTHREAD_LIB=-lpthreadGC
420   echo "Using mingw32 (Win32 GUI)"
421 else
422   WIN_ONLY=#
423   if test $target_type = cygwin; then
424     SPECIAL_CFLAGS="-mno-win32"
425     PTHREAD_LIB=
426     echo "Using Cygnus (Win32 command line)"
427   else
428     SPECIAL_CFLAGS=
429     PTHREAD_LIB=-lpthread
430   fi
431 fi
432 AC_SUBST(WIN_ONLY)
433
434 dnl Checking which text html browser we have avaliable
435 if test $dodk != no; then
436         AC_CHECK_PROGS(WDUMP,w3m lynx links,false)
437         if test "$WDUMP" = false; then
438                 AC_MSG_ERROR(You need some kind of text browser to continue \(w3m, lynx and links are supported\))
439         fi
440 fi
441 AC_SUBST(WDUMP)
442
443 dnl If we use rpm, we need to check where %_topdir is
444 AC_CHECK_PROGS(RPMBIN,rpm,false)
445 if test $RPMBIN != false; then
446                 RPM_BASE=`rpm --eval "%{_topdir}"`
447                 if test "$RPM_BASE" = ""; then
448                         RPM_BASE=/usr/src/redhat
449                 fi
450 fi
451 AC_SUBST(RPM_BASE)
452
453 dnl Check for jade, so we can build the documentation
454 AC_CHECK_PROGS(JADEBIN,jade openjade,false)
455 AC_SUBST(JADEBIN)
456
457 dnl Checking for the docbook.dsl stylesheet file
458 if test $dodk = yes; then
459   if test $DKPREFIX = none; then
460     AC_CHECK_FILE(/usr/share/sgml/docbook/dsssl-stylesheets/html/docbook.dsl,
461       DKPREFIX=/usr/share/sgml/docbook/dsssl-stylesheets,
462       AC_CHECK_FILE(/usr/share/sgml/docbkdsl/html/docbook.dsl,
463         DKPREFIX=/usr/share/sgml/docbkdsl))
464   fi
465 fi
466 AC_SUBST(DKPREFIX)
467
468 dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
469 old_CFLAGS_nospecial=$CFLAGS
470 CFLAGS="$CFLAGS $SPECIAL_CFLAGS"
471
472 # Hack to force AutoConf to use the CFLAGS we just set
473 dnl Warning: This may break with a future version of Autoconf
474 dnl          Tested with autoconf 2.13
475 ac_cpp='$CPP $CPPFLAGS $SPECIAL_CFLAGS'
476 ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
477 ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
478
479
480 dnl =================================================================
481 dnl Thread support
482 dnl =================================================================
483
484 AC_CHECK_HEADER(pthread.h, [have_pthread=yes], [have_pthread=no])
485
486 AC_ARG_ENABLE(pthread,
487 [  --disable-pthread       Don't use POSIX threads (pthreads)],
488 [if test $enableval = no; then
489   # Disable pthreads
490   have_pthread=no
491 fi])
492
493 if test $have_pthread = yes; then
494   PTHREAD_ONLY=
495   AC_DEFINE(FEATURE_PTHREAD)
496   echo Using POSIX threads
497   if test "$GCC" = "yes"; then
498     # Set a GCC specific switch:
499     if test "$target_type" = "unix"; then
500       # This compiler switch makes Linux thread-safe
501       # Don't know about other OS's?  Is this switch
502       # supported?
503       PTHREAD_LIB=
504       SPECIAL_CFLAGS="-pthread"
505     fi
506   fi
507 else
508   PTHREAD_ONLY=#
509   echo Using native threads
510 fi
511
512 AC_SUBST(PTHREAD_ONLY)
513
514 dnl =================================================================
515 dnl Support for thread-safe versions of gethostbyaddr, gethostbyname,
516 dnl gmtime and localtime
517 dnl =================================================================
518
519 dnl Next line needed to find the gethost*_r functions on Solaris
520 AC_CHECK_LIB(nsl, gethostbyname)
521
522 AC_CHECK_FUNC(gethostbyaddr_r, [
523   AC_MSG_CHECKING([signature of gethostbyaddr_r])
524   AC_TRY_COMPILE([
525 #   include <netdb.h>
526   ], [
527     struct hostent *h, *hp;
528     char *a, *b;
529     int l, bl, t, e;
530     (void) gethostbyaddr_r(a, l, t, h, b, bl, &hp, &e)
531   ], [
532     AC_DEFINE(HAVE_GETHOSTBYADDR_R_8_ARGS)
533     AC_MSG_RESULT([8 args])
534   ], [
535     AC_TRY_COMPILE([
536 #     include <netdb.h>
537     ], [
538       struct hostent *h;
539       char *a, *b;
540       int l, bl, t, e;
541       (void) gethostbyaddr_r(a, l, t, h, b, bl, &e)
542     ], [
543       AC_DEFINE(HAVE_GETHOSTBYADDR_R_7_ARGS)
544       AC_MSG_RESULT([7 args])
545     ], [
546       AC_TRY_COMPILE([
547 #       include <netdb.h>
548       ], [
549         struct hostent_data *d;
550         struct hostent *h;
551         char a,
552         int l, t;
553         (void) gethostbyaddr_r(a, l, t, h, d)
554       ], [
555         AC_DEFINE(HAVE_GETHOSTBYADDR_R_5_ARGS)
556         AC_MSG_RESULT([5 args])
557       ], [
558         AC_MSG_RESULT(unrecognised)
559       ])
560     ])
561   ])
562 ], [
563   AC_MSG_RESULT(no)
564 ])
565
566 AC_CHECK_FUNC(gethostbyname_r, [
567   AC_MSG_CHECKING([signature of gethostbyname_r])
568   AC_TRY_COMPILE([
569 #   include <netdb.h>
570   ], [
571     struct hostent *h, *r;
572     char *n, *b;
573     int bl, e;
574     (void) gethostbyname_r(n, h, b, bl, &r, &e)
575   ], [
576     AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARGS)
577     AC_MSG_RESULT([6 args])
578   ], [
579     AC_TRY_COMPILE([
580 #     include <netdb.h>
581     ], [
582       struct hostent *h;
583       char *n, *b;
584       int bl, e;
585       (void) gethostbyname_r(n, h, b, bl, &e)
586     ], [
587       AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARGS)
588       AC_MSG_RESULT([5 args])
589     ], [
590       AC_TRY_COMPILE([
591 #       include <netdb.h>
592       ], [
593         struct hostent_data *d;
594         struct hostent *h;
595         char *n,
596         (void) gethostbyname_r(n, h, d)
597       ], [
598         AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARGS)
599         AC_MSG_RESULT([3 args])
600       ], [
601         AC_MSG_RESULT(unrecognised)
602       ])
603     ])
604   ])
605 ], [
606   AC_MSG_RESULT(no)
607 ])
608
609 AC_CHECK_FUNC(gmtime_r, [
610   AC_MSG_CHECKING([signature of gmtime_r])
611   AC_TRY_COMPILE([
612 #   include <time.h>
613   ], [
614     struct time *t;
615     struct tm *tm;
616     (void) gmtime_r(t, tm)
617   ], [
618     AC_MSG_RESULT(ok)
619     AC_DEFINE(HAVE_GMTIME_R)
620   ], [
621     AC_MSG_RESULT(unrecognised)
622   ])
623 ], [
624   AC_MSG_RESULT(no)
625 ])
626
627 AC_CHECK_FUNC(localtime_r, [
628   AC_MSG_CHECKING([signature of localtime_r])
629   AC_TRY_COMPILE([
630 #   include <time.h>
631   ], [
632     struct time *t;
633     struct tm *tm;
634     (void) localtime_r(t, tm)
635   ], [
636     AC_MSG_RESULT(ok)
637     AC_DEFINE(HAVE_LOCALTIME_R)
638   ], [
639     AC_MSG_RESULT(unrecognised)
640   ])
641 ], [
642   AC_MSG_RESULT(no)
643 ])
644
645 dnl =================================================================
646 dnl Solaris specific
647 dnl FIXME: Not tested on Solaris yet...
648 dnl =================================================================
649
650
651 SOCKET_LIB=
652
653 case "$host" in
654 *-solaris*) SOCKET_LIB="-lsocket -lnsl"
655             AC_DEFINE(__EXTENSIONS__)
656             if test "$GCC" = "yes"; then
657               # Set a GCC specific switch:
658               # This compiler switch makes Solaris thread-safe
659               PTHREAD_LIB=
660               SPECIAL_CFLAGS="-pthreads"
661             else
662               # What do we do without GCC? Guess this:
663               SPECIAL_CFLAGS="-D_REENTRANT"
664             fi
665 ;;
666 esac
667
668 AC_SUBST(SOCKET_LIB)
669
670 dnl =================================================================
671 dnl OS/2 specific
672 dnl =================================================================
673
674 case "$host" in
675 *-os2-emx*) SOCKET_LIB=-lsocket
676 ;;
677 esac
678
679 AC_SUBST(SOCKET_LIB)
680
681 dnl =================================================================
682 dnl AmigaOS specific
683 dnl =================================================================
684
685 AMIGAOS_ONLY=#
686
687 case "$host" in
688 *-amigaos) AMIGAOS_ONLY=
689 ;;
690 esac
691
692 AC_SUBST(AMIGAOS_ONLY)
693
694 dnl =================================================================
695 dnl Check for standard compiler stuff
696 dnl =================================================================
697
698 AC_EXEEXT
699 AC_OBJEXT
700 AC_HEADER_STDC
701 AC_C_CONST
702 AC_TYPE_SIZE_T
703 AC_CHECK_SIZEOF(int, 4)
704 AC_CHECK_SIZEOF(char *, 4)
705 AC_CHECK_SIZEOF(long, 4)
706 AC_CHECK_SIZEOF(long long, 8)
707 AC_CHECK_SIZEOF(size_t, 4)
708
709 dnl Checks for header files.
710 dnl AC_HEADER_SYS_WAIT
711 dnl AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/time.h unistd.h)
712
713 dnl Checks for library functions.
714 dnl AC_TYPE_SIGNAL
715 dnl AC_CHECK_FUNC(strstr)
716 dnl bcopy and memmove are for PCRE
717 AC_CHECK_FUNCS(strerror bcopy memmove)
718
719
720 dnl =================================================================
721 dnl Checks for libraries.
722 dnl =================================================================
723 dnl Note: Some systems may have the library but not the system header
724 dnl       file, so we must check for both.
725 AC_CHECK_LIB(pcre, pcre_compile, [AC_CHECK_HEADER(pcre.h, [have_pcre=yes], [have_pcre=no])], [have_pcre=no])
726 AC_CHECK_LIB(pcreposix, regcomp, [AC_CHECK_HEADER(pcreposix.h, [have_pcreposix=yes], [have_pcreposix=no])], [have_pcreposix=no], -lpcre)
727 AC_CHECK_LIB(pcrs, pcrs_compile, [AC_CHECK_HEADER(pcrs.h, [have_pcrs=yes], [have_pcrs=no])], [have_pcrs=no])
728
729
730 dnl =================================================================
731 dnl Always defined
732 dnl =================================================================
733
734 AC_DEFINE(__MT__)
735
736 dnl =================================================================
737 dnl Features
738 dnl =================================================================
739
740 AC_ARG_ENABLE(toggle,
741 [  --disable-toggle         Don't support temporary disable],
742 [if test $enableval = yes; then
743   AC_DEFINE(FEATURE_TOGGLE)
744 fi],AC_DEFINE(FEATURE_TOGGLE))
745
746 AC_ARG_ENABLE(force,
747 [  --disable-force          Don't allow single-page disable],
748 [if test $enableval = yes; then
749   AC_DEFINE(FEATURE_FORCE_LOAD)
750 fi],AC_DEFINE(FEATURE_FORCE_LOAD))
751
752 AC_ARG_ENABLE(fast-redirects,
753 [  --disable-fast-redirects Don't support fast redirects],
754 [if test $enableval = yes; then
755   AC_DEFINE(FEATURE_FAST_REDIRECTS)
756 fi], AC_DEFINE(FEATURE_FAST_REDIRECTS))
757
758 AC_ARG_ENABLE(killpopup,
759 [  --disable-killpopup      Never block popups],
760 [if test $enableval = yes; then
761   AC_DEFINE(FEATURE_KILL_POPUPS)
762 fi],AC_DEFINE(FEATURE_KILL_POPUPS))
763
764 AC_ARG_ENABLE(stats,
765 [  --disable-stats          Don't keep statistics],
766 [if test $enableval = yes; then
767   AC_DEFINE(FEATURE_STATISTICS)
768 fi],AC_DEFINE(FEATURE_STATISTICS))
769
770 AC_ARG_ENABLE(ie-images,
771 [  --disable-ie-images      Don't auto-detect whether a request from MS Internet
772                            Explorer is for an image or HTML.],
773 [if test $enableval = yes; then
774   AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE)
775 fi],
776 AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE))
777
778 AC_ARG_ENABLE(image-blocking,
779 [  --disable-image-blocking Don't try to figure out whether a request is 
780                            for an image or HTML - assume HTML.],
781 [if test $enableval = yes; then
782   AC_DEFINE(FEATURE_IMAGE_BLOCKING)
783 fi],
784 AC_DEFINE(FEATURE_IMAGE_BLOCKING))
785
786 AC_ARG_ENABLE(acl-files,
787 [  --disable-acl-files      Prevents the use of ACL files to control access to
788                            the proxy by IP address.],
789 [if test $enableval = yes; then
790   AC_DEFINE(FEATURE_ACL)
791 fi],
792 AC_DEFINE(FEATURE_ACL))
793
794 AC_ARG_ENABLE(trust-files,
795 [  --disable-trust-files    Prevents the use of trust files.],
796 [if test $enableval = yes; then
797   AC_DEFINE(FEATURE_TRUST)
798 fi],
799 AC_DEFINE(FEATURE_TRUST))
800
801 AC_ARG_ENABLE(jar-files,
802 [  --disable-jar-files      Prevents the use of jar files to capture cookies.],
803 [if test $enableval = yes; then
804   AC_DEFINE(FEATURE_COOKIE_JAR)
805 fi],
806 AC_DEFINE(FEATURE_COOKIE_JAR))
807
808 AC_ARG_ENABLE(editor,
809 [  --disable-editor         Prevents the use of the web-based actions file
810                            editor and web-based temporary disable setting.],
811 [if test $enableval = yes; then
812   AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS)
813 fi],
814 AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS))
815
816 dnl pcre/pcrs is needed for CGI anyway, so
817 dnl the choice is only between static and
818 dnl dynamic:
819
820 AC_ARG_ENABLE(regex-matching,
821 [  --enable-regex-matching=pcre  Use perl-compatible regex for actionsfile
822                                 pattern matching (default)
823   --enable-regex-matching=gnu   Use gnu style regex for actionsfile pattern
824                                 matching (-> bigger binary)
825   --disable-regex-matching      Don't use regex matching, compare URL
826                                 prefix instead (won't shrink birary)],
827 [ regex_matching=$enableval ],
828 [ regex_matching=pcre ])
829
830 AC_ARG_ENABLE(dynamic-pcre,
831 [  --disable-dynamic-pcre        Use the built-in, static pcre, even if
832                                 libpcre is available],
833 [ if test $enableval = "no"; then have_pcre=no; fi ])
834
835 AC_ARG_ENABLE(dynamic-pcrs,
836 [  --disable-dynamic-pcrs        Use the built-in, static pcrs, even if
837                                 libpcrs is available],
838 [ if test $enableval = "no"; then have_pcrs=no; fi ])
839
840
841 # Is the regex URL matching based on libpcreposix, but we
842 # don't have that library?
843 #
844 if test $have_pcreposix = "yes" -o $regex_matching != "pcre"; then
845   dont_miss_pcreposix=yes
846 else
847   dont_miss_pcreposix=no
848 fi
849
850 # If we have libpcre and either we also have pcreposix or
851 # we don't need pcreposix, then link pcre dynamically; else
852 # build it and link statically
853 #
854 if test $have_pcre = "yes" -a $dont_miss_pcreposix = "yes"; then
855   echo "using libpcre"
856   pcre_dyn=yes
857   STATIC_PCRE_ONLY=#
858   LIBS="$LIBS -lpcre"
859 else
860   echo "using built-in static pcre"
861   pcre_dyn=no
862   AC_DEFINE(STATIC_PCRE)
863   STATIC_PCRE_ONLY=
864 fi
865
866 # If we have libpcrs and pcre is linked dynamically
867 # then also link pcrs dynamically, else build and link
868 # pcrs statically
869 #
870 if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
871   echo "using libpcrs"
872   STATIC_PCRS_ONLY=#
873   LIBS="$LIBS -lpcrs"
874 else
875   echo "using built-in static pcrs"
876   AC_DEFINE(STATIC_PCRS)
877   STATIC_PCRS_ONLY=
878 fi
879
880 # Which method should be used for URL matching?
881 # pcre, gnu regex or prefix matching?
882 #
883 if test $regex_matching = "gnu"; then
884   echo "using gnu regex for URL matching"
885   AC_DEFINE(REGEX_GNU)
886   GNU_REGEX_ONLY=
887   PCRE_REGEX_ONLY=#
888 elif test $regex_matching = "pcre"; then
889   echo "using pcre regex for URL matching"
890   AC_DEFINE(REGEX_PCRE)
891   GNU_REGEX_ONLY=#
892   PCRE_REGEX_ONLY=
893   if test $pcre_dyn = "yes"; then
894     LIBS="$LIBS -lpcreposix"
895   fi
896 else
897   echo -e "using prefix matching for URLs\nHint: This does NOT make the executable any smaller!"
898   GNU_REGEX_ONLY=#
899   PCRE_REGEX_ONLY=#
900 fi
901
902 AC_SUBST(GNU_REGEX_ONLY)
903 AC_SUBST(PCRE_REGEX_ONLY)
904 AC_SUBST(STATIC_PCRE_ONLY)
905 AC_SUBST(STATIC_PCRS_ONLY)
906
907 dnl =================================================================
908 dnl Final cleanup and output
909 dnl =================================================================
910
911 dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it seperately
912 dnl in the Makefile
913 CFLAGS=$old_CFLAGS_nospecial
914 AC_SUBST(SPECIAL_CFLAGS)
915
916 AC_SUBST(PTHREAD_LIB)
917
918 AC_OUTPUT(GNUmakefile)