Fixing Solaris build (I hope) and tidying up #defines:
[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.13 2001/07/29 17:09:17 jongfoster 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.13  2001/07/29 17:09:17  jongfoster
32 dnl Major changes to build system in order to fix these bugs:
33 dnl - pthreads under Linux was broken - changed -lpthread to -pthread
34 dnl - Compiling in MinGW32 mode under CygWin now correctly detects
35 dnl   which shared libraries are available
36 dnl - Solaris support (?) (Not tested under Solaris yet)
37 dnl
38 dnl Revision 1.12  2001/07/25 19:16:27  oes
39 dnl Bumping version number to 2.9.8
40 dnl
41 dnl Revision 1.11  2001/07/21 18:00:07  jongfoster
42 dnl Bumping version number to 2.9.7
43 dnl
44 dnl Revision 1.10  2001/07/18 17:25:04  oes
45 dnl Fixed a typo
46 dnl
47 dnl Revision 1.9  2001/07/15 19:45:13  jongfoster
48 dnl Added support for linking with POSIX threads library
49 dnl
50 dnl Revision 1.8  2001/07/15 17:54:29  jongfoster
51 dnl Renaming #define STATIC to STATIC_PCRE
52 dnl Adding new #define FEATURE_PTHREAD that will be used to enable
53 dnl POSIX threads support.
54 dnl
55 dnl Revision 1.7  2001/07/13 13:58:05  oes
56 dnl    Completely reorganized the selection scheme for
57 dnl    pcre, pcreposix, pcrs and gnu_regex:
58 dnl
59 dnl    The presence of shared pcre, pcreposix or pcrs
60 dnl    libraried is now autodetected. Additionally, the
61 dnl    user can enforce using the built-in static variants
62 dnl    by specifying --disable-dynamic-(pcre|pcrs).
63 dnl    Care is taken to avoid that pcre is dyn, while pcreposix
64 dnl    is static, if both are used and that pcrs is static if
65 dnl    pcrs is.
66 dnl
67 dnl    The choice between pcre, gnu or no regex for actionsfile
68 dnl    URL matching is now via
69 dnl    --(enable|disable)-regex-matching[=(gnu|pcre|no)] with the
70 dnl    default being pcre.
71 dnl
72 dnl Revision 1.6  2001/06/29 21:56:40  oes
73 dnl Version -> 2.9.5
74 dnl
75 dnl Revision 1.5  2001/06/29 13:26:27  oes
76 dnl Introduced #define CODE_STATUS
77 dnl
78 dnl Revision 1.4  2001/05/29 09:50:24  jongfoster
79 dnl Unified blocklist/imagelist/permissionslist.
80 dnl File format is still under discussion, but the internal changes
81 dnl are (mostly) done.
82 dnl
83 dnl Also modified interceptor behaviour:
84 dnl - We now intercept all URLs beginning with one of the following
85 dnl   prefixes (and *only* these prefixes):
86 dnl     * http://i.j.b/
87 dnl     * http://ijbswa.sf.net/config/
88 dnl     * http://ijbswa.sourceforge.net/config/
89 dnl - New interceptors "home page" - go to http://i.j.b/ to see it.
90 dnl - Internal changes so that intercepted and fast redirect pages
91 dnl   are not replaced with an image.
92 dnl - Interceptors now have the option to send a binary page direct
93 dnl   to the client. (i.e. ijb-send-banner uses this)
94 dnl - Implemented show-url-info interceptor.  (Which is why I needed
95 dnl   the above interceptors changes - a typical URL is
96 dnl   "http://i.j.b/show-url-info?url=www.somesite.com/banner.gif".
97 dnl   The previous mechanism would not have intercepted that, and
98 dnl   if it had been intercepted then it then it would have replaced
99 dnl   it with an image.)
100 dnl
101 dnl Revision 1.3  2001/05/22 18:46:04  oes
102 dnl
103 dnl - Enabled filtering banners by size rather than URL
104 dnl   by adding patterns that replace all standard banner
105 dnl   sizes with the "Junkbuster" gif to the re_filterfile
106 dnl
107 dnl - Enabled filtering WebBugs by providing a pattern
108 dnl   which kills all 1x1 images
109 dnl
110 dnl - Added support for PCRE_UNGREEDY behaviour to pcrs,
111 dnl   which is selected by the (nonstandard and therefore
112 dnl   capital) letter 'U' in the option string.
113 dnl   It causes the quantifiers to be ungreedy by default.
114 dnl   Appending a ? turns back to greedy (!).
115 dnl
116 dnl - Added a new interceptor ijb-send-banner, which
117 dnl   sends back the "Junkbuster" gif. Without imagelist or
118 dnl   MSIE detection support, or if tinygif = 1, or the
119 dnl   URL isn't recognized as an imageurl, a lame HTML
120 dnl   explanation is sent instead.
121 dnl
122 dnl - Added new feature, which permits blocking remote
123 dnl   script redirects and firing back a local redirect
124 dnl   to the browser.
125 dnl   The feature is conditionally compiled, i.e. it
126 dnl   can be disabled with --disable-fast-redirects,
127 dnl   plus it must be activated by a "fast-redirects"
128 dnl   line in the config file, has its own log level
129 dnl   and of course wants to be displayed by show-proxy-args
130 dnl   Note: Boy, all the #ifdefs in 1001 locations and
131 dnl   all the fumbling with configure.in and acconfig.h
132 dnl   were *way* more work than the feature itself :-(
133 dnl
134 dnl - Because a generic redirect template was needed for
135 dnl   this, tinygif = 3 now uses the same.
136 dnl
137 dnl - Moved GIFs, and other static HTTP response templates
138 dnl   to project.h
139 dnl
140 dnl - Some minor fixes
141 dnl
142 dnl - Removed some >400 CRs again (Jon, you really worked
143 dnl   a lot! ;-)
144 dnl
145 dnl Revision 1.2  2001/05/20 01:21:20  jongfoster
146 dnl Version 2.9.4 checkin.
147 dnl - Merged popupfile and cookiefile, and added control over PCRS
148 dnl   filtering, in new "permissionsfile".
149 dnl - Implemented LOG_LEVEL_FATAL, so that if there is a configuration
150 dnl   file error you now get a message box (in the Win32 GUI) rather
151 dnl   than the program exiting with no explanation.
152 dnl - Made killpopup use the PCRS MIME-type checking and HTTP-header
153 dnl   skipping.
154 dnl - Removed tabs from "config"
155 dnl - Moved duplicated url parsing code in "loaders.c" to a new funcition.
156 dnl - Bumped up version number.
157 dnl
158 dnl Revision 1.1.1.1  2001/05/15 13:58:50  oes
159 dnl Initial import of version 2.9.3 source tree
160 dnl
161 dnl 
162
163
164 dnl =================================================================
165 dnl AutoConf Initialization
166 dnl =================================================================
167
168 AC_REVISION($Revision: 1.13 $)
169 AC_INIT(jcc.c)
170 AC_CONFIG_HEADER(config.h)
171
172
173 dnl =================================================================
174 dnl Application version number
175 dnl =================================================================
176
177 VERSION_MAJOR=2
178 VERSION_MINOR=9
179 VERSION_POINT=8
180 CODE_STATUS="\"alpha\""
181
182 dnl CODE_STATUS can be "alpha", "beta", or "stable", and will be
183 dnl used for CGI output
184
185 dnl =================================================================
186 dnl Substitute the version numbers
187 dnl =================================================================
188
189 AC_SUBST(VERSION_MAJOR)
190 AC_SUBST(VERSION_MINOR)
191 AC_SUBST(VERSION_POINT)
192
193 dnl
194 AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR})
195 AC_DEFINE_UNQUOTED(VERSION_MINOR,${VERSION_MINOR})
196 AC_DEFINE_UNQUOTED(VERSION_POINT,${VERSION_POINT})
197 AC_DEFINE_UNQUOTED(VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_POINT}")
198 AC_DEFINE_UNQUOTED(CODE_STATUS,${CODE_STATUS})
199
200
201 dnl =================================================================
202 dnl Checks for programs needed to build.
203 dnl =================================================================
204 AC_PROG_CC
205 AC_PROG_CPP
206 dnl AC_PROG_CXX
207 dnl AC_PROG_INSTALL
208 dnl AC_PROG_LN_S
209 dnl AC_PROG_MAKE_SET
210 dnl RANLIB is for PCRE:
211 dnl AC_PROG_RANLIB
212
213
214 dnl =================================================================
215 dnl Build type
216 dnl =================================================================
217 dnl
218 dnl Must do this first.
219 dnl
220 dnl Reason: This sets CFLAGS in order to switch the Cygwin compiler
221 dnl into Cygwin or MinGW32 modes.  Depending on the mode selected,
222 dnl the compiler will use completely different sets of library
223 dnl and include files.
224 dnl 
225 dnl =================================================================
226
227 AC_MINGW32
228 AC_CYGWIN
229
230 if test "$MINGW32" = "yes"; then
231   target_type=mingw
232 else
233   if test "$CYGWIN" = "yes"; then
234     target_type=cygwin
235   else
236     target_type=unix
237   fi
238 fi
239
240 dnl Decide what to do based on target_type
241 dnl Note: PTHREAD_LIB is always set, even if pthread is disabled.
242 dnl This is because we don't know yet whether pthread is enabled.
243
244 AC_ARG_ENABLE(mingw32,
245 [  --enable-mingw32        Use mingw32 for a Windows GUI],
246 [if test $enableval = yes; then
247   target_type=mingw
248 fi])
249
250 if test $target_type = mingw; then
251   WIN_ONLY=
252   SPECIAL_CFLAGS="-mwindows -mno-cygwin"
253   PTHREAD_LIB=-lpthreadGC
254   echo "Using mingw32 (Win32 GUI)"
255 else
256   WIN_ONLY=#
257   if test $target_type = cygwin; then
258     SPECIAL_CFLAGS="-mno-win32"
259     PTHREAD_LIB=
260     echo "Using Cygnus (Win32 command line)"
261   else
262     SPECIAL_CFLAGS=
263     PTHREAD_LIB=-lpthread
264   fi
265 fi
266 AC_SUBST(WIN_ONLY)
267
268 dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS
269 old_CFLAGS_nospecial=$CFLAGS
270 CFLAGS="$CFLAGS $SPECIAL_CFLAGS"
271
272 # Hack to force AutoConf to use the CFLAGS we just set
273 dnl Warning: This may break with a future version of Autoconf
274 dnl          Tested with autoconf 2.13
275 ac_cpp='$CPP $CPPFLAGS $SPECIAL_CFLAGS'
276 ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
277 ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
278
279
280 dnl =================================================================
281 dnl Thread support
282 dnl =================================================================
283
284 AC_CHECK_HEADER(pthread.h, [have_pthread=yes], [have_pthread=no])
285
286 AC_ARG_ENABLE(pthread,
287 [  --disable-pthread       Don't use POSIX threads (pthreads)],
288 [if test $enableval = no; then
289   # Disable pthreads
290   have_pthread=no
291 fi])
292
293 if test $have_pthread = yes; then
294   PTHREAD_ONLY=
295   AC_DEFINE(FEATURE_PTHREAD)
296   echo Using POSIX threads
297   if test "$GCC" = "yes"; then
298     # Set a GCC specific switch:
299     if test "$target_type" = "unix"; then
300       # This compiler switch makes Linux thread-safe
301       # Don't know about other OS's?  Is this switch
302       # supported?
303       PTHREAD_LIB=
304       SPECIAL_CFLAGS="-pthread"
305     fi
306   fi
307 else
308   PTHREAD_ONLY=#
309   echo Using native threads
310 fi
311
312 AC_SUBST(PTHREAD_ONLY)
313
314
315 dnl =================================================================
316 dnl Solaris specific
317 dnl FIXME: Not tested on Solaris yet...
318 dnl =================================================================
319
320 AC_CANONICAL_HOST
321
322 SOLARIS_ONLY=#
323
324 case "$host" in
325 *-solaris*) SOLARIS_ONLY=
326             AC_DEFINE(__EXTENSIONS__)
327             if test "$GCC" = "yes"; then
328               # Set a GCC specific switch:
329               # This compiler switch makes Solaris thread-safe
330               PTHREAD_LIB=
331               SPECIAL_CFLAGS="-pthreads"
332             else
333               # What do we do without GCC? Guess this:
334               SPECIAL_CFLAGS="-D_REENTRANT"
335             fi
336 ;;
337 esac
338
339 AC_SUBST(SOLARIS_ONLY)
340
341 dnl =================================================================
342 dnl Check for standard compiler stuff
343 dnl =================================================================
344
345 AC_EXEEXT
346 AC_OBJEXT
347 AC_HEADER_STDC
348 AC_C_CONST
349 AC_TYPE_SIZE_T
350
351 dnl Checks for header files.
352 dnl AC_HEADER_SYS_WAIT
353 dnl AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/time.h unistd.h)
354
355 dnl Checks for library functions.
356 dnl AC_TYPE_SIGNAL
357 dnl AC_CHECK_FUNC(strstr)
358 dnl bcopy and memmove are for PCRE
359 AC_CHECK_FUNCS(strerror bcopy memmove)
360
361
362 dnl =================================================================
363 dnl Checks for libraries.
364 dnl =================================================================
365 dnl Note: Some systems may have the library but not the system header
366 dnl       file, so we must check for both.
367 AC_CHECK_LIB(pcre, pcre_compile, [AC_CHECK_HEADER(pcre.h, [have_pcre=yes], [have_pcre=no])], [have_pcre=no])
368 AC_CHECK_LIB(pcreposix, regcomp, [AC_CHECK_HEADER(pcreposix.h, [have_pcreposix=yes], [have_pcreposix=no])], [have_pcreposix=no], -lpcre)
369 AC_CHECK_LIB(pcrs, pcrs_compile, [AC_CHECK_HEADER(pcrs.h, [have_pcrs=yes], [have_pcrs=no])], [have_pcrs=no])
370
371
372 dnl =================================================================
373 dnl Always defined
374 dnl =================================================================
375
376 AC_DEFINE(__MT__)
377
378 dnl =================================================================
379 dnl Features
380 dnl =================================================================
381
382 AC_ARG_ENABLE(toggle,
383 [  --disable-toggle        Don't support temporary disable],
384 [if test $enableval = yes; then
385   AC_DEFINE(FEATURE_TOGGLE)
386 fi],AC_DEFINE(FEATURE_TOGGLE))
387
388 AC_ARG_ENABLE(gzip,
389 [  --disable-gzip          Block gzip'ed transfer of documents.  Note that
390                           this is required if you want content modification
391                           even with gzip-supporting servers.],
392 [if test $enableval = "no"; then
393   AC_DEFINE(FEATURE_DENY_GZIP)
394 fi])
395
396 AC_ARG_ENABLE(force,
397 [  --disable-force         Don't allow blockfile to be bypassed],
398 [if test $enableval = yes; then
399   AC_DEFINE(FEATURE_FORCE_LOAD)
400 fi],AC_DEFINE(FEATURE_FORCE_LOAD))
401
402 AC_ARG_ENABLE(fast-redirects,
403 [  --disable-fast-redirects Don't support fast redirects],
404 [if test $enableval = yes; then
405   AC_DEFINE(FEATURE_FAST_REDIRECTS)
406 fi], AC_DEFINE(FEATURE_FAST_REDIRECTS))
407
408 AC_ARG_ENABLE(killpopup,
409 [  --disable-killpopup     Never block popups],
410 [if test $enableval = yes; then
411   AC_DEFINE(FEATURE_KILL_POPUPS)
412 fi],AC_DEFINE(FEATURE_KILL_POPUPS))
413
414 AC_ARG_ENABLE(stats,
415 [  --disable-stats         Don't keep statistics],
416 [if test $enableval = yes; then
417   AC_DEFINE(FEATURE_STATISTICS)
418 fi],AC_DEFINE(FEATURE_STATISTICS))
419
420 AC_ARG_ENABLE(ie-images,
421 [  --disable-ie-images     Don't auto-detect whether a request from MS Internet
422                           Explorer is for an image or HTML.],
423 [if test $enableval = yes; then
424   AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE)
425 fi],
426 AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE))
427
428 AC_ARG_ENABLE(image-blocking,
429 [  --disable-image-blocking  Don't try to figure out whether a request is 
430                             for an image or HTML - assume HTML.],
431 [if test $enableval = yes; then
432   AC_DEFINE(FEATURE_IMAGE_BLOCKING)
433 fi],
434 AC_DEFINE(FEATURE_IMAGE_BLOCKING))
435
436 AC_ARG_ENABLE(acl-files,
437 [  --disable-acl-files     Prevents the use of ACL files to control access to
438                           the proxy by IP address.],
439 [if test $enableval = yes; then
440   AC_DEFINE(FEATURE_ACL)
441 fi],
442 AC_DEFINE(FEATURE_ACL))
443
444 AC_ARG_ENABLE(trust-files,
445 [  --disable-trust-files   Prevents the use of trust files.],
446 [if test $enableval = yes; then
447   AC_DEFINE(FEATURE_TRUST)
448 fi],
449 AC_DEFINE(FEATURE_TRUST))
450
451 AC_ARG_ENABLE(jar-files,
452 [  --disable-jar-files     Prevents the use of jar files to capture cookies.],
453 [if test $enableval = yes; then
454   AC_DEFINE(FEATURE_COOKIE_JAR)
455 fi],
456 AC_DEFINE(FEATURE_COOKIE_JAR))
457
458 dnl pcre/pcrs is needed for CGI anyway, so
459 dnl the choice is only between static and
460 dnl dynamic:
461
462 AC_ARG_ENABLE(regex-matching,
463 [  --enable-regex-matching=pcre     Use perl-compatible regex for actionsfile
464                                    pattern matching (default)
465   --enable-regex-matching=gnu      Use gnu style regex for actionsfile pattern
466                                    matching (-> bigger binary)
467   --disable-regex-matching         Don't use regex matching, compare URL
468                                    prefix instead (won't shrink birary)],
469 [ regex_matching=$enableval ],
470 [ regex_matching=pcre ])
471
472 AC_ARG_ENABLE(dynamic-pcre,
473 [  --disable-dynamic-pcre           Use the built-in, static pcre, even if
474                                    libpcre is available],
475 [ if test $enableval = "no"; then have_pcre=no; fi ])
476
477 AC_ARG_ENABLE(dynamic-pcrs,
478 [  --disable-dynamic-pcrs           Use the built-in, static pcrs, even if
479                                    libpcrs is available],
480 [ if test $enableval = "no"; then have_pcrs=no; fi ])
481
482
483 # Is the regex URL matching based on libpcreposix, but we
484 # don't have that library?
485 #
486 if test $have_pcreposix = "yes" -o $regex_matching != "pcre"; then
487   dont_miss_pcreposix=yes
488 else
489   dont_miss_pcreposix=no
490 fi
491
492 # If we have libpcre and either we also have pcreposix or
493 # we don't need pcreposix, then link pcre dynamically; else
494 # build it and link statically
495 #
496 if test $have_pcre = "yes" -a $dont_miss_pcreposix = "yes"; then
497   echo "using libpcre"
498   pcre_dyn=yes
499   STATIC_PCRE_ONLY=#
500   LIBS="$LIBS -lpcre"
501 else
502   echo "using built-in static pcre"
503   pcre_dyn=no
504   AC_DEFINE(STATIC_PCRE)
505   STATIC_PCRE_ONLY=
506 fi
507
508 # If we have libpcrs and pcre is linked dynamically
509 # then also link pcrs dynamically, else build and link
510 # pcrs statically
511 #
512 if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then
513   echo "using libpcrs"
514   STATIC_PCRS_ONLY=#
515   LIBS="$LIBS -lpcrs"
516 else
517   echo "using built-in static pcrs"
518   AC_DEFINE(STATIC_PCRS)
519   STATIC_PCRS_ONLY=
520 fi
521
522 # Which method should be used for URL matching?
523 # pcre, gnu regex or prefix matching?
524 #
525 if test $regex_matching = "gnu"; then
526   echo "using gnu regex for URL matching"
527   AC_DEFINE(REGEX_GNU)
528   GNU_REGEX_ONLY=
529   PCRE_REGEX_ONLY=#
530 elif test $regex_matching = "pcre"; then
531   echo "using pcre regex for URL matching"
532   AC_DEFINE(REGEX_PCRE)
533   GNU_REGEX_ONLY=#
534   PCRE_REGEX_ONLY=
535   if test $pcre_dyn = "yes"; then
536     LIBS="$LIBS -lpcreposix"
537   fi
538 else
539   echo -e "using prefix matching for URLs\nHint: This does NOT make the executable any smaller!"
540   GNU_REGEX_ONLY=#
541   PCRE_REGEX_ONLY=#
542 fi
543
544 AC_SUBST(GNU_REGEX_ONLY)
545 AC_SUBST(PCRE_REGEX_ONLY)
546 AC_SUBST(STATIC_PCRE_ONLY)
547 AC_SUBST(STATIC_PCRS_ONLY)
548
549 dnl =================================================================
550 dnl Final cleanup and output
551 dnl =================================================================
552
553 dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it seperately
554 dnl in the Makefile
555 CFLAGS=$old_CFLAGS_nospecial
556 AC_SUBST(SPECIAL_CFLAGS)
557
558 AC_SUBST(PTHREAD_LIB)
559
560 AC_OUTPUT(Makefile)
561