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