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