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