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