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