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