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