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