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