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