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