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