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