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