]> git.ipfire.org Git - thirdparty/squid.git/blob - configure.ac
Fix shell substitution typo in rev.14693
[thirdparty/squid.git] / configure.ac
1 ## Copyright (C) 1996-2016 The Squid Software Foundation and contributors
2 ##
3 ## Squid software is distributed under GPLv2+ license and includes
4 ## contributions from numerous individuals and organizations.
5 ## Please see the COPYING and CONTRIBUTORS files for details.
6 ##
7
8 AC_INIT([Squid Web Proxy],[4.0.10-BZR],[http://bugs.squid-cache.org/],[squid])
9 AC_PREREQ(2.61)
10 AC_CONFIG_HEADERS([include/autoconf.h])
11 AC_CONFIG_AUX_DIR(cfgaux)
12 AC_CONFIG_SRCDIR([src/main.cc])
13 AM_INIT_AUTOMAKE([tar-ustar nostdinc subdir-objects])
14 AC_REVISION($Revision$)dnl
15 AC_PREFIX_DEFAULT(/usr/local/squid)
16 AM_MAINTAINER_MODE
17
18 m4_include([acinclude/ax_with_prog.m4])
19 m4_include([acinclude/init.m4])
20 m4_include([acinclude/squid-util.m4])
21 m4_include([acinclude/compiler-flags.m4])
22 m4_include([acinclude/os-deps.m4])
23 m4_include([acinclude/krb5.m4])
24 m4_include([acinclude/pam.m4])
25 m4_include([acinclude/pkg.m4])
26 m4_include([acinclude/lib-checks.m4])
27 m4_include([acinclude/ax_cxx_compile_stdcxx_11.m4])
28 m4_include([acinclude/ax_cxx_0x_types.m4])
29
30 PRESET_CFLAGS="$CFLAGS"
31 PRESET_CXXFLAGS="$CXXFLAGS"
32 PRESET_LDFLAGS="$LDFLAGS"
33
34 dnl Set default LDFLAGS
35 if test "x$LDFLAGS" = "x" ; then
36 LDFLAGS="-g"
37 fi
38
39 # Check for GNU cc
40 AC_PROG_CC
41 AM_PROG_CC_C_O
42 AC_PROG_CXX
43 AC_LANG([C++])
44 AC_CANONICAL_HOST
45
46 # Clang 3.2 on some CPUs requires -march-native to detect correctly.
47 # GCC 4.3+ can also produce faster executables when its used.
48 # But building inside a virtual machine environment has been found to
49 # cause random Illegal Instruction errors due to mis-detection of CPU.
50 AC_ARG_ENABLE(arch-native,
51 AS_HELP_STRING([--disable-arch-native],[Some compilers offer CPU-specific
52 optimizations with the -march=native parameter.
53 This flag disables the optimization. The default is to
54 auto-detect compiler support and use where available.]), [
55 SQUID_YESNO([$enableval],
56 [Unrecognized argument to --disable-arch-native: $enableval])
57 ])
58 AC_MSG_NOTICE([CPU arch native optimization enabled: ${enable_arch_native:=auto}])
59 if test "x${enable_arch_native}" != "xno"; then
60 SQUID_CC_CHECK_ARGUMENT([squid_cv_check_marchnative],[-march=native])
61 fi
62
63 # might be cross-compiling.
64 # NP: BUILDCXXFLAGS defined at the end of configure after CXXFLAGS fully known.
65 AC_ARG_VAR([BUILDCXX],[path to compiler for building compile-time tools. e.g. cf_gen])
66 if test "x$HOSTCXX" != "x" -a "x$BUILDCXX" = "x"; then
67 AC_MSG_WARN([Cross-compiling with HOSTCXX is deprecated. Uses BUILDCXX instead.])
68 BUILDCXX="$HOSTCXX"
69 fi
70 if test "x$BUILDCXX" = "x"; then
71 BUILDCXX="$CXX"
72 if test "x$squid_cv_check_marchnative" = "xyes"; then
73 CXXFLAGS="$CXXFLAGS -march=native"
74 fi
75 fi
76 AC_SUBST(BUILDCXX)
77
78 AC_MSG_CHECKING([simplified host os])
79 simple_host_os=`echo $host_os|sed 's/[0-9].*//g;s/-.*//g'`
80 squid_host_os_version=`echo $host_os|tr -d "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-"`
81 if test -n "$squid_host_os_version"; then
82 squid_host_os="`echo $simple_host_os| sed s/$squid_host_os_version//g`"
83 else
84 squid_host_os="$simple_host_os"
85 fi
86 AC_MSG_RESULT($squid_host_os (version $squid_host_os_version))
87 # on windows squid_host_os is either mingw or cygwin, version is 32
88
89 # this needs to be before any test is run, to have more standard
90 # functions available on some Unix sysems (e.g. Solaris)
91 if test "x$squid_host_os" = "solaris" -a "x$GCC" != "x" ; then
92 AC_USE_SYSTEM_EXTENSIONS
93 fi
94
95 # If the user did not specify a C++ version.
96 user_cxx=`echo "$PRESET_CXXFLAGS" | grep -o -E "\-std="`
97 if test "x$user_cxx" = "x"; then
98 # Check for C++11 compiler support
99 AX_CXX_COMPILE_STDCXX_11([noext],[mandatory])
100 fi
101
102 # test for programs
103 AC_PROG_RANLIB
104 AC_PROG_CPP
105 AC_PROG_INSTALL
106 AC_PROG_LN_S
107 AC_PROG_EGREP
108
109 AC_PATH_PROG(SH, sh, /bin/sh)
110 AC_PATH_PROG(FALSE, false, /usr/bin/false)
111 AC_PATH_PROG(TRUE, true, /usr/bin/true)
112 AC_PATH_PROG(MV, mv, $FALSE)
113 AC_PATH_PROG(MKDIR, mkdir, $FALSE)
114 AC_PATH_PROG(LN, ln, cp)
115 AC_PATH_PROG(CHMOD, chmod, $FALSE)
116 AC_PATH_PROG(TR, tr, $FALSE)
117 AC_PATH_PROG(RM, rm, $FALSE)
118 AC_PATH_PROG(CPPUNITCONFIG, cppunit-config, false)
119 dnl Libtool 2.2.6 requires: rm -f
120 RM="$RM -f"
121
122 AC_PATH_PROG(PERL, perl, none)
123 if test "x$ac_cv_path_PERL" = "xnone"; then
124 AC_MSG_FAILURE([Perl is required to compile Squid. Please install Perl and then re-run configure ])
125 fi
126 AC_PATH_PROG(POD2MAN, pod2man, $FALSE)
127 AM_CONDITIONAL(ENABLE_POD2MAN_DOC, test "x${ac_cv_path_POD2MAN}" != "x$FALSE")
128
129 dnl set $(AR) if not provided by the build environment
130 if test "x$AR" = "x"; then
131 AC_PATH_PROG(AR, ar, $FALSE)
132 fi
133 AR_R="$AR r"
134 AC_SUBST(AR_R)
135
136 AC_PATH_PROG(LINUXDOC, linuxdoc, $FALSE)
137 AM_CONDITIONAL(ENABLE_RELEASE_DOCS, test "x${ac_cv_path_LINUXDOC}" != "x$FALSE")
138
139 # pre-define DEFAULT_PREFIX, some modules need it.
140 if test "${prefix}" = "NONE" ; then
141 squid_prefix=$ac_default_prefix
142 else
143 squid_prefix=$prefix
144 fi
145 AC_DEFINE_UNQUOTED(DEFAULT_PREFIX,[$squid_prefix],[The install prefix])
146
147 AC_ARG_ENABLE(strict-error-checking,
148 AS_HELP_STRING([--disable-strict-error-checking],[By default squid is compiled
149 with all possible static compiler error-checks enabled.
150 This flag disables the behavior]), [
151 SQUID_YESNO([$enableval],
152 [Unrecognized argument to --disable-strict-error-checking: $enableval])
153 ])
154 AC_MSG_NOTICE([strict error checking enabled: ${enable_strict_error_checking:=yes}])
155
156 AC_MSG_CHECKING(whether to use loadable modules)
157 AC_ARG_ENABLE(loadable-modules,
158 AS_HELP_STRING([--disable-loadable-modules],[do not support loadable modules]) , [
159 SQUID_YESNO([$enableval],
160 [Unrecognized argument to --disable-loadable-modules: $enableval])
161 ])
162 AM_CONDITIONAL(ENABLE_LOADABLE_MODULES, test "x${enable_loadable_modules:=yes}" = "xyes")
163 AC_MSG_RESULT([$enable_loadable_modules])
164
165 if test "x$enable_loadable_modules" = "xyes";
166 then
167 AC_DEFINE(USE_LOADABLE_MODULES, 1, [Support Loadable Modules])
168 AC_ENABLE_SHARED
169 else
170 AC_DISABLE_SHARED
171 fi
172
173 # LT_INIT requires libtool v2, might as well state it loud
174 LT_PREREQ([2.2])
175 LT_INIT([dlopen],[disable-shared])
176 if ! test "${ac_top_build_prefix}" = "";
177 then
178 # LTDL v3-v7 macros assume the autoconf 2.62 variable top_build_prefix is defined
179 # But from autoconf 2.64 its called ac_top_build_prefix and not automatically added to the Makefile
180 # This fixes Linux LTDLv3-v7, and BSD LTDL v2.2
181 top_build_prefix=${ac_top_build_prefix}
182 AC_SUBST(top_build_prefix)
183 fi
184 LTDL_INIT
185
186 dnl LibTool environment is now prepared for setup. Check that it is usable and initialize.
187 LT_LIB_DLLOAD
188
189 # Do we need these unconditionally for "make distcheck" to work?
190 AC_SUBST(INCLTDL)
191 AC_SUBST(LIBLTDL)
192
193 if test "x$enable_loadable_modules" = "xyes";
194 then
195 # Why is this needed? Should not LT_INIT (or LT_LIB_DLLOAD) from libtool do that?
196 LIBADD_DL=${lt_cv_dlopen_libs}
197 AC_SUBST([LIBADD_DL])
198 fi
199
200 SQUID_CC_GUESS_VARIANT
201 SQUID_CC_GUESS_OPTIONS
202
203 dnl find out the exe extension for this platform.
204 dnl If it is not empty, use it for CGI as well.
205 AC_EXEEXT
206 AC_OBJEXT
207
208 if test "x$EXEEXT" = "x" ; then
209 CGIEXT=".cgi"
210 else
211 # automake automatically adds .exe when installing binaries
212 CGIEXT=""
213 fi
214 AC_SUBST(CGIEXT)
215
216 AM_CONDITIONAL(ENABLE_WIN32SPECIFIC,[test "x$squid_host_os" = "xmingw"])
217 AM_CONDITIONAL(ENABLE_WIN32_IPC,[test "x$squid_host_os" = "xmingw"])
218
219 case "$squid_host_os" in
220 mingw)
221 AC_PATH_PROG(WIN32_PSAPI, psapi.dll, none)
222 CFLAGS="$CFLAGS -mthreads"
223 CXXFLAGS="$CXXFLAGS -mthreads -static-libgcc -static-libstdc++"
224 if test "x$ac_cv_path_WIN32_PSAPI" = "xnone"; then
225 AC_MSG_NOTICE([PSAPI.DLL is recommended to run Squid on Windows NT Platform])
226 AC_MSG_NOTICE([Please see PSAPI.DLL section on doc/win32-relnotes.html.])
227 else
228 AC_DEFINE(HAVE_WIN32_PSAPI,1,[Define if you have PSAPI.DLL on Windows systems])
229 LIBS="$LIBS -lpsapi"
230 fi
231 MINGW_LIBS="-lmingwex"
232 AC_SUBST(MINGW_LIBS)
233 ;;
234 freebsd)
235 # FreeBSD places local libraries and packages in /usr/local
236 CFLAGS="$CFLAGS -I/usr/local/include"
237 CXXFLAGS="$CXXFLAGS -I/usr/local/include"
238 LDFLAGS="$LDFLAGS -L/usr/local/lib -Wl,-R/usr/local/lib"
239 ;;
240 *)
241 ;;
242 esac
243
244 dnl Substitutions
245 AC_DEFINE_UNQUOTED(CONFIG_HOST_TYPE, "$host",[Host type from configure])
246
247 AC_DEFINE_UNQUOTED(SQUID_CONFIGURE_OPTIONS, "$ac_configure_args",
248 [configure command line used to configure Squid])
249
250 CACHE_EFFECTIVE_USER="nobody"
251 AC_ARG_WITH(default-user,
252 AS_HELP_STRING([--with-default-user=USER],[System user account for squid permissions. Default: nobody]),
253 [ CACHE_EFFECTIVE_USER="$withval" ]
254 )
255 AC_SUBST(CACHE_EFFECTIVE_USER)
256
257 DEFAULT_LOG_DIR="$localstatedir/logs"
258 AC_ARG_WITH(logdir,
259 AS_HELP_STRING([--with-logdir=PATH],
260 [Default location for squid logs. default: PREFIX/var/logs]), [
261 case $withval in
262 yes|no)
263 AC_MSG_ERROR( --with-logdir requires a directory PATH. --with-logdir=PATH )
264 ;;
265 *)
266 DEFAULT_LOG_DIR="$withval"
267 ;;
268 esac
269 ]
270 )
271 AC_SUBST(DEFAULT_LOG_DIR)
272
273 DEFAULT_PID_FILE="$localstatedir/run/@SERVICE_NAME@.pid"
274 AC_ARG_WITH(pidfile,
275 AS_HELP_STRING([--with-pidfile=PATH],
276 [Default location for squid pid file. Default: PREFIX/var/run/squid.pid]), [
277 case $withval in
278 yes|no)
279 AC_MSG_ERROR( --with-pidfile requires a file PATH. --with-pidfile=PATH )
280 ;;
281 *)
282 DEFAULT_PID_FILE="$withval"
283 ;;
284 esac
285 ])
286 AC_SUBST(DEFAULT_PID_FILE)
287
288 DEFAULT_SWAP_DIR="$localstatedir/cache/squid"
289 AC_ARG_WITH(swapdir,
290 AS_HELP_STRING([--with-swapdir=PATH],
291 [Default location for squid cache directories. Default: PREFIX/var/cache/squid]), [
292 case $withval in
293 yes|no)
294 AC_MSG_ERROR( --with-swapdir requires a directory PATH. --with-swapdir=PATH )
295 ;;
296 *)
297 DEFAULT_SWAP_DIR="$withval"
298 ;;
299 esac
300 ])
301 AC_SUBST(DEFAULT_SWAP_DIR)
302
303 dnl Set Default CFLAGS
304 if test "x$PRESET_CFLAGS" = "x"; then
305 if test "$squid_cv_compiler" = "gcc"; then
306 case "$host" in
307 *-sun-sunos*)
308 # sunos has too many warnings for this to be useful
309 # motorola too
310 ;;
311 *m88k*)
312 # Motorola cc/ld does not like -02 but is ok on -O
313 CFLAGS=`echo $CFLAGS | sed -e 's/-O[0-9]/-O/'`
314 ;;
315 *)
316 CFLAGS="$squid_cv_cc_option_wall $CFLAGS"
317 ;;
318 esac
319 else
320 case "$host" in
321 *mips-sgi-irix6.*)
322 # suggested by Rafael Seidl <rafaels@cthulhu.engr.sgi.com>
323 CFLAGS="$squid_cv_cc_option_optimize -OPT:Olimit=0:space=OFF \
324 -woff 1009,1014,1110,1116,1183,1185,1188,1204,1230,1233,1355 \
325 -Wl,-woff,85,-woff,84,-woff,134 \
326 -nostdinc -I/usr/include -D_BSD_SIGNALS $CFLAGS"
327 CXXFLAGS="$squid_cv_cc_option_optimize -OPT:Olimit=0:space=OFF \
328 -woff 1009,1014,1110,1116,1183,1185,1188,1204,1230,1233,1355 \
329 -Wl,-woff,85,-woff,84,-woff,134 \
330 -nostdinc -I/usr/include -D_BSD_SIGNALS $CXXFLAGS"
331 ;;
332 *)
333 ;;
334 esac
335 fi
336 fi
337
338 dnl set squid required flags
339 if test "$squid_cv_compiler" = "gcc"; then
340 case "$squid_host_os" in
341 mingw)
342 dnl Guido Serassio (serassio@squid-cache.org) 20070811
343 dnl Using the latest MinGW (gcc 3.4.5 + mingw-runtime 3.13) cannot build with
344 dnl -Werror -Wmissing-prototypes -Wmissing-declarations
345 dnl TODO: check if the problem will be present in any other newer MinGW release.
346 SQUID_CFLAGS="$squid_cv_cc_option_wall -Wpointer-arith -Wwrite-strings -Wcomments -Wshadow"
347 ;;
348 *)
349 SQUID_CFLAGS="$squid_cv_cc_option_wall -Wpointer-arith -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wcomments -Wshadow"
350 ;;
351 esac
352 SQUID_CXXFLAGS="$squid_cv_cc_option_wall -Wpointer-arith -Wwrite-strings -Wcomments -Wshadow -Woverloaded-virtual"
353 else
354 SQUID_CFLAGS=
355 SQUID_CXXFLAGS=
356 fi
357
358 dnl CentOS (and RHEL) still define ntohs() using deprecated C++ features
359 SQUID_CC_REQUIRE_ARGUMENT([ac_cv_require_wno_deprecated_register],[-Werror -Wno-deprecated-register],[[#include <arpa/inet.h>]],[[int fox=ntohs(1);]])
360
361 if test "x$enable_strict_error_checking" != "xno"; then
362 SQUID_CFLAGS="$SQUID_CFLAGS $squid_cv_cc_option_werror"
363 SQUID_CXXFLAGS="$SQUID_CXXFLAGS $squid_cv_cxx_option_werror"
364 fi
365
366 if test "x$ac_cv_require_wno_deprecated_register" = "xyes"; then
367 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -Wno-deprecated-register"
368 fi
369
370 # squid_cv_cc_arg_pipe is set by SQUID_CC_GUESS_OPTIONS
371 SQUID_CXXFLAGS="$SQUID_CXXFLAGS $squid_cv_cc_arg_pipe"
372 SQUID_CFLAGS="$SQUID_CFLAGS $squid_cv_cc_arg_pipe"
373
374 # possibly include some build info tag into squid -v
375 SQUID_EMBED_BUILD_INFO
376
377 AC_ARG_ENABLE(optimizations,
378 AS_HELP_STRING([--disable-optimizations],
379 [Do not compile Squid with compiler optimizations enabled.
380 Optimization is good for production builds, but not
381 good for debugging. During development, use
382 --disable-optimizations to reduce compilation times
383 and allow easier debugging. This option implies
384 --disable-inline]), [
385 if test "x$enableval" = "xno" ; then
386 AC_MSG_NOTICE([Disabling compiler optimizations (-O flag)])
387 CFLAGS="`echo $CFLAGS | sed -e 's/-O[[0-9g]]*//'`"
388 CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-O[[0-9g]]*//'`"
389 enable_inline="no"
390 fi
391 ])
392
393 AH_TEMPLATE(_USE_INLINE_,[Include inline methods into header file])
394 AC_ARG_ENABLE(inline,
395 AS_HELP_STRING([--disable-inline],
396 [Do not compile trivial methods as inline. Squid
397 is coded with much of the code able to be inlined.
398 Inlining is good for production builds, but not
399 good for development. During development, use
400 --disable-inline to reduce compilation times and
401 allow incremental builds to be quick. For
402 production builds, or load tests, use
403 --enable-inline to have squid make all trivial
404 methods inlinable by the compiler.]), [
405 SQUID_YESNO([$enableval],
406 [Unrecognized argument to --disable-inline: $enableval])
407 ])
408 AC_MSG_NOTICE([inlining optimizations enabled: ${enable_inline:=yes}])
409 SQUID_DEFINE_BOOL(_USE_INLINE_,$enable_inline,
410 [Include inline methods into header file])
411 # to be used by sub-commands
412 export enable_inline
413
414 AC_ARG_ENABLE(debug-cbdata,
415 AS_HELP_STRING([--enable-debug-cbdata],
416 [Provide some debug information in cbdata]), [
417 SQUID_YESNO([$enableval],
418 [unrecognized argument to --enable-debug-cbdata: $enableval])
419 ])
420 SQUID_DEFINE_BOOL(USE_CBDATA_DEBUG,${enable_debug_cbdata:=no},
421 [Enable support for cbdata debug information])
422 AC_MSG_NOTICE([cbdata debugging enabled: $enable_debug_cbdata])
423
424
425 dnl Nasty hack to get autoconf 2.64 on Linux to run.
426 dnl all other uses of RUN_IFELSE are wrapped inside CACHE_CHECK which breaks on 2.64
427 AC_RUN_IFELSE([AC_LANG_SOURCE([[ int main(int argc, char **argv) { return 0; } ]])],[],[],[:])
428
429 AH_TEMPLATE(XMALLOC_STATISTICS,[Define to have malloc statistics])
430 AC_ARG_ENABLE(xmalloc-statistics,
431 AS_HELP_STRING([--enable-xmalloc-statistics],
432 [Show malloc statistics in status page]), [
433 SQUID_YESNO([$enableval],
434 [unrecognized argument to --enable-xmalloc-statistics: $enableval])
435 ])
436 SQUID_DEFINE_BOOL(XMALLOC_STATISTICS,${enable_xmalloc_statistics:=no},
437 [Show malloc statistics in status page])
438 AC_MSG_NOTICE([xmalloc stats display: $enable_xmalloc_statistics])
439
440 squid_opt_aufs_threads=""
441 AC_ARG_WITH(aufs-threads,
442 AS_HELP_STRING([--with-aufs-threads=N_THREADS],
443 [Tune the number of worker threads for the aufs object store.]), [
444 case $withval in
445 [[0-9]]*)
446 squid_opt_aufs_threads=$withval
447 ;;
448 *)
449 AC_MSG_ERROR(--with-aufs-threads expects a numeric argument)
450 ;;
451 esac
452 ])
453 if test "x$squid_opt_aufs_threads" != "x"; then
454 AC_MSG_NOTICE([With $squid_opt_aufs_threads aufs threads])
455 AC_DEFINE_UNQUOTED(AUFS_IO_THREADS,$squid_opt_aufs_threads,
456 [Defines how many threads aufs uses for I/O])
457 fi
458
459 AC_ARG_WITH(dl, AS_HELP_STRING([--with-dl],[Use dynamic linking]))
460 if test "x$with_dl" = "xyes"; then
461 AC_MSG_NOTICE([With dl])
462 fi
463
464 ## check for atomics library before anything that might need it
465 # AC_SEARCH_LIBS pollutes LIBS
466 SQUID_STATE_SAVE(LIBATOMIC)
467 AC_SEARCH_LIBS([__atomic_load_8],[atomic],[
468 test "$ac_res" = "none required" || ATOMICLIB=$ac_res],[])
469 SQUID_STATE_ROLLBACK(LIBATOMIC)
470 AC_SUBST(ATOMICLIB)
471
472 AC_SEARCH_LIBS([shm_open], [rt])
473 if test "x$ac_cv_search_shm_open" != "xno" ; then
474 AC_DEFINE(HAVE_SHM,1,[Support shared memory features])
475 fi
476
477 AC_MSG_CHECKING([for DiskIO modules to be enabled])
478 squid_disk_module_candidates=""
479 squid_opt_enable_diskio="auto" #values: no, yes, "auto"(=yes+detect modules)
480 AC_ARG_ENABLE(disk-io,
481 AS_HELP_STRING([--enable-disk-io="list of modules"],
482 [Build support for the list of disk I/O modules.
483 Set without a value or omitted, all available modules will be built.
484 See src/DiskIO for a list of available modules, or
485 Programmers Guide section on DiskIO
486 for details on how to build your custom disk module]), [
487 case $enableval in
488 yes)
489 ${TRUE}
490 #do nothing, "auto" is ok
491 ;;
492 no)
493 squid_opt_enable_diskio="no"
494 ;;
495 *)
496 squid_opt_enable_diskio="yes"
497 squid_disk_module_candidates=" `echo $enableval| sed -e 's/,/ /g;s/ */ /g'` "
498 SQUID_CLEANUP_MODULES_LIST([squid_disk_module_candidates])
499 ;;
500 esac
501 ])
502
503 # if requested to autodetect, find out what we have
504 if test "x$squid_opt_enable_diskio" = "xauto"; then
505 squid_opt_enable_diskio="yes"
506 SQUID_LOOK_FOR_MODULES([$srcdir/src/DiskIO],[squid_disk_module_candidates])
507 if test "x$ac_cv_search_shm_open" = "xno" ; then
508 # disable IpcIo
509 squid_disk_module_candidates=`echo $squid_disk_module_candidates|sed 's/IpcIo//'`
510 fi
511 fi
512
513 AC_MSG_RESULT([${squid_disk_module_candidates:-none}])
514 SQUID_CHECK_EXISTING_MODULES([$srcdir/src/DiskIO],[squid_disk_module_candidates])
515 SQUID_DEFINE_BOOL(USE_DISKIO,$squid_opt_enable_diskio,
516 [DiskIO modules are expected to be available.])
517
518
519
520 dnl Some autoconf.h defines we might enable later...
521 AC_ARG_WITH(pthreads,AS_HELP_STRING([--without-pthreads],[Disable POSIX Threads]))
522 AC_ARG_WITH(aio, AS_HELP_STRING([--without-aio],[Do not use POSIX AIO. Default: auto-detect]))
523 ENABLE_WIN32_AIOPS=0
524 squid_opt_use_aio=
525 squid_opt_use_diskthreads=
526 AIOLIB=
527
528 dnl Setup the module paths etc.
529 DISK_LIBS=
530 DISK_MODULES=
531 AH_TEMPLATE(HAVE_DISKIO_MODULE_AIO, [Whether POSIX AIO Disk I/O module is built])
532 AH_TEMPLATE(HAVE_DISKIO_MODULE_BLOCKING, [Whether Blocking Disk I/O module is built])
533 AH_TEMPLATE(HAVE_DISKIO_MODULE_DISKDAEMON, [Whether DiskDaemon Disk I/O module is built])
534 AH_TEMPLATE(HAVE_DISKIO_MODULE_DISKTHREADS, [Whether DiskThreads Disk I/O module is built])
535 AH_TEMPLATE(HAVE_DISKIO_MODULE_IPCIO, [Whether IpcIo Disk I/O module is built])
536 AH_TEMPLATE(HAVE_DISKIO_MODULE_MMAPPED, [Whether Mmapped Disk I/O module is built])
537 for module in $squid_disk_module_candidates none; do
538 # maybe not needed
539 if test "x$module" = "xnone"; then
540 continue
541 fi
542 if ! test -d "$srcdir/src/DiskIO/$module"; then
543 AC_MSG_ERROR(disk-io $module does not exist)
544 fi
545 case "$module" in
546
547 AIO)
548 dnl Check for POSIX AIO availability
549 squid_opt_use_aio="yes"
550 AIOLIB=
551 if test "x$with_aio" != "xno"; then
552 have_aio_header=no
553 AC_CHECK_HEADERS(aio.h,[have_aio_header=yes])
554 dnl On some systems POSIX AIO functions are in librt
555 dnl On some systems POSIX AIO functions are in libaio
556 AC_CHECK_LIB(rt,aio_read,[AIOLIB="-lrt"],AC_CHECK_LIB(aio,aio_read,[AIOLIB="-laio"],[]))
557 dnl Enable AIO if the library and headers are found
558 if test "x$AIOLIB" != "x" && test "x$have_aio_header" = "xyes"; then
559 AC_MSG_NOTICE([Native POSIX AIO support detected.])
560 squid_opt_use_aio="yes"
561 else
562 dnl Windows does things differently. We provide wrappers.
563 dnl TODO: Windows really needs its own DiskIO module or its Overlaped IO
564 case "$squid_host_os" in
565 mingw)
566 squid_opt_use_aio="yes"
567 AC_MSG_NOTICE([Windows being built. Maybe-enable POSIX AIO.])
568 ;;
569 *)
570 AC_MSG_NOTICE([Native POSIX AIO support not detected. AIO automatically disabled.])
571 squid_opt_use_aio="no"
572 ;;
573 esac
574 fi
575 else
576 AC_MSG_NOTICE([POSIX AIO support manually disabled.])
577 squid_opt_use_aio="no"
578 fi
579 dnl Use the POSIX AIO pieces if we actually need them.
580 if test "x$squid_opt_use_aio" = "xyes" ; then
581 DISK_MODULES="$DISK_MODULES AIO"
582 AC_DEFINE([HAVE_DISKIO_MODULE_AIO],1,[POSIX AIO Disk I/O module is built])
583 case "$squid_host_os" in
584 mingw)
585 ENABLE_WIN32_AIO=1
586 AC_MSG_NOTICE([Replacing AIO DiskIO module with: Windows overlapped I/O support])
587 ;;
588 *)
589 AC_MSG_NOTICE([Enabling AIO DiskIO module])
590 ;;
591 esac
592 else
593 AC_MSG_NOTICE([AIO DiskIO Module disabled. Missing POSIX AIO support.])
594 squid_disk_module_candidates_AIO=no
595 fi
596 ;;
597
598 Blocking)
599 AC_MSG_NOTICE([Enabling Blocking DiskIO module])
600 DISK_MODULES="$DISK_MODULES Blocking"
601 AC_DEFINE([HAVE_DISKIO_MODULE_BLOCKING],1,[Blocking Disk I/O module is built])
602 ;;
603
604 DiskDaemon)
605 case "$squid_host_os" in
606 mingw)
607 AC_MSG_NOTICE(["DiskDaemon not supported on MinGW"])
608 squid_disk_module_candidates_DiskDaemon=no
609 ;;
610 *)
611 AC_MSG_NOTICE([Enabling DiskDaemon DiskIO module])
612 DISK_MODULES="$DISK_MODULES DiskDaemon"
613 AC_DEFINE([HAVE_DISKIO_MODULE_DISKDAEMON],1,[DiskDaemon Disk I/O module is built])
614 ;;
615 esac
616 ;;
617
618 DiskThreads)
619 squid_opt_use_diskthreads="yes"
620 LIBPTHREADS=
621 SQUID_STATE_SAVE([diskthreads_state],[SQUID_CFLAGS SQUID_CXXFLAGS])
622 if test "x$with_pthreads" != "xno"; then
623 dnl TODO: this needs to be extended to handle more systems and better
624 dnl REF: http://www.openldap.org/lists/openldap-bugs/200006/msg00070.html
625 dnl REF: http://autoconf-archive.cryp.to/acx_pthread.html
626 case "$squid_host_os" in
627 mingw)
628 ENABLE_WIN32_AIOPS=1
629 AC_MSG_NOTICE([Windows threads support automatically enabled])
630 ;;
631 freebsd)
632 if test `echo "$squid_host_os_version" | tr -d .` -lt 70 ; then
633 AC_MSG_NOTICE(pthread library requires FreeBSD 7 or later)
634 squid_opt_use_diskthreads="no"
635 else
636 SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT"
637 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT"
638 if test "x$GCC" = "xyes" -a "x$PRESET_LDFLAGS" = "x" ; then
639 LDFLAGS="$LDFLAGS -pthread"
640 fi
641 fi
642 ;;
643 openbsd)
644 if test `echo "$squid_host_os_version" | tr -d .` -lt 52 ; then
645 AC_MSG_NOTICE(pthread library requires OpenBSD 5.2 or later)
646 squid_opt_use_diskthreads="no"
647 else
648 SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT"
649 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT"
650 LDFLAGS="$LDFLAGS -lpthread"
651 fi
652 ;;
653 solaris)
654 if test "x$GCC" = "xyes" ; then
655 SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT -pthreads"
656 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT -pthreads"
657 AC_CHECK_LIB(pthread, pthread_create ,[LIBPTHREADS="-lpthread"], [
658 AC_MSG_NOTICE(pthread library required but cannot be found.)
659 squid_opt_use_diskthreads="no"
660 ])
661 else
662 dnl test for -lpthread first. libc version is a stub apparently on Solaris.
663 SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT -lpthread"
664 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT -lpthread"
665 AC_SEARCH_LIBS([pthread_create],[pthread thread],[
666 LIBPTHREADS="" #in LIBS
667 ],[
668 AC_MSG_NOTICE(pthread library required but cannot be found.)
669 squid_opt_use_diskthreads="no"
670 ])
671 fi
672 ;;
673 *)
674 SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT"
675 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT"
676 AC_CHECK_LIB(pthread, pthread_create ,[LIBPTHREADS="-lpthread"], [
677 AC_MSG_NOTICE(pthread library required but cannot be found.)
678 squid_opt_use_diskthreads="no"
679 ])
680 ;;
681 esac
682 else
683 AC_MSG_NOTICE([Native pthreads support manually disabled.])
684 squid_opt_use_diskthreads="no"
685 fi
686 if test "x$squid_opt_use_diskthreads" = "xyes" ; then
687 AC_MSG_NOTICE([Enabling DiskThreads DiskIO module])
688 DISK_MODULES="$DISK_MODULES DiskThreads"
689 AC_DEFINE([HAVE_DISKIO_MODULE_DISKTHREADS],1,[DiskThreads Disk I/O module is built])
690 else
691 AC_MSG_NOTICE([Native pthreads support disabled. DiskThreads module automaticaly disabled.])
692 SQUID_STATE_ROLLBACK([diskthreads_state])
693 squid_disk_module_candidates_DiskThreads=no
694 fi
695 ;;
696
697 IpcIo)
698 if test "x$ac_cv_search_shm_open" = "xno" ; then
699 AC_MSG_NOTICE([DiskIO IpcIo module requires shared memory support])
700 squid_disk_module_candidates_IpcIo=no
701 else
702 AC_MSG_NOTICE([Enabling IpcIo DiskIO module])
703 DISK_MODULES="$DISK_MODULES IpcIo"
704 AC_DEFINE([HAVE_DISKIO_MODULE_IPCIO],1,[IpcIo Disk I/O module is built])
705 fi
706 ;;
707
708 Mmapped)
709 dnl TODO: use availability of sys/mman.h and/or mmap to define
710 dnl OR support windows mmap functions
711 if test "x$squid_host_os" = "xmingw" ; then
712 AC_MSG_NOTICE([Mmapped DiskIO is not available on Mingw])
713 squid_disk_module_candidates_Mmapped=no
714 else
715 AC_MSG_NOTICE([Enabling Mmapped DiskIO module])
716 DISK_MODULES="$DISK_MODULES Mmapped"
717 AC_DEFINE([HAVE_DISKIO_MODULE_MMAPPED],1,[Mmapped Disk I/O module is built])
718 fi
719 ;;
720
721 *)
722 AC_MSG_NOTICE([Enabling $module DiskIO module])
723 DISK_LIBS="$DISK_LIBS lib${module}.la"
724 DISK_MODULES="$DISK_MODULES ${module}"
725 ;;
726 esac
727 done
728 AC_MSG_NOTICE([IO Modules built: $DISK_MODULES])
729 AC_SUBST(DISK_MODULES)
730 AC_SUBST(DISK_LIBS)
731 AM_CONDITIONAL(ENABLE_DISKIO_AIO, test "x$squid_disk_module_candidates_AIO" = "xyes")
732 AC_SUBST(AIOLIB)
733 AM_CONDITIONAL(ENABLE_WIN32_AIO, test "x$squid_disk_module_candidates_AIO" = "xyes" -a "x$ENABLE_WIN32_AIO" = "x1")
734 AM_CONDITIONAL(ENABLE_DISKIO_BLOCKING, test "x$squid_disk_module_candidates_Blocking" = "xyes")
735 AM_CONDITIONAL(ENABLE_DISKIO_DISKDAEMON, test "x$squid_disk_module_candidates_DiskDaemon" = "xyes")
736 AM_CONDITIONAL(ENABLE_DISKIO_DISKTHREADS, test "x$squid_disk_module_candidates_DiskThreads" = "xyes")
737 AC_SUBST(LIBPTHREADS)
738 AM_CONDITIONAL(ENABLE_WIN32_AIOPS, test "x$squid_disk_module_candidates_DiskThreads" = "xyes" -a "x$ENABLE_WIN32_AIOPS" = "x1")
739 AM_CONDITIONAL(ENABLE_DISKIO_IPCIO, test "x$squid_disk_module_candidates_IpcIo" = "xyes")
740 AM_CONDITIONAL(ENABLE_DISKIO_MMAPPED, test "x$squid_disk_module_candidates_Mmapped" = "xyes")
741
742 dnl Check what Storage formats are wanted.
743 dnl This version will error out with a message saying why if a required DiskIO is missing.
744 squid_opt_enable_storeio=auto
745 AC_ARG_ENABLE([storeio],
746 AS_HELP_STRING([--enable-storeio="list of modules"],
747 [Build support for the list of store I/O modules.
748 The default is only to build the "ufs" module.
749 See src/fs for a list of available modules, or
750 Programmers Guide section <not yet written>
751 for details on how to build your custom store module]), [
752 case $enableval in
753 yes)
754 squid_opt_enable_storeio=auto
755 ;;
756 no)
757 squid_opt_enable_storeio=no
758 ;;
759 *)
760 squid_opt_enable_storeio=yes
761 squid_storeio_module_candidates="`echo $enableval| sed -e 's/,/ /g;s/ */ /g'`"
762 # ufs is really always needed as it has low-level routines
763 # if it is a dupe it will be cleaned-up later
764 squid_storeio_module_candidates="$squid_storeio_module_candidates ufs"
765 ;;
766 esac
767 ])
768 if test "x$squid_opt_enable_storeio" = "xauto"; then
769 squid_opt_enable_storeio=yes
770 AC_MSG_CHECKING([for available StoreIO modules])
771 SQUID_LOOK_FOR_MODULES([$srcdir/src/fs],[squid_storeio_module_candidates])
772 AC_MSG_RESULT([$squid_storeio_module_candidates])
773 fi
774
775 SQUID_CLEANUP_MODULES_LIST([squid_storeio_module_candidates])
776 SQUID_CHECK_EXISTING_MODULES([$srcdir/src/fs],[squid_storeio_module_candidates])
777 AC_MSG_NOTICE([Store modules built: $squid_storeio_module_candidates])
778
779 for fs in $squid_storeio_module_candidates none; do
780 case "$fs" in
781 diskd)
782 if test "x$squid_disk_module_candidates_Blocking" != "xyes" -a \
783 "$squid_disk_module_candidates_DiskDaemon" != "yes" ; then
784 AC_MSG_ERROR([Storage diskd module requires DiskIO module: Blocking or DiskDaemon])
785 fi
786 ;;
787 aufs)
788 if test "x$squid_disk_module_candidates_Blocking" != "xyes" -a \
789 "$squid_disk_module_candidates_DiskThreads" != "yes" ; then
790 AC_MSG_ERROR([Storage module aufs requires DiskIO module: Blocking or DiskThreads])
791 fi
792 ;;
793 rock)
794 if test "x$squid_disk_module_candidates_IpcIo" != "xyes" -a \
795 "x$squid_disk_module_candidates_Blocking" != "xyes"; then
796 AC_MSG_ERROR([Storage module Rock requires DiskIO module: Blocking or IpcIo])
797 fi
798 squid_do_build_rock=true
799 ;;
800 ufs)
801 if test "x$squid_disk_module_candidates_Blocking" != "xyes"; then
802 AC_MSG_ERROR([Storage module ufs requires DiskIO module: Blocking])
803 fi
804 squid_do_build_ufs=true
805 ;;
806 esac
807 done
808
809 AM_CONDITIONAL(ENABLE_FS_UFS, test "x$squid_do_build_ufs" = "xtrue")
810 AM_CONDITIONAL(ENABLE_FS_ROCK, test "x$squid_do_build_rock" = "xtrue")
811 dnl hack: need to define those even if not used in the build system to
812 dnl make sure that global FS objects are linked to the squid binary.
813 AH_TEMPLATE(HAVE_FS_UFS, "Define to 1 if ufs filesystem module is build")
814 AH_TEMPLATE(HAVE_FS_AUFS, "Define to 1 if aufs filesystem module is build")
815 AH_TEMPLATE(HAVE_FS_DISKD, "Define to 1 if diskd filesystem module is build")
816 AH_TEMPLATE(HAVE_FS_ROCK, "Define to 1 if rock filesystem module is build")
817
818
819 dnl got final squid_storeio_module_candidates, build library lists
820 dnl This list will not be needed when each fs library has its own Makefile
821 STORE_LIBS_TO_BUILD=
822 dnl File system libraries to link executables with.
823 dnl These are the same as STORE_LIBS_TO_BUILD, but with a path
824 STORE_LIBS_TO_ADD=
825 for fs in $squid_storeio_module_candidates; do
826 STORE_LIBS_TO_BUILD="$STORE_LIBS_TO_BUILD lib${fs}.la"
827 STORE_LIBS_TO_ADD="$STORE_LIBS_TO_ADD fs/lib${fs}.la"
828 SQUID_TOUPPER_VAR_CONTENTS([fs])
829 AC_DEFINE_UNQUOTED(HAVE_FS_${fs}, 1)
830 done
831
832 AC_SUBST(STORE_LIBS_TO_BUILD)
833 AC_SUBST(STORE_LIBS_TO_ADD)
834 AC_SUBST(STORE_TESTS)
835
836
837 dnl At lest one removal policy is always needed.
838 dnl 'lru' removal policy is currently hard-coded by name for tests
839 dnl so we must set it as default.
840 REPL_POLICIES="lru"
841 AC_ARG_ENABLE(removal-policies,
842 AS_HELP_STRING([--enable-removal-policies="list of policies"],
843 [Build support for the list of removal policies.
844 The default is only to build the "lru" module.
845 See src/repl for a list of available modules, or
846 Programmers Guide section 9.9 for details on how
847 to build your custom policy]), [
848 case $enableval in
849 yes)
850 SQUID_LOOK_FOR_MODULES([$srcdir/src/repl],[REPL_POLICIES])
851 ;;
852 no)
853 ;;
854 *)
855 REPL_POLICIES="`echo $enableval| sed -e 's/,/ /g;s/ */ /g'`"
856 ;;
857 esac
858 ])
859 if test "x$REPL_POLICIES" != "x" ; then
860 SQUID_CHECK_EXISTING_MODULES([$srcdir/src/repl],[REPL_POLICIES])
861 AC_MSG_NOTICE([Removal policies to build: $REPL_POLICIES])
862 REPL_OBJS="repl/lib`echo $REPL_POLICIES|sed -e 's% %.a repl/lib%g'`.a"
863 REPL_LIBS="`echo $REPL_OBJS|sed -e 's%repl/%%g'`"
864 fi
865 AC_SUBST(REPL_POLICIES)
866 AC_SUBST(REPL_OBJS)
867 AC_SUBST(REPL_LIBS)
868
869 AM_CONDITIONAL(ENABLE_PINGER, false)
870 AC_ARG_ENABLE(icmp,
871 AS_HELP_STRING([--enable-icmp],[Enable ICMP pinging and Network Measurement]),
872 [ if test "x$enableval" = "xyes" ; then
873 AC_MSG_NOTICE([ICMP enabled])
874 AC_DEFINE(USE_ICMP,1,[Define to use Squid ICMP and Network Measurement features (highly recommended!)])
875 AM_CONDITIONAL(ENABLE_PINGER, true)
876 fi
877 ])
878
879 AM_CONDITIONAL(ENABLE_DELAY_POOLS, false)
880 AC_ARG_ENABLE(delay-pools,
881 AS_HELP_STRING([--enable-delay-pools],[Enable delay pools to limit bandwidth usage]),
882 [ if test "x$enableval" = "xyes" ; then
883 AC_MSG_NOTICE([Delay pools enabled])
884 AC_DEFINE([USE_DELAY_POOLS],1,[Traffic management via "delay pools".])
885 AM_CONDITIONAL(ENABLE_DELAY_POOLS, true)
886 fi
887 ])
888
889 dnl disable generic/common adaptation support by default
890 squid_opt_use_adaptation=no
891
892 squid_opt_use_esi=yes
893 AH_TEMPLATE([USE_SQUID_ESI],
894 [Define to enable the ESI processor and Surrogate header support])
895 AC_ARG_ENABLE(esi,
896 AS_HELP_STRING([--enable-esi],
897 [Enable ESI for accelerators. Benefits from expat or libxml2.
898 Enabling ESI will cause squid reverse proxies to be capable
899 of the Edge Acceleration Specification (www.esi.org).]),
900 [squid_opt_use_esi=$enableval], [squid_opt_use_esi=no])
901 HAVE_LIBEXPAT=0
902 EXPATLIB=
903 HAVE_LIBXML2=0
904 XMLLIB=
905 if test "x$squid_opt_use_esi" = "xyes" ; then
906 AC_MSG_NOTICE([Enabling ESI processor and Surrogate header support.])
907 AC_DEFINE(USE_SQUID_ESI,1,
908 [Compile the ESI processor and Surrogate header support])
909 else
910 AC_MSG_NOTICE([Disabling ESI processor])
911 fi
912
913 # ESI support libraries: expat
914 AC_ARG_WITH(expat, AS_HELP_STRING([--without-expat],[Do not use expat for ESI. Default: auto-detect]))
915 if test "x$squid_opt_use_esi" = "xyes" -a "x$with_expat" != "xno" ; then
916 AC_CHECK_LIB([expat], [main], [EXPATLIB="-lexpat"; HAVE_LIBEXPAT=1])
917 AC_CHECK_HEADERS([expat.h])
918 AC_DEFINE_UNQUOTED(HAVE_LIBEXPAT, $HAVE_LIBEXPAT, [Define to 1 if you have the expat library])
919 if test "x$with_expat" = "xyes" -a "x$HAVE_LIBEXPAT" != "x1" ; then
920 AC_MSG_ERROR([Required library expat is not able to be found.])
921 fi
922 fi
923
924 AC_ARG_WITH(libxml2, AS_HELP_STRING([--without-libxml2],[Do not use libxml2 for ESI. Default: auto-detect]))
925 if test "x$squid_opt_use_esi" = "xyes" -a "x$with_libxml2" != "xno" ; then
926 AC_CHECK_LIB([xml2], [main], [XMLLIB="-lxml2"; HAVE_LIBXML2=1])
927 dnl Find the main header and include path...
928 AC_CACHE_CHECK([location of libxml2 include files], [ac_cv_libxml2_include], [
929 AC_CHECK_HEADERS([libxml/parser.h], [], [
930 AC_MSG_NOTICE([Testing in /usr/include/libxml2])
931 SAVED_CPPFLAGS="$CPPFLAGS"
932 CPPFLAGS="-I/usr/include/libxml2 $CPPFLAGS"
933 unset ac_cv_header_libxml_parser_h
934 AC_CHECK_HEADERS([libxml/parser.h], [ac_cv_libxml2_include="-I/usr/include/libxml2"], [
935 AC_MSG_NOTICE([Testing in /usr/local/include/libxml2])
936 CPPFLAGS="-I/usr/local/include/libxml2 $SAVED_CPPFLAGS"
937 unset ac_cv_header_libxml_parser_h
938 AC_CHECK_HEADERS([libxml/parser.h], [ac_cv_libxml2_include="-I/usr/local/include/libxml2"], [
939 AC_MSG_NOTICE([Failed to find libxml2 header file libxml/parser.h])
940 ])
941 ])
942 CPPFLAGS="$SAVED_CPPFLAGS"
943 ])
944 ])
945 if test "x$ac_cv_libxml2_include" != "x"; then
946 SQUID_CXXFLAGS="$ac_cv_libxml2_include $SQUID_CXXFLAGS"
947 CPPFLAGS="$ac_cv_libxml2_include $CPPFLAGS"
948 fi
949 dnl Now that we know where to look find the headers...
950 AC_CHECK_HEADERS(libxml/parser.h libxml/HTMLparser.h libxml/HTMLtree.h)
951 AC_DEFINE_UNQUOTED(HAVE_LIBXML2, $HAVE_LIBXML2, [Define to 1 if you have the libxml2 library])
952 if test "x$with_libxml2" = "xyes" -a "$HAVE_LIBXML2" != "1" ; then
953 AC_MSG_ERROR([Required library libxml2 is not able to be found.])
954 fi
955 fi
956
957 AM_CONDITIONAL(ENABLE_ESI, test "x$squid_opt_use_esi" = "xyes")
958 AM_CONDITIONAL(ENABLE_LIBEXPAT, test "$HAVE_LIBEXPAT" = 1)
959 AC_SUBST(EXPATLIB)
960 AM_CONDITIONAL(ENABLE_LIBXML2, test "$HAVE_LIBXML2" = 1)
961 AC_SUBST(XMLLIB)
962
963 # icap argument handling
964 AC_ARG_ENABLE(icap-client,
965 AS_HELP_STRING([--disable-icap-client],[Disable the ICAP client.]),[
966 SQUID_YESNO([$enableval],[Unrecognized argument to --disable-icap-client: $enableval])
967 ])
968 SQUID_DEFINE_BOOL(ICAP_CLIENT,${enable_icap_client:=yes}, [Enable ICAP client features in Squid])
969 ICAP_LIBS=""
970 if test "x$enable_icap_client" != "xno" ; then
971 ICAP_LIBS="icap/libicap.la"
972 squid_opt_use_adaptation=yes
973 fi
974 AM_CONDITIONAL(ENABLE_ICAP_CLIENT, test "x$enable_icap_client" != "xno")
975 AC_SUBST(ICAP_LIBS)
976
977 squid_opt_use_ecap=1
978 AC_MSG_CHECKING(whether to support eCAP)
979 AC_ARG_ENABLE(ecap,
980 AS_HELP_STRING([--enable-ecap],[support loadable content adaptation modules]), [
981 case "${enableval}" in
982 yes|no) squid_opt_use_ecap=$enableval ;;
983 *) AC_MSG_ERROR(bad value ${enableval} for --enable-ecap) ;;
984 esac
985 AC_MSG_RESULT([$squid_opt_use_ecap, explicitly])
986 ], [
987 squid_opt_use_ecap=no;
988 AC_MSG_RESULT([$squid_opt_use_ecap, implicitly])
989 ]
990 )
991
992 dnl Necessary if the first PKG_CHECK_MODULES call is conditional
993 PKG_PROG_PKG_CONFIG
994
995 dnl Perform configuration consistency checks for eCAP
996 if test "x$squid_opt_use_ecap" != "xno";
997 then
998 dnl eCAP support requires loadable modules, which are enabled by default
999 if test "x$enable_loadable_modules" != "xyes"
1000 then
1001 AC_MSG_ERROR([eCAP support requires loadable modules. Please do not use --disable-loadable-modules with --enable-ecap.])
1002 fi
1003
1004 if test -n "$PKG_CONFIG"; then
1005 dnl eCAP support requires libecap.
1006 dnl This Squid supports libecap v1.0.x.
1007 dnl Use EXT_ prefix to distinguish external libecap (that we check for
1008 dnl here) from our own convenience ecap library in Makefiles.
1009 PKG_CHECK_MODULES([EXT_LIBECAP],[libecap >= 1.0 libecap < 1.1])
1010 else
1011 AC_MSG_NOTICE([eCAP support requires pkg-config to verify the correct library version. Trouble may follow.])
1012 fi
1013 fi
1014
1015 ECAP_LIBS=""
1016 if test "x$squid_opt_use_ecap" = "xyes"; then
1017 ECAP_LIBS="ecap/libecapsquid.la"
1018 squid_opt_use_adaptation=yes
1019 fi
1020 SQUID_DEFINE_BOOL(USE_ECAP,${squid_opt_use_ecap:=no},[Whether to use eCAP support])
1021 AM_CONDITIONAL(ENABLE_ECAP, test "x$squid_opt_use_ecap" = "xyes")
1022 AC_SUBST(ECAP_LIBS)
1023
1024 dnl enable adaptation if requested by specific adaptation mechanisms
1025 ADAPTATION_LIBS=""
1026 if test "x$squid_opt_use_adaptation" = "xyes"; then
1027 ADAPTATION_LIBS="adaptation/libadaptation.la"
1028 fi
1029 SQUID_DEFINE_BOOL(USE_ADAPTATION,${squid_opt_use_adaptation:=no}, [common adaptation support])
1030 AM_CONDITIONAL(ENABLE_ADAPTATION, test "x$squid_opt_use_adaptation" = "xyes")
1031 AC_SUBST(ADAPTATION_LIBS)
1032
1033 test "x$squid_host_os" = "xmingw" && enable_wccp=no
1034 AC_ARG_ENABLE(wccp,
1035 AS_HELP_STRING([--disable-wccp],[Disable Web Cache Coordination Protocol]), [
1036 SQUID_YESNO([$enableval],[unrecognized argument to --disable-wccp: $enableval])
1037 ])
1038 SQUID_DEFINE_BOOL(USE_WCCP, ${enable_wccp:=yes}, [Define to enable WCCP])
1039 AC_MSG_NOTICE([Web Cache Coordination Protocol enabled: $enable_wccp])
1040
1041 test "x$squid_host_os" = "xmingw" && enable_wccpv2=no
1042 AC_ARG_ENABLE(wccpv2,
1043 AS_HELP_STRING([--disable-wccpv2],
1044 [Disable Web Cache Coordination V2 Protocol]), [
1045 SQUID_YESNO([$enableval],
1046 [unrecognized argument to --disable-wccpv2: $enableval])
1047 ])
1048 SQUID_DEFINE_BOOL(USE_WCCPv2,${enable_wccpv2:=yes},
1049 [Define to enable WCCP V2])
1050 AC_MSG_NOTICE([Web Cache Coordination V2 Protocol enabled: $enable_wccpv2])
1051
1052 AC_ARG_ENABLE(kill-parent-hack,
1053 AS_HELP_STRING([--enable-kill-parent-hack],[Kill parent on shutdown]), [
1054 SQUID_YESNO([$enableval],
1055 [unrecognized argument to --enable-kill-parent-hack: $enableval])
1056 ])
1057 SQUID_DEFINE_BOOL(KILL_PARENT_OPT,${enable_kill_parent_hack:=no},
1058 [A dangerous feature which causes Squid to kill its parent
1059 process (presumably the RunCache script) upon receipt
1060 of SIGTERM or SIGINT. Deprecated, Use with caution.])
1061 AC_MSG_NOTICE([Kill parent on shutdown hack enabled: $enable_kill_parent_hack])
1062
1063 AC_ARG_ENABLE(snmp,
1064 AS_HELP_STRING([--disable-snmp],[Disable SNMP monitoring support]), [
1065 SQUID_YESNO([$enableval],
1066 [unrecognized argument to --disable-snmp: $enableval])
1067 ])
1068 SQUID_DEFINE_BOOL(SQUID_SNMP,${enable_snmp:=yes},
1069 [Define to enable SNMP monitoring of Squid])
1070 AM_CONDITIONAL(ENABLE_SNMP, [test "x$enable_snmp" = "xyes"])
1071 if test "x$enable_snmp" = "xyes"; then
1072 SNMPLIB='../lib/snmplib/libsnmplib.la'
1073 fi
1074 AC_MSG_NOTICE([SNMP support enabled: $enable_snmp])
1075 AC_SUBST(SNMPLIB)
1076
1077 AC_ARG_ENABLE(cachemgr-hostname,
1078 AS_HELP_STRING([--enable-cachemgr-hostname=hostname],
1079 [Make cachemgr.cgi default to this host.
1080 If unspecified, uses the name of the build-host]), [
1081 case $enableval in
1082 yes)
1083 AC_DEFINE(CACHEMGR_HOSTNAME,[getfullhostname()],
1084 [If you are upset that the cachemgr.cgi form comes up with the hostname field blank, then define this to getfullhostname()])
1085 AC_MSG_NOTICE([Cachemgr default hostname == host where cachemgr runs])
1086 ;;
1087 no)
1088 : # Nothing to do..
1089 ;;
1090 *)
1091 AC_DEFINE_UNQUOTED(CACHEMGR_HOSTNAME,"${enableval}")
1092 AC_MSG_NOTICE([Cachemgr default hostname set to ${enableval}])
1093 ;;
1094 esac
1095 ])
1096
1097 AC_ARG_ENABLE(eui,
1098 AS_HELP_STRING([--disable-eui],
1099 [Disable use of ARP / MAC/ EUI (ether address)]), [
1100 SQUID_YESNO([$enableval],[--disable-eui expects no arguments])
1101 ])
1102 if test "x${enable_eui:=yes}" = "xyes" ; then
1103 case "$squid_host_os" in
1104 linux|solaris|freebsd|openbsd|netbsd|cygwin)
1105 ${TRUE}
1106 ;;
1107 mingw)
1108 EUILIB="-liphlpapi"
1109 ;;
1110 *)
1111 AC_MSG_WARN([EUI support probably will not work on host $host.])
1112 ;;
1113 esac
1114 # iphlpapi.h check delayed after winsock2.h
1115 AC_CHECK_HEADERS( \
1116 windows.h \
1117 sys/sockio.h \
1118 sys/param.h,
1119 [], [], [[
1120 #if HAVE_WINDOWS_H
1121 include <windows.h>
1122 #endif
1123 ]]
1124 )
1125 AC_CHECK_HEADERS( \
1126 net/if_arp.h \
1127 net/route.h,
1128 [], [], [[
1129 #include <sys/types.h>
1130 #include <sys/socket.h>
1131 ]])
1132
1133 # OpenBSD, FreeBSD and NetBSD requires sys/param.h to be included before sysctl.h and net/if_dl.h
1134 AC_CHECK_HEADERS( \
1135 net/if_dl.h \
1136 sys/sysctl.h,
1137 [], [], [[
1138 #if HAVE_SYS_PARAM_H
1139 #include <sys/param.h>
1140 #endif
1141 ]])
1142 fi
1143 AC_SUBST(EUILIB)
1144 AC_MSG_NOTICE([EUI (MAC address) controls enabled: $enable_eui])
1145 SQUID_DEFINE_BOOL(USE_SQUID_EUI,$enable_eui,
1146 [Define this to include code which lets you use ethernet addresses. This code uses API initially defined in 4.4-BSD.])
1147 AM_CONDITIONAL(ENABLE_EUI, [test "x$enable_eui" = "xyes" ])
1148
1149
1150 AC_ARG_ENABLE(htcp,
1151 AS_HELP_STRING([--disable-htcp],[Disable HTCP protocol support]), [
1152 SQUID_YESNO([$enableval],
1153 [unrecognized argument to --disable-htcp: $enableval])
1154 ])
1155 SQUID_DEFINE_BOOL(USE_HTCP,${enable_htcp:=yes},
1156 [Define this to include code for the Hypertext Cache Protocol (HTCP)])
1157 AM_CONDITIONAL(ENABLE_HTCP, [test "x$enable_htcp" = "xyes"])
1158 AC_MSG_NOTICE([HTCP support enabled: $enable_htcp])
1159
1160 # Cryptograhic libraries
1161 AC_ARG_WITH(nettle,
1162 AS_HELP_STRING([--without-nettle],[Compile without the Nettle crypto library.]),[
1163 case "$with_nettle" in
1164 yes|no)
1165 : # Nothing special to do here
1166 ;;
1167 *)
1168 if test ! -d "$withval" ; then
1169 AC_MSG_ERROR([--with-nettle path does not point to a directory])
1170 fi
1171 NETTLELIBDIR="-L$with_nettle/lib"
1172 CPPFLAGS="-I$with_nettle/include $CPPFLAGS"
1173 with_nettle=yes
1174 esac
1175 ])
1176 if test "x$with_nettle" != "xno" ; then
1177 AC_CHECK_LIB(nettle, nettle_md5_init,[
1178 NETTLELIB="$NETTLELIBDIR -lnettle"
1179 AC_CHECK_HEADERS(nettle/md5.h)
1180 ],[with_nettle=no])
1181 if test "x$with_nettle" != "xno" ; then
1182 # Base64 uses the nettle 3.0 API
1183 # which matters on 64-bit systems
1184 AC_CHECK_HEADERS(nettle/base64.h)
1185 AC_MSG_CHECKING([for Nettle 3.0 API compatibility])
1186 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1187 # include <cstddef>
1188 # include <cstdint>
1189 # include <nettle/base64.h>
1190 ]],[[
1191 uint8_t inData[10]; inData[0] = '\0';
1192 size_t srcLen = 0;
1193 struct base64_decode_ctx ctx;
1194 base64_decode_init(&ctx);
1195 uint8_t outData[10];
1196 size_t dstLen = 0;
1197 if (!base64_decode_update(&ctx, &dstLen, outData, srcLen, inData) ||
1198 !base64_decode_final(&ctx)) {
1199 return 1;
1200 }
1201 ]])],[AC_MSG_RESULT(yes)
1202 AC_DEFINE(HAVE_NETTLE30_BASE64,1,[set to 1 if Nettle 3.0 API will link])
1203 ],[AC_MSG_RESULT(no)])
1204 fi
1205 fi
1206 AC_MSG_NOTICE([Using Nettle cryptographic library: ${with_nettle:=yes}])
1207 AC_SUBST(NETTLELIB)
1208
1209 dnl Check for libcrypt
1210 CRYPTLIB=
1211 dnl Some of our helpers use crypt(3) which may be in libc, or in
1212 dnl libcrypt (eg FreeBSD)
1213 AC_CHECK_LIB(crypt, crypt, [CRYPTLIB="-lcrypt"])
1214 dnl Solaris10 provides MD5 natively through libmd5
1215 AC_CHECK_LIB(md5, MD5Init, [CRYPTLIB="$CRYPTLIB -lmd5"])
1216 AC_SUBST(CRYPTLIB)
1217
1218 SSLLIB=""
1219
1220 dnl User may want to disable GnuTLS
1221 AC_ARG_WITH(gnutls,
1222 AS_HELP_STRING([--without-gnutls],
1223 [Do not use GnuTLS for SSL. Default: auto-detect]), [
1224 case "$with_gnutls" in
1225 yes|no)
1226 : # Nothing special to do here
1227 ;;
1228 *)
1229 if test ! -d "$withval" ; then
1230 AC_MSG_ERROR([--with-gnutls path does not point to a directory])
1231 fi
1232 LIBGNUTLS_PATH="-L$with_gnutls/lib"
1233 CPPFLAGS="-I$with_gnutls/include $CPPFLAGS"
1234 esac
1235 ])
1236 AH_TEMPLATE(USE_GNUTLS,[GnuTLS support is available])
1237 if test "x$with_gnutls" != "xno"; then
1238 SQUID_STATE_SAVE(squid_gnutls_state)
1239
1240 # User may have provided a custom location for GnuTLS. Otherwise...
1241 LIBS="$LIBS $LIBGNUTLS_PATH"
1242
1243 # auto-detect using pkg-config
1244 PKG_CHECK_MODULES([LIBGNUTLS],[gnutls >= 3.1.5],[
1245 CPPFLAGS="$CPPFLAGS $LIBGNUTLS_CFLAGS"
1246 ],[
1247 ## find the package without pkg-config
1248 ## check that the library is actually new enough.
1249 ## by testing for a 3.1.5+ function which we use
1250 AC_CHECK_LIB(gnutls,gnutls_certificate_verify_peers3,[LIBGNUTLS_LIBS="-lgnutls"])
1251 ])
1252 AC_CHECK_HEADERS(gnutls/gnutls.h gnutls/x509.h)
1253
1254 SQUID_STATE_ROLLBACK(squid_gnutls_state) #de-pollute LIBS
1255
1256 if test "x$with_gnutls" = "xyes" -a "x$LIBGNUTLS_LIBS" = "x"; then
1257 AC_MSG_ERROR([Required GnuTLS library not found])
1258 fi
1259 if test "x$LIBGNUTLS_LIBS" != "x" ; then
1260 CXXFLAGS="$LIBGNUTLS_CFLAGS $CXXFLAGS"
1261 SSLLIB="$LIBGNUTLS_PATH $LIBGNUTLS_LIBS $SSLLIB"
1262 AC_DEFINE(USE_GNUTLS,1,[GnuTLS support is available])
1263 else
1264 with_gnutls=no
1265 fi
1266 fi
1267 AC_MSG_NOTICE([GnuTLS library support: ${with_gnutls:=auto} ${LIBGNUTLS_PATH} ${LIBGNUTLS_LIBS}])
1268
1269 dnl User may specify OpenSSL is needed from a non-standard location
1270 AC_ARG_WITH(openssl,
1271 AS_HELP_STRING([--with-openssl=PATH],
1272 [Compile with the OpenSSL libraries. The path to
1273 the OpenSSL development libraries and headers
1274 installation can be specified if outside of the
1275 system standard directories]), [
1276 case "$with_openssl" in
1277 yes|no)
1278 : # Nothing special to do here
1279 ;;
1280 *)
1281 if test ! -d "$withval" ; then
1282 AC_MSG_ERROR([--with-openssl path does not point to a directory])
1283 fi
1284 LIBOPENSSL_PATH="-L$with_openssl/lib"
1285 CPPFLAGS="-I$with_openssl/include $CPPFLAGS"
1286 with_openssl=yes
1287 esac
1288 ])
1289 AH_TEMPLATE(USE_OPENSSL,[OpenSSL support is available])
1290 ## OpenSSL is default disable due to licensing issues on some OS
1291 if test "x$with_openssl" = "xyes"; then
1292 AC_CHECK_HEADERS( \
1293 openssl/bio.h \
1294 openssl/crypto.h \
1295 openssl/err.h \
1296 openssl/md5.h \
1297 openssl/opensslv.h \
1298 openssl/ssl.h \
1299 openssl/x509v3.h \
1300 openssl/engine.h \
1301 openssl/txt_db.h \
1302 )
1303
1304 # User may have provided a custom location for OpenSSL. Otherwise...
1305 SQUID_STATE_SAVE(squid_openssl_state)
1306 LIBS="$LIBS $LIBOPENSSL_PATH"
1307
1308 # auto-detect using pkg-config
1309 PKG_CHECK_MODULES([LIBOPENSSL],[openssl],,[
1310 ## For some OS pkg-config is broken or unavailable.
1311 ## Detect libraries the hard way.
1312
1313 # Windows MinGW has some special libraries ...
1314 if test "x$squid_host_os" = "xmingw" ; then
1315 LIBOPENSSL_LIBS='-lssleay32 -leay32 -lgdi32 $LIBOPENSSL_LIBS'
1316 AC_MSG_NOTICE([Windows OpenSSL library support: yes -lssleay32 -leay32 -lgdi32])
1317 fi
1318
1319 AC_CHECK_LIB(crypto,[CRYPTO_new_ex_data],[LIBOPENSSL_LIBS="-lcrypto $LIBOPENSSL_LIBS"],[
1320 AC_MSG_ERROR([library 'crypto' is required for OpenSSL])
1321 ],$LIBOPENSSL_LIBS)
1322 AC_CHECK_LIB(ssl,[SSL_library_init],[LIBOPENSSL_LIBS="-lssl $LIBOPENSSL_LIBS"],[
1323 AC_MSG_ERROR([library 'ssl' is required for OpenSSL])
1324 ],$LIBOPENSSL_LIBS)
1325 ])
1326
1327 # This is a workaround for RedHat 9 brain damage..
1328 if test -d /usr/kerberos/include -a -f /usr/include/openssl/kssl.h; then
1329 AC_MSG_NOTICE([OpenSSL depends on Kerberos])
1330 LIBOPENSSL_LIBS="-L/usr/kerberos/lib $LIBOPENSSL_LIBS"
1331 CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
1332 fi
1333 SQUID_STATE_ROLLBACK(squid_openssl_state) #de-pollute LIBS
1334
1335 if test "x$LIBOPENSSL_LIBS" != "x"; then
1336 CXXFLAGS="$LIBOPENSSL_CFLAGS $CXXFLAGS"
1337 SSLLIB="$LIBOPENSSL_PATH $LIBOPENSSL_LIBS $SSLLIB"
1338 AC_DEFINE(USE_OPENSSL,1,[OpenSSL support is available])
1339
1340 # check for other specific broken implementations
1341 SQUID_CHECK_OPENSSL_GETCERTIFICATE_WORKS
1342 SQUID_CHECK_OPENSSL_CONST_SSL_METHOD
1343 SQUID_CHECK_OPENSSL_TXTDB
1344 SQUID_CHECK_OPENSSL_HELLO_OVERWRITE_HACK
1345 fi
1346 if test "x$SSLLIB" = "x"; then
1347 AC_MSG_ERROR([Required OpenSSL library not found])
1348 fi
1349 fi
1350 AC_MSG_NOTICE([OpenSSL library support: ${with_openssl:=no} ${LIBOPENSSL_PATH} ${LIBOPENSSL_LIBS}])
1351 AM_CONDITIONAL(ENABLE_SSL,[ test "x$with_openssl" = "xyes" ])
1352 AC_SUBST(SSLLIB)
1353
1354 dnl User may specify MIT Kerberos is needed from a non-standard location
1355 AC_ARG_WITH(mit-krb5,
1356 AS_HELP_STRING([--without-mit-krb5],
1357 [Compile without MIT Kerberos support.]), [
1358 case "$with_mit_krb5" in
1359 yes|no)
1360 : # Nothing special to do here
1361 ;;
1362 *)
1363 if test ! -d "$withval" ; then
1364 AC_MSG_ERROR([--with-mit-krb5 path does not point to a directory])
1365 fi
1366 if test -d "$with_mit_krb5/lib64" ; then
1367 LIB_KRB5_PATH="-L$with_mit_krb5/lib64 -L$with_mit_krb5/lib"
1368 else
1369 LIB_KRB5_PATH="-L$with_mit_krb5/lib"
1370 fi
1371 CXXFLAGS="-I$with_mit_krb5/include $CXXFLAGS"
1372 krb5confpath="$with_mit_krb5/bin"
1373 with_mit_krb5=yes
1374 esac
1375 ])
1376 AH_TEMPLATE(USE_APPLE_KRB5,[Apple Kerberos support is available])
1377 AH_TEMPLATE(USE_MIT_KRB5,[MIT Kerberos support is available])
1378 AH_TEMPLATE(USE_SOLARIS_KRB5,[Solaris Kerberos support is available])
1379
1380 ## find out if pkg-config or krb5-config will work
1381 if test "x$with_mit_krb5" != "xno"; then
1382 # find installed libs via pkg-config or krb5-config
1383 squid_pc_krb5_name=
1384 PKG_CHECK_EXISTS(mit-krb5-gssapi mit-krb5, [squid_pc_krb5_name="mit-krb5-gssapi mit-krb5"],[
1385 PKG_CHECK_EXISTS(gssapi-krb5 krb5, [squid_pc_krb5_name="gssapi-krb5 krb5"])
1386 ])
1387 if test "x$squid_pc_krb5_name" = "x" -a "$cross_compiling" = "no"; then
1388 # Look for krb5-config (unless cross-compiling)
1389 AC_PATH_PROG(krb5_config,krb5-config,no)
1390 if test "x$ac_cv_path_krb5_config" != "xno" ; then
1391 krb5confpath="`dirname $ac_cv_path_krb5_config`"
1392 ac_heimdal="`$ac_cv_path_krb5_config --version 2>/dev/null | grep -c -i heimdal`"
1393 ac_solaris="`$ac_cv_path_krb5_config --version 2>/dev/null | grep -c -i solaris`"
1394 ac_apple="`$ac_cv_path_krb5_config --vendor 2>/dev/null | grep -c -i apple`"
1395 if test $ac_solaris -gt 0 ; then
1396 with_solaris_krb5=yes
1397 elif test $ac_apple -gt 0 ; then
1398 with_apple_krb5=yes
1399 elif test $ac_heimdal -gt 0; then
1400 with_mit_krb5=no
1401 if test "x$with_mit_krb5" = "xyes"; then
1402 AC_MSG_ERROR([Could not find pkg-config or krb5-config for MIT Kerberos])
1403 fi
1404 fi
1405 else
1406 if test "x$with_mit_krb5" = "xyes"; then
1407 AC_MSG_ERROR([Could not find krb5-config in path])
1408 else
1409 with_mit_krb5=no
1410 fi
1411 fi
1412 fi
1413 fi
1414
1415 # detect MIT Kerberos dependencies (except on Solaris)
1416 if test "x$with_mit_krb5" != "xno" -a "x$with_solaris_krb5" != "xyes"; then
1417 SQUID_STATE_SAVE([squid_krb5_save])
1418 LIBS="$LIBS $LIB_KRB5_PATH"
1419
1420 # auto-detect using pkg-config
1421 PKG_CHECK_MODULES([LIB_KRB5], $squid_pc_krb5_name,,[
1422 # look for krb5-config (unless cross-compiling)
1423 if test "$cross_compiling" = "no"; then
1424 if test "x$krb5confpath" = "x" ; then
1425 AC_PATH_PROG(krb5_config,krb5-config,no)
1426 if test "x$ac_cv_path_krb5_config" != "xno" ; then
1427 ac_krb5_config="$ac_cv_path_krb5_config"
1428 fi
1429 else
1430 ac_krb5_config="$krb5confpath/krb5-config"
1431 fi
1432 fi
1433 if test "x$ac_krb5_config" != "x" && test -x "$ac_krb5_config"; then
1434 # Get libs, etc
1435 AC_MSG_NOTICE([Use krb5-config to get CXXFLAGS and LIBS])
1436 LIB_KRB5_CFLAGS="`$ac_krb5_config --cflags krb5 2>/dev/null`"
1437 LIB_KRB5_LIBS="`$ac_krb5_config --libs krb5 2>/dev/null`"
1438 LIB_KRB5_CFLAGS="`$ac_krb5_config --cflags gssapi 2>/dev/null` $LIB_KRB5_CFLAGS"
1439 LIB_KRB5_LIBS="`$ac_krb5_config --libs gssapi 2>/dev/null` $LIB_KRB5_LIBS"
1440 else
1441 ## For some OS pkg-config is broken or unavailable.
1442 ## Detect libraries the hard way.
1443
1444 SQUID_STATE_SAVE([squid_mit_save])
1445 missing_required=
1446 AC_MSG_NOTICE([Try to find Kerberos libraries in given path])
1447 AC_CHECK_LIB(com_err, [main], [LIB_KRB5_LIBS="-lcom_err $LIB_KRB5_LIBS"],[
1448 AC_MSG_WARN([library 'com_err' is required for MIT Kerberos])
1449 missing_required=yes
1450 ])
1451 LIBS=$LIB_KRB5_LIBS
1452 AC_CHECK_LIB(k5crypto, [main], [LIB_KRB5_LIBS="-lk5crypto $LIB_KRB5_LIBS"],[
1453 AC_MSG_WARN([library 'k5crypto' is required for MIT Kerberos])
1454 missing_required=yes
1455 ])
1456 LIBS=$LIB_KRB5_LIBS
1457 AC_CHECK_LIB(krb5, [main], [LIB_KRB5_LIBS="-lkrb5 $LIB_KRB5_LIBS"],[
1458 AC_MSG_WARN([library 'krb5' is required for MIT Kerberos])
1459 missing_required=yes
1460 ])
1461 LIBS=$LIB_KRB5_LIBS
1462 AC_CHECK_LIB(gssapi_krb5, [main], [LIB_KRB5_LIBS="-lgssapi_krb5 $LIB_KRB5_LIBS"],[
1463 AC_MSG_WARN([library 'gssapi_krb5' is required for MIT Kerberos])
1464 missing_required=yes
1465 ])
1466 SQUID_STATE_ROLLBACK([squid_mit_save])
1467 if test "x$missing_required" = "xyes"; then
1468 LIB_KRB5_LIBS=""
1469 fi
1470 fi
1471 ])
1472
1473 if test "x$LIB_KRB5_LIBS" != "x"; then
1474 if test "x$with_apple_krb5" = "xyes" ; then
1475 AC_DEFINE(USE_APPLE_KRB5,1,[Apple Kerberos support is available])
1476 KRB5_FLAVOUR="Apple"
1477 else
1478 AC_DEFINE(USE_MIT_KRB5,1,[MIT Kerberos support is available])
1479 KRB5_FLAVOUR="MIT"
1480 fi
1481 KRB5LIBS="$LIB_KRB5_PATH $LIB_KRB5_LIBS $KRB5LIBS"
1482 KRB5INCS="$LIB_KRB5_CFLAGS"
1483
1484 # check for other specific broken implementations
1485 CXXFLAGS="$CXXFLAGS $KRB5INCS"
1486 LIBS="$LIBS $KRB5LIBS"
1487
1488 AC_MSG_NOTICE([Try to find Kerberos headers in given path])
1489 AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h gssapi/gssapi_krb5.h)
1490 AC_CHECK_HEADERS(gssapi/gssapi_generic.h)
1491 AC_CHECK_HEADERS(krb5.h com_err.h et/com_err.h)
1492 AC_CHECK_HEADERS(profile.h)
1493
1494 SQUID_CHECK_KRB5_FUNCS
1495 fi
1496 if test "x$with_mit_krb5" = "xyes" -a "x$KRB5LIBS" = "x"; then
1497 AC_MSG_ERROR([Required Kerberos library not found])
1498 elif test "x$KRB5LIBS" = "x"; then
1499 with_mit_krb5=no
1500 with_apple_krb5=no
1501 fi
1502 SQUID_STATE_ROLLBACK([squid_krb5_save])
1503 fi
1504
1505 # detect Solaris Kerberos dependencies
1506 if test "x$with_solaris_krb5" = "xyes" -a "x$KRB5LIBS" = "x"; then
1507 SQUID_STATE_SAVE([squid_krb5_save])
1508 LIBS="$LIBS $LIB_KRB5_PATH"
1509
1510 # no pkg-config for solaris native Kerberos
1511 # look for krb5-config (unless cross-compiling)
1512 if test "$cross_compiling" = "no"; then
1513 if test "x$krb5confpath" = "x" ; then
1514 AC_PATH_PROG(krb5_config,krb5-config,no)
1515 if test "x$ac_cv_path_krb5_config" != "xno" ; then
1516 ac_krb5_config="$ac_cv_path_krb5_config"
1517 fi
1518 else
1519 ac_krb5_config="$krb5confpath/krb5-config"
1520 fi
1521 fi
1522 if test "x$ac_krb5_config" != "x" && test -x "$ac_krb5_config"; then
1523 # Get libs, etc
1524 AC_MSG_NOTICE([Use krb5-config to get CXXFLAGS and LIBS])
1525 LIB_KRB5_CFLAGS="`$ac_krb5_config --cflags krb5 2>/dev/null`"
1526 LIB_KRB5_LIBS="`$ac_krb5_config --libs krb5 2>/dev/null`"
1527 # Solaris 10 Update 11 patches the krb5-config tool to produce stderr messages on stdout.
1528 SOLARIS_BROKEN_KRB5CONFIG_GSSAPI="`$ac_krb5_config --libs gssapi 2>/dev/null | grep "krb5-config"`"
1529 if test "x$SOLARIS_BROKEN_KRB5CONFIG_GSSAPI" = "x"; then
1530 LIB_KRB5_CFLAGS="`$ac_krb5_config --cflags gssapi 2>/dev/null` $LIB_KRB5_CFLAGS"
1531 LIB_KRB5_LIBS="`$ac_krb5_config --libs gssapi 2>/dev/null` $LIB_KRB5_LIBS"
1532 fi
1533 else
1534 ## For some OS pkg-config is broken or unavailable.
1535 ## Detect libraries the hard way.
1536
1537 CXXFLAGS="-I/usr/include/kerberosv5 $CXXFLAGS"
1538
1539 SQUID_STATE_SAVE([squid_solaris_save])
1540 missing_required=
1541 AC_MSG_NOTICE([Try to find Kerberos libraries in given path])
1542 AC_CHECK_LIB(krb5, [main], [LIB_KRB5_LIBS="-lkrb5 $LIB_KRB5_LIBS"],[
1543 AC_MSG_WARN([library 'krb5' is required for Solaris Kerberos])
1544 missing_required=yes
1545 ])
1546 LIBS=$LIB_KRB5_LIBS
1547 AC_CHECK_LIB(gss, [main], [LIB_KRB5_LIBS="-lgss $LIB_KRB5_LIBS"],[
1548 AC_MSG_WARN([library 'gss' is required for Solaris Kerberos])
1549 missing_required=yes
1550 ])
1551 SQUID_STATE_ROLLBACK([squid_solaris_save])
1552 if test "x$missing_required" = "xyes"; then
1553 LIB_KRB5_LIBS=""
1554 fi
1555 fi
1556
1557 if test "x$LIB_KRB5_LIBS" != "x"; then
1558 KRB5LIBS="$LIB_KRB5_PATH $LIB_KRB5_LIBS $KRB5LIBS"
1559 KRB5INCS="$LIB_KRB5_CFLAGS"
1560 AC_DEFINE(USE_SOLARIS_KRB5,1,[Solaris Kerberos support is available])
1561 KRB5_FLAVOUR="Solaris"
1562
1563 # check for other specific broken implementations
1564 CXXFLAGS="$CXXFLAGS $KRB5INCS"
1565 LIBS="$LIBS $KRB5LIBS"
1566
1567 AC_MSG_NOTICE([Try to find Kerberos headers in given path])
1568 AC_CHECK_HEADERS(gssapi/gssapi.h gssapi/gssapi_ext.h)
1569 AC_CHECK_HEADERS(krb5.h com_err.h)
1570
1571 SQUID_CHECK_KRB5_SOLARIS_BROKEN_KRB5_H
1572 if test "x$squid_cv_broken_krb5_h" = "xyes"; then
1573 AC_DEFINE(HAVE_BROKEN_SOLARIS_KRB5_H, 1, [Define to 1 if Solaris krb5.h is broken for C++])
1574 AC_MSG_WARN([You have a broken Solaris <krb5.h> system include.])
1575 AC_MSG_WARN([Please see http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6837512])
1576 AC_MSG_WARN([If you need Kerberos support you will have to patch])
1577 AC_MSG_WARN([your system. See contrib/solaris/solaris-krb5-include.patch])
1578 fi
1579 SQUID_CHECK_KRB5_FUNCS
1580 fi
1581 if test "x$with_mit_krb5" = "xyes" -a "x$KRB5LIBS" = "x"; then
1582 # Error only if Solaris flavour was detected while looking for required MIT Kerberos
1583 AC_MSG_ERROR([Required Kerberos library not found])
1584 elif test "x$KRB5LIBS" = "x"; then
1585 with_solaris_krb5=no
1586 with_mit_krb5=no
1587 fi
1588 SQUID_STATE_ROLLBACK([squid_krb5_save])
1589 fi
1590
1591 dnl User may specify Heimdal Kerberos is needed from a non-standard location
1592 AC_ARG_WITH(heimdal-krb5,
1593 AS_HELP_STRING([--without-heimdal-krb5],
1594 [Compile without Heimdal Kerberos support.]), [
1595 case "$with_heimdal_krb5" in
1596 yes|no)
1597 : # Nothing special to do here
1598 ;;
1599 *)
1600 if test ! -d "$withval" ; then
1601 AC_MSG_ERROR([--with-heimdal-krb5 path does not point to a directory])
1602 fi
1603 if test -d "$with_heimdal_krb5/lib64" ; then
1604 LIB_KRB5_PATH="-L$with_heimdal_krb5/lib64 -L$with_heimdal_krb5/lib"
1605 else
1606 LIB_KRB5_PATH="-L$with_heimdal_krb5/lib"
1607 fi
1608 CXXFLAGS="-I$with_heimdal_krb5/include $CXXFLAGS"
1609 krb5confpath="$with_heimdal_krb5/bin"
1610 with_heimdal_krb5=yes
1611 esac
1612 ])
1613 AH_TEMPLATE(USE_HEIMDAL_KRB5,[Heimdal Kerberos support is available])
1614 if test "x$with_heimdal_krb5" != "xno" -a "x$KRB5LIBS" = "x"; then
1615 # find installed libs via pkg-config or krb5-config
1616 PKG_CHECK_EXISTS(heimdal-krb5, [squid_pc_krb5_name="heimdal-krb5"])
1617 if test "x$squid_pc_krb5_name" = "x"; then
1618 PKG_CHECK_EXISTS(heimdal-gssapi, [squid_pc_krb5_name="heimdal-gssapi"])
1619 fi
1620 if test "x$squid_pc_krb5_name" = "x" -a "$cross_compiling" = "no"; then
1621 # Look for krb5-config (unless cross-compiling)
1622 AC_PATH_PROG(krb5_config,krb5-config,no)
1623 if test "x$ac_cv_path_krb5_config" != "xno" ; then
1624 krb5confpath="`dirname $ac_cv_path_krb5_config`"
1625 ac_heimdal="`$ac_cv_path_krb5_config --version 2>/dev/null | grep -c -i heimdal`"
1626 if test "x$with_heimdal_krb5" = "xyes" -a $ac_heimdal = 0; then
1627 AC_MSG_ERROR([Could not find pkg-config or krb5-config for Heimdal Kerberos])
1628 fi
1629 else
1630 if test "x$with_heimdal_krb5" = "xyes"; then
1631 AC_MSG_ERROR([Could not find krb5-config in path])
1632 else
1633 AC_MSG_WARN([Could not find krb5-config in path])
1634 with_heimdal_krb5=no
1635 fi
1636 fi
1637 fi
1638 fi
1639 if test "x$with_heimdal_krb5" != "xno" -a "x$KRB5LIBS" = "x"; then
1640 SQUID_STATE_SAVE([squid_krb5_save])
1641 LIBS="$LIBS $LIB_KRB5_PATH"
1642
1643 # auto-detect using pkg-config
1644 PKG_CHECK_MODULES([LIB_KRB5], $squid_pc_krb5_name,,[
1645 # look for krb5-config (unless cross-compiling)
1646 if test "$cross_compiling" = "no"; then
1647 if test "x$krb5confpath" = "x" ; then
1648 AC_PATH_PROG(krb5_config,krb5-config,no)
1649 if test "x$ac_cv_path_krb5_config" != "xno" ; then
1650 ac_krb5_config="$ac_cv_path_krb5_config"
1651 fi
1652 else
1653 ac_krb5_config="$krb5confpath/krb5-config"
1654 fi
1655 fi
1656 if test "x$ac_krb5_config" != "x" -a -x "$ac_krb5_config"; then
1657 # Get libs, etc
1658 AC_MSG_NOTICE([Use krb5-config to get CXXFLAGS and LIBS])
1659 LIB_KRB5_CFLAGS="`$ac_krb5_config --cflags krb5 2>/dev/null`"
1660 LIB_KRB5_LIBS="`$ac_krb5_config --libs krb5 2>/dev/null`"
1661 LIB_KRB5_CFLAGS="`$ac_krb5_config --cflags gssapi 2>/dev/null` $LIB_KRB5_CFLAGS"
1662 LIB_KRB5_LIBS="`$ac_krb5_config --libs gssapi 2>/dev/null` $LIB_KRB5_LIBS"
1663 else
1664 ## For some OS pkg-config is broken or unavailable.
1665 ## Detect libraries the hard way.
1666 SQUID_STATE_SAVE([squid_heimdal_save])
1667 missing_required=
1668 AC_MSG_NOTICE([Try to find Kerberos libraries in given path])
1669 AC_CHECK_LIB(resolv, [main], [LIB_KRB5_LIBS="-lresolv $LIB_KRB5_LIBS"],[
1670 AC_MSG_WARN([library 'resolv' is required for Heimdal Kerberos])
1671 missing_required=yes
1672 ])
1673 LIBS=$LIB_KRB5_LIBS
1674 AC_CHECK_LIB(crypt, [main], [LIB_KRB5_LIBS="-lcrypt $LIB_KRB5_LIBS"],[
1675 AC_MSG_WARN([library 'crypt' is required for Heimdal Kerberos])
1676 missing_required=yes
1677 ])
1678 LIBS=$LIB_KRB5_LIBS
1679 AC_CHECK_LIB(roken, [main], [LIB_KRB5_LIBS="-lroken $LIB_KRB5_LIBS"],[
1680 AC_MSG_WARN([library 'roken' is required for Heimdal Kerberos])
1681 missing_required=yes
1682 ])
1683 LIBS=$LIB_KRB5_LIBS
1684 AC_CHECK_LIB(heimbase, [main], [LIB_KRB5_LIBS="-lheimbase $LIB_KRB5_LIBS"],[
1685 AC_MSG_WARN([library 'heimbase' may be required for Heimdal Kerberos])
1686 ])
1687 LIBS=$LIB_KRB5_LIBS
1688 AC_CHECK_LIB(wind, [main], [LIB_KRB5_LIBS="-lwind $LIB_KRB5_LIBS"],[
1689 AC_MSG_WARN([library 'wind' may be required for Heimdal Kerberos])
1690 ])
1691 LIBS=$LIB_KRB5_LIBS
1692 AC_CHECK_LIB(crypto, [main], [LIB_KRB5_LIBS="-lcrypto $LIB_KRB5_LIBS"],[
1693 AC_MSG_WARN([library 'crypto' is required for Heimdal Kerberos])
1694 missing_required=yes
1695 ])
1696 LIBS=$LIB_KRB5_LIBS
1697 AC_CHECK_LIB(com_err, [main], [LIB_KRB5_LIBS="-lcom_err $LIB_KRB5_LIBS"],[
1698 AC_MSG_WARN([library 'com_err' is required for Heimdal Kerberos])
1699 missing_required=yes
1700 ])
1701 LIBS=$LIB_KRB5_LIBS
1702 AC_CHECK_LIB(hx509, [main], [LIB_KRB5_LIBS="-lhx509 $LIB_KRB5_LIBS"],[
1703 AC_MSG_WARN([library 'hx509' may be required for Heimdal Kerberos])
1704 ])
1705 LIBS=$LIB_KRB5_LIBS
1706 AC_CHECK_LIB(asn1, [main], [LIB_KRB5_LIBS="-lasn1 $LIB_KRB5_LIBS"],[
1707 AC_MSG_WARN([library 'asn1' is required for Heimdal Kerberos])
1708 missing_required=yes
1709 ])
1710 LIBS=$LIB_KRB5_LIBS
1711 AC_CHECK_LIB(krb5, [main], [LIB_KRB5_LIBS="-lkrb5 $LIB_KRB5_LIBS"],[
1712 AC_MSG_WARN([library 'krb5' is required for Heimdal Kerberos])
1713 missing_required=yes
1714 ])
1715 LIBS=$LIB_KRB5_LIBS
1716 AC_CHECK_LIB(heimntlm, [main], [LIB_KRB5_LIBS="-lheimntlm $LIB_KRB5_LIBS"],[
1717 AC_MSG_WARN([library 'heimntlm' may be required for Heimdal Kerberos])
1718 ])
1719 LIBS=$LIB_KRB5_LIBS
1720 AC_CHECK_LIB(gssapi, [main], [LIB_KRB5_LIBS="-lgssapi $LIB_KRB5_LIBS"],[
1721 AC_MSG_WARN([library 'gssapi' is required for Heimdal Kerberos])
1722 missing_required=yes
1723 ])
1724 SQUID_STATE_ROLLBACK([squid_heimdal_save])
1725 if test "x$missing_required" = "xyes"; then
1726 LIB_KRB5_LIBS=""
1727 fi
1728 fi
1729 ])
1730 if test "x$LIB_KRB5_LIBS" != "x"; then
1731 KRB5LIBS="$LIB_KRB5_PATH $LIB_KRB5_LIBS $KRB5LIBS"
1732 KRB5INCS="$LIB_KRB5_CFLAGS"
1733 AC_DEFINE(USE_HEIMDAL_KRB5,1,[Heimdal Kerberos support is available])
1734 KRB5_FLAVOUR="Heimdal"
1735
1736 # check for other specific broken implementations
1737 CXXFLAGS="$CXXFLAGS $KRB5INCS"
1738 LIBS="$LIBS $KRB5LIBS"
1739
1740 AC_MSG_NOTICE([Try to find Kerberos headers in given path])
1741 AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h gssapi/gssapi_krb5.h)
1742 AC_CHECK_HEADERS(krb5.h com_err.h et/com_err.h)
1743
1744 SQUID_CHECK_KRB5_HEIMDAL_BROKEN_KRB5_H
1745 if test "x$squid_cv_broken_heimdal_krb5_h" = "xyes"; then
1746 AC_DEFINE(HAVE_BROKEN_HEIMDAL_KRB5_H, 1, [Define to 1 if Heimdal krb5.h is broken for C++])
1747 fi
1748 SQUID_CHECK_KRB5_FUNCS
1749 fi
1750 if test "x$KRB5LIBS" = "x"; then
1751 if test test "x$with_heimdal_krb5" = "xyes"; then
1752 AC_MSG_ERROR([Required Heimdal Kerberos library not found])
1753 else
1754 AC_MSG_WARN([Heimdal Kerberos library not found])
1755 fi
1756 fi
1757 SQUID_STATE_ROLLBACK([squid_krb5_save])
1758 fi
1759
1760 dnl User may specify GNU gss is needed from a non-standard location
1761 AC_ARG_WITH(gnugss,
1762 AS_HELP_STRING([--without-gnugss],
1763 [Compile without the GNU gss libraries.]), [
1764 case "$with_gnugss" in
1765 yes|no)
1766 : # Nothing special to do here
1767 ;;
1768 *)
1769 if test ! -d "$withval" ; then
1770 AC_MSG_ERROR([--with-gnugss path does not point to a directory])
1771 fi
1772 if test ! -d "$with_gnugss/lib64" ; then
1773 LIB_KRB5_PATH="-L$with_gnugss/lib64 -L$with_gnugss/lib"
1774 else
1775 LIB_KRB5_PATH="-L$with_gnugss/lib"
1776 fi
1777 CXXFLAGS="-I$with_gnugss/include $CXXFLAGS"
1778 krb5confpath=
1779 with_gnugss=yes
1780 esac
1781 ])
1782 AH_TEMPLATE(USE_GNUGSS,[GNU gss support is available])
1783 if test "x$with_gnugss" != "xno" -a "x$KRB5LIBS" = "x"; then
1784 SQUID_STATE_SAVE([squid_krb5_save])
1785 LIBS="$LIBS $LIB_KRB5_PATH"
1786
1787 # auto-detect using pkg-config
1788 PKG_CHECK_MODULES([LIB_KRB5],[gss],,[
1789 ## For some OS pkg-config is broken or unavailable.
1790 ## Detect libraries the hard way.
1791
1792 AC_MSG_NOTICE([Try to find Kerberos libraries in given path])
1793 AC_CHECK_LIB(gss, [main], [LIB_KRB5_LIBS="-lgss $LIB_KRB5_LIBS"],[
1794 AC_MSG_WARN([library 'com_err' is required for GNU Kerberos])
1795 ])
1796 ])
1797
1798 if test "x$LIB_KRB5_LIBS" != "x"; then
1799 KRB5LIBS="$LIB_KRB5_PATH $LIB_KRB5_LIBS $KRB5LIBS"
1800 KRB5INCS="$LIB_KRB5_CFLAGS"
1801 AC_DEFINE(USE_GNUGSS,1,[GNU Kerberos support is available])
1802 KRB5_FLAVOUR="GNU GSS"
1803
1804 # check for other specific broken implementations
1805 CXXFLAGS="$CXXFLAGS $KRB5INCS"
1806 LIBS="$LIBS $KRB5LIBS"
1807
1808 AC_MSG_NOTICE([Try to find Kerbeors headers in given path])
1809 AC_CHECK_HEADERS(gss.h)
1810
1811 SQUID_CHECK_WORKING_GSSAPI
1812 SQUID_DEFINE_BOOL(HAVE_GSSAPI,$squid_cv_working_gssapi,[GSSAPI support])
1813
1814 SQUID_CHECK_SPNEGO_SUPPORT
1815 SQUID_DEFINE_BOOL(HAVE_SPNEGO,$squid_cv_have_spnego,[SPNEGO support])
1816
1817 SQUID_CHECK_WORKING_KRB5
1818 SQUID_DEFINE_BOOL(HAVE_KRB5,$squid_cv_working_krb5,[KRB5 support])
1819 fi
1820 if test "x$KRB5LIBS" = "x"; then
1821 if test test "x$with_gnugss" = "xyes"; then
1822 AC_MSG_ERROR([Required GNU GSS Kerberos library not found])
1823 else
1824 AC_MSG_WARN([GNU GSS Kerberos library not found])
1825 fi
1826 fi
1827 SQUID_STATE_ROLLBACK([squid_krb5_save])
1828 fi
1829
1830 if test "x$KRB5LIBS" != "x"; then
1831 with_krb5=yes
1832 fi
1833 AC_MSG_NOTICE([$KRB5_FLAVOUR Kerberos library support: ${with_krb5:=no} ${LIB_KRB5_PATH} ${LIB_KRB5_LIBS}])
1834 AC_SUBST(KRB5INCS)
1835 AC_SUBST(KRB5LIBS)
1836
1837 dnl On MinGW OpenLDAP is not available, so LDAP helpers can be linked
1838 dnl only with Windows LDAP libraries using -lwldap32
1839 case "$squid_host_os" in
1840 mingw)
1841 LDAPLIB="-lwldap32"
1842 LBERLIB=""
1843 ;;
1844 *)
1845 AC_CHECK_LIB(ldap, ldap_init, [LDAPLIB="-lldap"])
1846 dnl LDAP helpers need to know if -llber is needed or not
1847 AC_CHECK_LIB(lber, ber_init, [LBERLIB="-llber"])
1848 dnl if no ldap lib found check for mozilla version
1849 if test "x$ac_cv_lib_ldap_ldap_init" != x""yes; then
1850 oLIBS=$LIBS
1851 LIBS="$LIBPTHREADS"
1852 AC_CHECK_LIB(ldap60, ldap_init, [LDAPLIB="-lldap60"])
1853 LIBS="$LDAPLIB $LIBPTHREADS"
1854 AC_CHECK_LIB(prldap60, prldap_init, [LDAPLIB="-lprldap60 $LDAPLIB"])
1855 LIBS="$LDAPLIB $LIBPTHREADS"
1856 AC_CHECK_LIB(ssldap60, ldapssl_init, [LDAPLIB="-lssldap60 $LDAPLIB"])
1857 LIBS=$oLIBS
1858 fi
1859
1860 AC_CHECK_HEADERS(ldap.h lber.h)
1861 AC_CHECK_HEADERS(mozldap/ldap.h)
1862
1863 dnl
1864 dnl Check for LDAP_OPT_DEBUG_LEVEL
1865 dnl
1866 AC_MSG_CHECKING([for LDAP_OPT_DEBUG_LEVEL])
1867 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1868 # include <ldap.h>
1869 ]],[[
1870 int i=LDAP_OPT_DEBUG_LEVEL
1871 ]])],
1872 [ AC_MSG_RESULT(yes) ],
1873 [ AC_MSG_RESULT(no) ])
1874
1875 dnl
1876 dnl Check for working ldap
1877 dnl
1878 oLIBS=$LIBS
1879 LIBS="$LDAPLIB $LBERLIB $LIBPTHREADS"
1880 AC_MSG_CHECKING([for working ldap])
1881 AC_RUN_IFELSE([AC_LANG_SOURCE([[
1882 # define LDAP_DEPRECATED 1
1883 # if HAVE_LDAP_H
1884 # include <ldap.h>
1885 # elif HAVE_MOZLDAP_LDAP_H
1886 # include <mozldap/ldap.h>
1887 # endif
1888 int
1889 main(void)
1890 {
1891 char host[]="";
1892 int port;
1893
1894 ldap_init((const char *)&host, port);
1895
1896 return 0;
1897 }
1898 ]])],
1899 [ AC_DEFINE(HAVE_LDAP, 1, [LDAP support])
1900 AC_MSG_RESULT(yes) ],
1901 [ AC_MSG_RESULT(no) ],
1902 [ AC_MSG_RESULT(cross-compiler cant tell) ])
1903 LIBS=$oLIBS
1904
1905 dnl
1906 dnl Check for ldap vendor
1907 dnl
1908 AC_MSG_CHECKING([for OpenLDAP])
1909 AC_RUN_IFELSE([AC_LANG_SOURCE([[
1910 # if HAVE_LDAP_H
1911 # include <ldap.h>
1912 # endif
1913 # include <string.h>
1914 int
1915 main(void)
1916 {
1917 return strcmp(LDAP_VENDOR_NAME,"OpenLDAP");
1918 }
1919 ]])],
1920 [ AC_DEFINE(HAVE_OPENLDAP, 1, [OpenLDAP support])
1921 AC_MSG_RESULT(yes) ],
1922 [ AC_MSG_RESULT(no) ],
1923 [ AC_MSG_RESULT(cross-compiler cant tell) ])
1924
1925 AC_MSG_CHECKING([for Sun LDAP SDK])
1926 AC_RUN_IFELSE([AC_LANG_SOURCE([[
1927 # if HAVE_LDAP_H
1928 # include <ldap.h>
1929 # endif
1930 # include <string.h>
1931 int
1932 main(void)
1933 {
1934 return strcmp(LDAP_VENDOR_NAME,"Sun Microsystems Inc.");
1935 }
1936 ]])],
1937 [ AC_DEFINE(HAVE_SUN_LDAP_SDK, 1, [Sun LDAP SDK support])
1938 AC_MSG_RESULT(yes) ],
1939 [ AC_MSG_RESULT(no) ],
1940 [ AC_MSG_RESULT(cross-compiler cant tell) ])
1941
1942 AC_MSG_CHECKING([for Mozilla LDAP SDK])
1943 AC_RUN_IFELSE([AC_LANG_SOURCE([[
1944 # if HAVE_LDAP_H
1945 # include <ldap.h>
1946 # elif HAVE_MOZLDAP_LDAP_H
1947 # include <mozldap/ldap.h>
1948 # endif
1949 # include <string.h>
1950 int
1951 main(void)
1952 {
1953 return strcmp(LDAP_VENDOR_NAME,"mozilla.org");
1954 }
1955 ]])],
1956 [ AC_DEFINE(HAVE_MOZILLA_LDAP_SDK, 1, [Mozilla LDAP SDK support])
1957 AC_MSG_RESULT(yes) ],
1958 [ AC_MSG_RESULT(no)],
1959 [ AC_MSG_RESULT(cross-compiler cant tell) ])
1960
1961 dnl
1962 dnl Check for LDAP_REBINDPROC_CALLBACK
1963 dnl
1964 AC_MSG_CHECKING([for LDAP_REBINDPROC_CALLBACK])
1965 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1966 # if HAVE_LDAP_H
1967 # include <ldap.h>
1968 # elif HAVE_MOZLDAP_LDAP_H
1969 # include <mozldap/ldap.h>
1970 # endif
1971 ]],[[
1972 LDAP_REBINDPROC_CALLBACK ldap_rebind;
1973 ]])],
1974 [ AC_DEFINE(HAVE_LDAP_REBINDPROC_CALLBACK,1,[Define to 1 if you have LDAP_REBINDPROC_CALLBACK])
1975 AC_MSG_RESULT(yes) ],
1976 [ AC_MSG_RESULT(no) ])
1977
1978 dnl
1979 dnl Check for LDAP_REBIND_PROC
1980 dnl
1981 AC_MSG_CHECKING([for LDAP_REBIND_PROC])
1982 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1983 # if HAVE_LDAP_H
1984 # include <ldap.h>
1985 # elif HAVE_MOZLDAP_LDAP_H
1986 # include <mozldap/ldap.h>
1987 # endif
1988 ]],[[
1989 LDAP_REBIND_PROC ldap_rebind;
1990 ]])],
1991 [ AC_DEFINE(HAVE_LDAP_REBIND_PROC,1,[Define to 1 if you have LDAP_REBIND_PROC])
1992 AC_MSG_RESULT(yes) ],
1993 [ AC_MSG_RESULT(no) ])
1994
1995 dnl
1996 dnl Check for LDAP_REBIND_FUNCTION
1997 dnl
1998 AC_MSG_CHECKING([for LDAP_REBIND_FUNCTION])
1999 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
2000 # define LDAP_REFERRALS
2001 # if HAVE_LDAP_H
2002 # include <ldap.h>
2003 # elif HAVE_MOZLDAP_LDAP_H
2004 # include <mozldap/ldap.h>
2005 # endif
2006 ]],[[
2007 LDAP_REBIND_FUNCTION ldap_rebind;
2008 ]])],
2009 [ AC_DEFINE(HAVE_LDAP_REBIND_FUNCTION,1,[Define to 1 if you have LDAP_REBIND_FUNCTION])
2010 AC_MSG_RESULT(yes) ],
2011 [ AC_MSG_RESULT(no) ])
2012
2013 dnl
2014 dnl Check for LDAP_SCOPE_DEFAULT
2015 dnl
2016 AC_MSG_CHECKING([for LDAP_SCOPE_DEFAULT])
2017 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
2018 # if HAVE_LDAP_H
2019 # include <ldap.h>
2020 # elif HAVE_MOZLDAP_LDAP_H
2021 # include <mozldap/ldap.h>
2022 # endif
2023 ]],[[
2024 int i=LDAP_SCOPE_DEFAULT;
2025 ]])],
2026 [ AC_DEFINE(HAVE_LDAP_SCOPE_DEFAULT,1,[Define to 1 if you have LDAP_SCOPE_DEFAULT])
2027 AC_MSG_RESULT(yes) ],
2028 [ AC_MSG_RESULT(no) ])
2029
2030 dnl
2031 dnl Check for ldap_url_desc.lud_scheme
2032 dnl
2033 AC_CHECK_MEMBER(struct ldap_url_desc.lud_scheme,
2034 AC_DEFINE(HAVE_LDAP_URL_LUD_SCHEME,1,
2035 [Define to 1 if you have LDAPURLDesc.lud_scheme]),,[#include <ldap.h>])
2036
2037 dnl
2038 dnl Check for ldapssl_client_init
2039 dnl
2040 AC_CHECK_LIB(ldap,ldapssl_client_init,
2041 AC_DEFINE(HAVE_LDAPSSL_CLIENT_INIT,1,[Define to 1 if you have ldapssl_client_init]),)
2042
2043 dnl
2044 dnl Check for ldap_url_desc2str
2045 dnl
2046 AC_CHECK_LIB(ldap,ldap_url_desc2str,
2047 AC_DEFINE(HAVE_LDAP_URL_DESC2STR,1,[Define to 1 if you have ldap_url_desc2str]),)
2048
2049 dnl
2050 dnl Check for ldap_url_parse
2051 dnl
2052 AC_CHECK_LIB(ldap,ldap_url_parse,
2053 AC_DEFINE(HAVE_LDAP_URL_PARSE,1,[Define to 1 if you have ldap_url_parse]),)
2054
2055 dnl
2056 dnl Check for ldap_start_tls_s
2057 dnl
2058 AC_CHECK_LIB(ldap,ldap_start_tls_s,
2059 AC_DEFINE(HAVE_LDAP_START_TLS_S,1,[Define to 1 if you have ldap_start_tls_s]),)
2060 ;;
2061 esac
2062
2063 AC_SUBST(LDAPLIB)
2064 AC_SUBST(LBERLIB)
2065
2066 AC_ARG_ENABLE(forw-via-db,
2067 AS_HELP_STRING([--enable-forw-via-db],[Enable Forw/Via database]), [
2068 SQUID_YESNO([$enableval],[unrecognized argument to --enable-forw-via-db: $enableval])
2069 ])
2070 SQUID_DEFINE_BOOL(USE_FORW_VIA_DB,${enable_forw_via_db:=no},
2071 [Enable Forw/Via database])
2072 AC_MSG_NOTICE([Forw/Via database enabled: $enable_forw_via_db])
2073
2074 AC_ARG_ENABLE(cache-digests,
2075 AS_HELP_STRING([--enable-cache-digests],
2076 [Use Cache Digests. See http://wiki.squid-cache.org/SquidFaq/CacheDigests]),
2077 [
2078 SQUID_YESNO($enableval,
2079 [unrecognized argument to --enable-cache-digests: $enableval])
2080 ])
2081 SQUID_DEFINE_BOOL(USE_CACHE_DIGESTS,${enable_cache_digests:=no},
2082 [Use Cache Digests for locating objects in neighbor caches.])
2083 AC_MSG_NOTICE([Cache Digests enabled: $enable_cache_digests])
2084
2085
2086 ################################
2087 # check for netio plugin stuff #
2088 ################################
2089 dnl order of these options handling is relevant in case the user
2090 dnl supplies more than one --enable option. Options handled later
2091 dnl override those handled earlier for io loop method manual override
2092 AC_ARG_ENABLE(select,
2093 AS_HELP_STRING([--disable-select],[Disable select(2) support.]),
2094 [
2095 SQUID_YESNO($enableval,[--disable-select takes no extra argument])
2096 if test "x$enableval" = "xyes"; then
2097 if test "x$squid_host_os" = "xmingw"; then
2098 squid_opt_io_loop_engine="select_win32"
2099 else
2100 squid_opt_io_loop_engine="select"
2101 fi
2102 fi
2103 ])
2104 AC_MSG_NOTICE([enabling select syscall for net I/O: ${enable_select:=auto}])
2105
2106 AC_ARG_ENABLE(poll,
2107 AS_HELP_STRING([--disable-poll],[Disable poll(2) support.]),
2108 [
2109 SQUID_YESNO($enableval,[--disable-poll takes no extra argument])
2110 test "x$enableval" = "xyes" && squid_opt_io_loop_engine="poll"
2111 ])
2112 AC_MSG_NOTICE([enabling poll syscall for net I/O: ${enable_poll:=auto}])
2113
2114 AC_ARG_ENABLE(kqueue,
2115 AS_HELP_STRING([--disable-kqueue],
2116 [Disable kqueue(2) support.]), [
2117 SQUID_YESNO($enableval,[--enable-kqueue takes no extra argument])
2118 ])
2119 if test "x${enable_kqueue:=auto}" != "xno" ; then
2120 AC_CHECK_HEADERS([sys/event.h],[],[
2121 if test "x${enable_kqueue}" = "xyes" ; then
2122 AC_MSG_ERROR([kqueue support requires sys/event.h header file.])
2123 fi
2124 ])
2125 AC_CHECK_FUNCS(kqueue,[],[
2126 if test "x${enable_kqueue}" = "xyes" ; then
2127 AC_MSG_ERROR([kqueue support missing in libc library.])
2128 fi
2129 ])
2130 if test "x$ac_cv_func_kqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes" ; then
2131 squid_opt_io_loop_engine="kqueue"
2132 else
2133 enable_kqueue="no"
2134 fi
2135 fi
2136 AC_MSG_NOTICE([enabling kqueue for net I/O: ${enable_kqueue:=auto}])
2137
2138 dnl Enable epoll()
2139 AC_ARG_ENABLE(epoll,
2140 AS_HELP_STRING([--disable-epoll],[Disable Linux epoll(2) support.]),
2141 [
2142 SQUID_YESNO($enableval,[--disable-epoll takes no extra argument])
2143 test "x$enableval" = "xyes" && squid_opt_io_loop_engine="epoll"
2144 ])
2145 AC_MSG_NOTICE([enabling epoll syscall for net I/O: ${enable_epoll:=auto}])
2146
2147 # auto-detect and verify epoll header and library present and working
2148 # logic mapping and loop method selection are performed later
2149 if test "x$enable_epoll" != "xno" ; then
2150
2151 # check if libs are needed to support epoll
2152 # note: this code block seems quite generic. Could it be extracted
2153 # into a squid specific configure function?
2154 SQUID_STATE_SAVE(squid_epoll_state)
2155 AC_SEARCH_LIBS(epoll_ctl,[epoll])
2156 if test "x$ac_cv_search_epoll_ctl" = "xno" ; then
2157 enable_epoll=no #disable. Needed code not found
2158 elif test "x$ac_cv_search_epoll_ctl" = "xnone required" ; then
2159 EPOLL_LIBS=""
2160 else
2161 EPOLL_LIBS=$ac_cv_search_epoll_ctl
2162 fi
2163 AC_SUBST(EPOLL_LIBS)
2164 SQUID_STATE_ROLLBACK(squid_epoll_state) #de-pollute LIBS
2165
2166 # epoll requires sys/epoll.h
2167 AC_CHECK_HEADERS([sys/epoll.h])
2168
2169 dnl Verify that epoll really works
2170 if test "x$ac_cv_search_epoll_ctl" != 'xno' ; then
2171 SQUID_CHECK_EPOLL
2172 fi
2173
2174 if test "x$enable_epoll" = "xyes" -a "x$squid_cv_epoll_works" = "xno" ; then
2175 AC_MSG_ERROR([Epoll does not work. Force-enabling it is not going to help.])
2176 fi
2177 fi
2178
2179 dnl Enable /dev/poll
2180 AC_ARG_ENABLE(devpoll,
2181 AS_HELP_STRING([--disable-devpoll],[Disable Solaris /dev/poll support.]),
2182 [
2183 SQUID_YESNO($enableval,[--disable-devpoll takes no extra argument])
2184 test "x$enableval" = "xyes" && squid_opt_io_loop_engine="devpoll"
2185 ])
2186 AC_MSG_NOTICE([enabling /dev/poll for net I/O: ${enable_devpoll:=auto}])
2187
2188 ## auto-detect and verify devpoll header and library present and working
2189 if test "x$enable_devpoll" != "xno"; then
2190
2191 # /dev/poll requires ioctl() and write()
2192 AC_CHECK_FUNCS(ioctl)
2193 AC_CHECK_FUNCS(write)
2194
2195 # /dev/poll requires sys/devpoll.h
2196 AC_CHECK_HEADERS([sys/devpoll.h],,[
2197 if test "x$enable_devpoll" = "xyes"; then
2198 AC_MSG_ERROR([--enable-devpoll specified but /dev/poll headers not found])
2199 fi
2200 enable_devpoll=no])
2201
2202 # Verify that /dev/poll really works
2203 if test "x$enable_devpoll" != 'xno' ; then
2204 SQUID_CHECK_DEVPOLL
2205 fi
2206
2207 if test "x$enable_devpoll" = "xyes" -a "x$squid_cv_devpoll_works" = "xno" ; then
2208 AC_MSG_ERROR([/dev/poll does not work. Force-enabling it is not going to help.])
2209 fi
2210 fi
2211
2212
2213 AC_ARG_ENABLE(http-violations,
2214 AS_HELP_STRING([--disable-http-violations],
2215 [This allows you to remove code which is known to
2216 violate the HTTP protocol specification.]), [
2217 SQUID_YESNO([$enableval],
2218 [unrecognized argument to --disable-http-violations: $enableval])
2219 ])
2220 SQUID_DEFINE_BOOL(USE_HTTP_VIOLATIONS, ${enable_http_violations:=yes},
2221 [Define to enable code which volates the HTTP standard specification])
2222 AC_MSG_NOTICE([HTTP violations support enabled: $enable_http_violations])
2223
2224 # IPFW Transparent Proxy
2225 AC_ARG_ENABLE(ipfw-transparent,
2226 AS_HELP_STRING([--enable-ipfw-transparent],
2227 [Enable Transparent Proxy support for systems
2228 using FreeBSD IPFW-style firewalling.]), [
2229 SQUID_YESNO([$enableval],
2230 [unrecognized argument to --enable-ipfw-transparent: $enableval])
2231 ])
2232 SQUID_DEFINE_BOOL(IPFW_TRANSPARENT,${enable_ipfw_transparent:=no},
2233 [Enable support for Transparent Proxy on systems using FreeBSD IPFW-style firewalling.])
2234 AC_MSG_NOTICE([FreeBSD IPFW-based transparent proxying enabled: $enable_ipfw_transparent])
2235
2236 # IP-Filter Transparent Proxy
2237 AC_ARG_ENABLE(ipf-transparent,
2238 AS_HELP_STRING([--enable-ipf-transparent],
2239 [Enable Transparent Proxy support using IPFilter-style firewalling]), [
2240 SQUID_YESNO([$enableval],
2241 [unrecognized argument to --enable-ipf-transparent: $enableval])
2242 ])
2243 #will be AC_DEFINEd later, after checking for appropriate infrastructure
2244 #IPF currently broken. Default-disabled for now.
2245 AC_MSG_NOTICE([IPF-based transparent proxying requested: ${enable_ipf_transparent:=no}])
2246
2247 dnl Enable PF Transparent Proxy
2248 AC_ARG_ENABLE(pf-transparent,
2249 AS_HELP_STRING([--enable-pf-transparent],
2250 [Enable Transparent Proxy support for systems using PF network address redirection.]), [
2251 SQUID_YESNO([$enableval],
2252 [unrecognized argument to --enable-pf-transparent: $enableval])
2253 ])
2254 #will be AC_DEFINEd later, after checking for appropriate infrastructure
2255 AC_MSG_NOTICE([PF-based transparent proxying requested: ${enable_pf_transparent:=no}])
2256
2257 dnl Enable /dev/pf support for older PF Transparent Proxy systems (OpenBSD 4.x and older)
2258 AC_ARG_WITH(nat-devpf,
2259 AS_HELP_STRING([--with-nat-devpf],
2260 [Enable /dev/pf support for NAT on older OpenBSD and FreeBSD kernels.]), [
2261 SQUID_YESNO([$enableval],
2262 [unrecognized argument to --with-nat-devpf: $enableval])
2263 ])
2264 #will be AC_DEFINEd later, after checking for appropriate infrastructure
2265 AC_MSG_NOTICE([NAT lookups via /dev/pf: ${with_nat_devpf:=no}])
2266
2267 # Linux Netfilter Transparent Proxy
2268 AC_ARG_ENABLE(linux-netfilter,
2269 AS_HELP_STRING([--enable-linux-netfilter],
2270 [Enable Transparent Proxy support for Linux (Netfilter)]), [
2271 SQUID_YESNO([$enableval],
2272 [unrecognized argument to --enable-linux-netfilter: $enableval])
2273 ])
2274 AC_MSG_NOTICE([Linux Netfilter support requested: ${enable_linux_netfilter:=auto}])
2275 #will be AC_DEFINEd later, after checking for appropriate infrastructure
2276
2277
2278 dnl Look for libnetfilter_conntrack options (needed for QOS netfilter marking)
2279 dnl squid_opt_netfilterconntrack is set only when option is explicity specified
2280 AC_ARG_WITH(netfilter-conntrack,
2281 AS_HELP_STRING([--without-netfilter-conntrack],
2282 [Do not use Netfilter conntrack libraries for packet marking.
2283 A path to alternative library location may be specified by
2284 using --with-netfilter-conntrack=PATH. Default: auto-detect.]), [
2285 case "$with_netfilter_conntrack" in
2286 yes|no)
2287 squid_opt_netfilterconntrack=$with_netfilter_conntrack
2288 ;;
2289 *)
2290 if test ! -d "$withval" ; then
2291 AC_MSG_ERROR([--without-netfilter-conntrack path does not point to a directory])
2292 fi
2293 squid_opt_netfilterconntrackpath=$withval
2294 LDFLAGS="-L$squid_opt_netfilterconntrackpath/lib $LDFLAGS"
2295 CPPFLAGS="-I$squid_opt_netfilterconntrackpath/include $CPPFLAGS"
2296 with_netfilter_conntrack=yes
2297 squid_opt_netfilterconntrack=yes
2298 esac
2299 ])
2300 AC_MSG_NOTICE([Linux Netfilter Conntrack support requested: ${with_netfilter_conntrack:=auto}])
2301 if test "x$with_netfilter_conntrack" != "xno"; then
2302 AC_SEARCH_LIBS([nfct_query], [netfilter_conntrack],,[
2303 if test x"$with_netfilter_conntrack" = "xyes"; then
2304 AC_MSG_ERROR([--with-netfilter-conntrack specified but libnetfilter-conntrack library not found])
2305 fi
2306 with_netfilter_conntrack=no])
2307 AC_CHECK_HEADERS([libnetfilter_conntrack/libnetfilter_conntrack.h \
2308 libnetfilter_conntrack/libnetfilter_conntrack_tcp.h],,[
2309 if test x"$with_netfilter_conntrack" = "xyes"; then
2310 AC_MSG_ERROR([--with-netfilter-conntrack specified but libnetfilter-conntrack headers not found])
2311 fi
2312 with_netfilter_conntrack=no])
2313 # If nothing is broken; enable the libraries usage.
2314 if test "x$with_netfilter_conntrack" != "xno"; then
2315 with_netfilter_conntrack=yes
2316 fi
2317 fi
2318
2319
2320 dnl Enable Large file support
2321 buildmodel=""
2322 squid_opt_enable_large_files=no
2323
2324 AC_ARG_WITH(large-files,
2325 AS_HELP_STRING([--with-large-files],[Enable support for large files (logs etc).]), [
2326 if test "x$withval" = "xyes"; then
2327 squid_opt_enable_large_files=yes
2328 fi
2329 ])
2330
2331 dnl UNIX Build environment
2332 dnl AS_HELP_STRING is not suited here because it cannot to specify newlines
2333 AC_ARG_WITH(build-environment,
2334 AS_HELP_STRING([--with-build-environment=model],
2335 [The build environment to use. Normally one of
2336 POSIX_V6_ILP32_OFF32 (32 bits),
2337 POSIX_V6_ILP32_OFFBIG (32 bits with large file support),
2338 POSIX_V6_LP64_OFF64 (64 bits),
2339 POSIX_V6_LPBIG_OFFBIG (large pointers and files),
2340 XBS5_ILP32_OFF32 i(legacy, 32 bits),
2341 XBS5_ILP32_OFFBIG (legacy, 32 bits with large file support),
2342 XBS5_LP64_OFF64 (legacy, 64 bits),
2343 XBS5_LPBIG_OFFBIG (legacy, large pointers and files)
2344 or default (The default for your OS)]), [
2345 case "$withval" in
2346 yes|no)
2347 AC_MSG_FAILURE([--with-build-environment expects a build environment string as used by getconf])
2348 ;;
2349 *)
2350 buildmodel="$withval"
2351 ;;
2352 esac
2353 ])
2354
2355 #hack. Let's early-detect sizeof(long)
2356 AC_CHECK_SIZEOF(long)
2357
2358 if test "x$squid_opt_enable_large_files" = "xyes" -a "x$buildmodel" = "x"; then
2359 for model in POSIX_V6_LPBIG_OFFBIG XBS5_LPBIG_OFFBIG POSIX_V6_LP64_OFF64 XBS5_LP64_OFF64 POSIX_V6_ILP32_OFFBIG XBS5_ILP32_OFFBIG; do
2360 if test "`getconf _$model 2>/dev/null || true`" = 1 || test "`getconf $model 2>/dev/null || true`" ; then
2361 buildmodel=$model
2362 break
2363 fi
2364 done
2365 if test "x$buildmodel" = "x"; then
2366 AC_MSG_WARN([No suitable build environment found for large files. Trying to use _FILE_OFFSET_BITS=64])
2367 fi
2368 fi
2369 if test "x$buildmodel" = "xdefault" -o "x$buildmodel" = "x"; then
2370 # define _FILE_OFFSET_BITS if requested and needed
2371 if test "x$squid_opt_enable_large_files" = "xyes" -a $ac_cv_sizeof_long -le 4 ; then
2372 AC_MSG_NOTICE([Enabling -D_FILE_OFFSET_BITS=64])
2373 CFLAGS="-D_FILE_OFFSET_BITS=64 $CFLAGS"
2374 CXXFLAGS="-D_FILE_OFFSET_BITS=64 $CXXFLAGS"
2375 fi
2376 else
2377 AC_MSG_NOTICE([Using $buildmodel build environment])
2378 if test "`getconf _$buildmodel 2>/dev/null || true`" = 1 || test "`getconf $buildmodel 2>/dev/null || true`" ; then
2379 : # All fine
2380 else
2381 AC_MSG_ERROR(Build environment $buildmodel not known to getconf.)
2382 fi
2383 CFLAGS="`getconf ${buildmodel}_CFLAGS` $CFLAGS"
2384 CXXFLAGS="`getconf ${buildmodel}_CFLAGS` $CXXFLAGS"
2385 LIBS="`getconf ${buildmodel}_LIBS` $LIBS"
2386 LDFLAGS="`getconf ${buildmodel}_LDFLAGS` $LDFLAGS"
2387 if test "x$squid_host_os" = "xsolaris" ; then
2388
2389 # On Solaris getconf returns for CFLAGS -xarch=generic64, -Xa and -Usun options, and
2390 # for LDFLAGS -xarch=generic64, but:
2391 # "-Xa" is supported only by Sun cc, so we need to remove it when using gcc
2392 # For gcc "-xarch=generic64" must be replaced with "-m64"
2393 # The 'sun' define is needed by ipfilter includes, so we must remove "-Usun"
2394 if test "x$GCC" = "xyes"; then
2395 AC_MSG_NOTICE([Removing -Xa for gcc/g++ on $host])
2396 CFLAGS="`echo $CFLAGS | sed -e 's/-Xa//'`"
2397 CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-Xa//'`"
2398 AC_MSG_NOTICE([Replacing -xarch=generic64 with -m64 for gcc/g++ on $host])
2399 CFLAGS="`echo $CFLAGS | sed -e 's/-xarch=generic64/-m64/'`"
2400 CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-xarch=generic64/-m64/'`"
2401 LDFLAGS="`echo $LDFLAGS | sed -e 's/-xarch=generic64//'`"
2402 fi
2403 AC_MSG_NOTICE([Removing -Usun on $host])
2404 CFLAGS="`echo $CFLAGS | sed -e 's/-Usun//'`"
2405 CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-Usun//'`"
2406 fi
2407 fi
2408
2409 dnl Enable Leak Finding Functions
2410 AC_ARG_ENABLE(leakfinder,
2411 AS_HELP_STRING([--enable-leakfinder],
2412 [Enable Leak Finding code. Enabling this alone does nothing;
2413 you also have to modify the source code to use the leak
2414 finding functions. Probably Useful for hackers only.]), [
2415 SQUID_YESNO([$enableval],
2416 [unrecognized argument to --enable-leakfinder: $enableval])
2417 ])
2418 AC_MSG_NOTICE([Leak Finder enabled: ${enable_leakfinder:=no}])
2419 SQUID_DEFINE_BOOL(USE_LEAKFINDER,$enable_leakfinder,
2420 [Enable code for assisting in finding memory leaks. Not for the faint of heart])
2421 AM_CONDITIONAL(ENABLE_LEAKFINDER, [test "x$enable_leakfinder" = "xyes"])
2422
2423
2424 AC_ARG_ENABLE(follow-x-forwarded-for,
2425 AS_HELP_STRING([--enable-follow-x-forwarded-for],
2426 [Enable support for following the X-Forwarded-For
2427 HTTP header to try to find the IP address of the
2428 original or indirect client when a request has
2429 been forwarded through other proxies.]), [
2430 SQUID_YESNO([$enableval],
2431 [unrecognized argument to --enable-follow-x-forwarded-for: $enableval])
2432 ])
2433 AC_MSG_NOTICE([Support for X-Forwarded-For enabled: ${enable_follow_x_forwarded_for:=yes}])
2434 SQUID_DEFINE_BOOL(FOLLOW_X_FORWARDED_FOR,$enable_follow_x_forwarded_for,
2435 [Enable following X-Forwarded-For headers])
2436
2437 AC_ARG_ENABLE(ident-lookups,
2438 AS_HELP_STRING([--disable-ident-lookups],
2439 [Remove code that supports performing Ident (RFC 931) lookups.]), [
2440 SQUID_YESNO([$enableval],[unrecognized argument to --disable-ident-lookups: $enableval])
2441 ])
2442 AC_MSG_NOTICE([Support for Ident lookups enabled: ${enable_ident_lookups:=yes}])
2443 SQUID_DEFINE_BOOL(USE_IDENT,$enable_ident_lookups,[Support for Ident (RFC 931) lookups])
2444
2445 dnl Select Default hosts file location
2446 AC_ARG_ENABLE(default-hostsfile,
2447 AS_HELP_STRING([--enable-default-hostsfile=path],
2448 [Select default location for hosts file.
2449 See hosts_file directive in squid.conf for details]), [
2450 if test "x$enableval" != "xnone" -a "x$enableval" != "xno" ; then
2451 if test \! -f "$enableval"; then
2452 AC_MSG_WARN([Unable to find file $enableval. I hope you know what you are doing.])
2453 fi
2454 squid_opt_default_hosts=$enableval
2455 else
2456 squid_opt_default_hosts="none"
2457 fi
2458 ])
2459 AC_MSG_NOTICE([Default hosts file set to: ${squid_opt_default_hosts:=/etc/hosts}])
2460 DEFAULT_HOSTS=$squid_opt_default_hosts
2461 AC_SUBST(DEFAULT_HOSTS)
2462
2463 # Select auth schemes modules to build
2464 AC_ARG_ENABLE(auth,
2465 AS_HELP_STRING([--enable-auth],
2466 [Build global support for authentication. The list of schemes
2467 and helpers to be enabled is defined elsewhere]), [
2468 SQUID_YESNO([$enableval],
2469 [unrecognized argument to --enable-auth: $enableval])
2470 ])
2471 AC_MSG_NOTICE([Authentication support enabled: ${enable_auth:=yes}])
2472 SQUID_DEFINE_BOOL(USE_AUTH,$enable_auth,[Enable support for authentication])
2473 AM_CONDITIONAL(ENABLE_AUTH, test "x$enable_auth" != "xno")
2474 AUTH_MODULES=""
2475 require_smblib=0
2476
2477 AC_ARG_ENABLE(auth-basic,
2478 AS_HELP_STRING([--enable-auth-basic="list of helpers"],
2479 [Enable the basic authentication scheme, and build the specified helpers.
2480 Not providing an explicit list of helpers will attempt build of
2481 all possible helpers. Default is to do so.
2482 To disable the basic authentication scheme, use --disable-auth-basic.
2483 To enable but build no helpers, specify "none".
2484 To see available helpers, see the src/auth/basic/ directory. ]),[
2485 #nothing to do really
2486 ])
2487 m4_include([src/auth/basic/helpers.m4])
2488
2489 AC_ARG_ENABLE(auth-digest,
2490 AS_HELP_STRING([--enable-auth-digest="list of helpers"],
2491 [Enable the Digest authentication scheme, and build the specified helpers.
2492 Not providing an explicit list of helpers will attempt build of
2493 all possible helpers. Default is to do so.
2494 To disable the Digest authentication scheme, use --disable-auth-digest.
2495 To enable but build no helpers, specify "none".
2496 To see available helpers, see the src/auth/digest/ directory. ]),[
2497 #nothing to do, really
2498 ])
2499 m4_include([src/auth/digest/helpers.m4])
2500
2501 AC_ARG_ENABLE(auth-negotiate,
2502 AS_HELP_STRING([--enable-auth-negotiate="list of helpers"],
2503 [Enable the Negotiate authentication scheme, and build the specified
2504 helpers.
2505 Not providing an explicit list of helpers will attempt build of
2506 all possible helpers. Default is to do so.
2507 To disable the Negotiate authentication scheme,
2508 use --disable-auth-negotiate.
2509 To enable but build no helpers, specify "none".
2510 To see available helpers, see the src/auth/negotiate/ directory. ]),[
2511 #nothing to do, really
2512 ])
2513 m4_include([src/auth/negotiate/helpers.m4])
2514
2515 AC_ARG_ENABLE(auth-ntlm,
2516 AS_HELP_STRING([--enable-auth-ntlm="list of helpers"],
2517 [Enable the NTLM authentication scheme, and build the specified helpers.
2518 Not providing an explicit list of helpers will attempt build of
2519 all possible helpers. Default is to do so.
2520 To disable the NTLM authentication scheme, use --disable-auth-ntlm.
2521 To enable but build no helpers, specify "none".
2522 To see available helpers, see the src/auth/ntlm/ directory. ]),[
2523 ])
2524 m4_include([src/auth/ntlm/helpers.m4])
2525
2526 dnl Authentication libraries to build
2527 dnl This list will not be needed when each auth library has its own Makefile
2528 dnl this is to be placed AFTER each auth module's handler
2529 AUTH_LIBS_TO_BUILD=
2530 for module in $AUTH_MODULES; do
2531 AUTH_LIBS_TO_BUILD="$AUTH_LIBS_TO_BUILD ${module}/lib${module}.la"
2532 done
2533 AC_SUBST(AUTH_MODULES)
2534 AC_SUBST(AUTH_LIBS_TO_BUILD)
2535 AM_CONDITIONAL(ENABLE_SMBLIB, $require_smblib)
2536
2537 dnl Select logging daemon helpers to build
2538 AC_ARG_ENABLE(log-daemon-helpers,
2539 AS_HELP_STRING([--enable-log-daemon-helpers="list of helpers"],
2540 [This option selects which logging daemon helpers to
2541 build and install as part of the normal build process
2542 For a list of available helpers see the src/log/
2543 directory.]),[
2544 #nothing to do, really
2545 ])
2546 m4_include([src/log/helpers.m4])
2547
2548 AC_ARG_ENABLE(external-acl-helpers,
2549 AS_HELP_STRING([--enable-external-acl-helpers="list of helpers"],
2550 [Enable external_acl helpers support and the helpers themselves.
2551 Default is to build all buildable helpers and enable support.
2552 To disable support, use --disable-external-acl-helpers.
2553 To build no helpers, specify "none".
2554 To see available helpers, see the src/acl/external/
2555 directory]), [
2556 #nothing to do, really
2557 ])
2558 m4_include([src/acl/external/helpers.m4])
2559
2560 dnl Select url_rewrite helpers to build
2561 AC_ARG_ENABLE(url-rewrite-helpers,
2562 AS_HELP_STRING([--enable-url-rewrite-helpers="list of helpers"],
2563 [This option selects which url_rewrite helpers to
2564 build and install as part of the normal build
2565 process. The default is to attempt the build of all possible
2566 helpers. Use --disable-url-rewrite-helpers to build none.
2567 For a list of available helpers see the
2568 src/http/url_rewriters/ directory.]),[
2569 ])
2570 m4_include([src/http/url_rewriters/helpers.m4])
2571
2572 dnl Select security helpers to build
2573 AC_ARG_ENABLE(security-cert-validators,
2574 AS_HELP_STRING([--enable-security-cert-validators="list of helpers"],
2575 [This option selects which security certificate validator
2576 helpers to build and install as part of the normal build
2577 process. The default is to attempt the build of all possible
2578 helpers. Use --disable-security-cert-validators to
2579 build none. For a list of available helpers see the
2580 src/security/cert_validators/ directory.]),[
2581 ])
2582 m4_include([src/security/cert_validators/helpers.m4])
2583
2584 AC_ARG_ENABLE(security-cert-generators,
2585 AS_HELP_STRING([--enable-security-cert-generators="list of helpers"],
2586 [This option selects which security certificate validator
2587 helpers to build and install as part of the normal build
2588 process. The default is to attempt the build of all possible
2589 helpers. Use --disable-security-cert-genrators to
2590 build none. For a list of available helpers see the
2591 src/security/cert_generators/ directory.]),[
2592 ])
2593 m4_include([src/security/cert_generators/helpers.m4])
2594
2595 dnl Select storeid_rewrite helpers to build
2596 AC_ARG_ENABLE(storeid-rewrite-helpers,
2597 AS_HELP_STRING([--enable-storeid-rewrite-helpers="list of helpers"],
2598 [This option selects which Store-ID rewrite helpers to
2599 build and install as part of the normal build
2600 process. The default is to attempt the build of all possible
2601 helpers. Use --disable-storeid-rewrite-helpers to build none.
2602 For a list of available helpers see the
2603 src/store/id_rewriters/ directory.]),[
2604 ])
2605 m4_include([src/store/id_rewriters/helpers.m4])
2606
2607 AC_ARG_WITH(valgrind-debug,
2608 AS_HELP_STRING([--with-valgrind-debug],
2609 [Include debug instrumentation for use with valgrind]),
2610 [
2611 SQUID_YESNO([$withval],
2612 [unrecognized argument to --with-valgrind-debug: $withval])
2613 if test "x$withval" != "xno" ; then
2614 AC_CHECK_HEADERS(valgrind/memcheck.h,[],[
2615 AC_MSG_ERROR([Valgrind support requested, needed headers not found.])
2616 ])
2617 fi
2618 ])
2619 SQUID_DEFINE_BOOL(WITH_VALGRIND,${with_valgrind_debug:=no},
2620 [Valgrind memory debugger support])
2621 AC_MSG_NOTICE([Valgrind debug support enabled: $with_valgrind_debug])
2622
2623 dnl Disable "memPools" code
2624 #AC_ARG_ENABLE(chunkedmempools,
2625 # AS_HELP_STRING([--enable-chunkedmempools],
2626 # [Enable experimental chunked memPools. Note that this option
2627 # simply sets the default behaviour. Specific classes can override this
2628 # at runtime, and only lib/MemPool.c needs to be altered
2629 # to change the squid-wide default for all classes.]), [
2630 #SQUID_YESNO([$enableval],
2631 # [--enable-chunkedmempools option takes no arguments])
2632 #])
2633 SQUID_DEFINE_BOOL(USE_CHUNKEDMEMPOOLS,${enable_chunkedmempools:=no},
2634 [Enable chunked Memory Pools support (experimental)])
2635 #AC_MSG_NOTICE([Chunked MemPools enabled: $enable_chunkedmempools])
2636
2637 dnl Enable WIN32 Service compile mode
2638 AC_ARG_ENABLE(win32-service,
2639 AS_HELP_STRING([--enable-win32-service],
2640 [Compile Squid as a WIN32 Service.
2641 Works only on MS-Windows platforms]), [
2642 SQUID_YESNO([$enableval],
2643 [unrecognized argument to --enable-win32-service: $enableval])
2644 ])
2645 SQUID_DEFINE_BOOL(USE_WIN32_SERVICE,${enable_win32_service:=no},
2646 [Enable code supporting MS Windows service mode])
2647 AC_MSG_NOTICE([MS Windows service mode enabled: $enable_win32_service])
2648
2649
2650 # Disable "unlinkd" code
2651 AC_ARG_ENABLE(unlinkd,
2652 AS_HELP_STRING([--disable-unlinkd],[Do not use unlinkd]), [
2653 SQUID_YESNO([$enableval],
2654 [unrecognized argument to --disable-unlinkd: $enableval])
2655 ])
2656 SQUID_DEFINE_BOOL(USE_UNLINKD,${enable_unlinkd:=yes},
2657 [Enable useage of unlinkd])
2658 AM_CONDITIONAL(ENABLE_UNLINKD,test "x$enable_unlinkd" = "xyes")
2659 AC_MSG_NOTICE([unlinkd enabled: $enable_unlinkd])
2660
2661 # Enable backtraces on fatal errors
2662 AC_ARG_ENABLE(stacktraces,
2663 AS_HELP_STRING([--enable-stacktraces],
2664 [Enable automatic call backtrace on fatal errors]), [
2665 SQUID_YESNO([$enableval],
2666 [unrecognized argument to --enable-stacktraces: $enableval])
2667 ])
2668 SQUID_DEFINE_BOOL(PRINT_STACK_TRACE,${enable_stacktraces:=no},
2669 [Print stack traces on fatal errors])
2670 AC_MSG_NOTICE([Automatically print stack trace on fatal errors: $enable_stacktraces])
2671
2672
2673 # CPU Profiling options handling
2674 AC_ARG_ENABLE(cpu-profiling,
2675 AS_HELP_STRING([--enable-cpu-profiling],
2676 [Enable instrumentation to try and understand how CPU power
2677 is spent by squid, by enabling specific probes in selected
2678 functions.
2679 New probes can only be added by modifying the source code.
2680 It is meant to help developers in optimizing performance
2681 of Squid internal functions.
2682 If you are not developer you should not enable this,
2683 as it slows squid down somewhat.
2684 See lib/Profiler.c for more details.]), [
2685 SQUID_YESNO([$enableval],
2686 [unrecognized argument to --enable-cpu-profiling: $enableval])
2687 ])
2688 # Default OFF. This is a debug feature. Only check and enable if forced ON.
2689 if test "x$enable_cpu_profiling" = "xyes"; then
2690 SQUID_CHECK_FUNCTIONAL_CPU_PROFILER
2691 if test "x$squid_cv_cpu_profiler_works" = "xno"; then
2692 AC_MSG_ERROR([CPU profiling will not be functional in this build.])
2693 fi
2694 fi
2695 SQUID_DEFINE_BOOL(USE_XPROF_STATS,${enable_cpu_profiling:=no},
2696 [Define to enable CPU profiling within Squid])
2697 AM_CONDITIONAL(ENABLE_XPROF_STATS,
2698 test "x$enable_cpu_profiling" = "xyes")
2699 AC_MSG_NOTICE([CPU profiling enabled: $enable_cpu_profiling])
2700
2701 # Enable X-Accelerator-Vary for Vary support within an accelerator setup
2702 AC_ARG_ENABLE(x-accelerator-vary,
2703 AS_HELP_STRING([--enable-x-accelerator-vary],
2704 [Enable support for the X-Accelerator-Vary
2705 HTTP header. Can be used to indicate
2706 variance within an accelerator setup.
2707 Typically used together with other code
2708 that adds custom HTTP headers to the requests.]), [
2709 SQUID_YESNO([$enableval],
2710 [unrecognized argument to --enable-x-accelerator-vary: $enableval])
2711 ])
2712 SQUID_DEFINE_BOOL(X_ACCELERATOR_VARY,${enable_x_accelerator_vary:=no},
2713 [Enable support for the X-Accelerator-Vary HTTP header])
2714 AC_MSG_NOTICE([X-Accelerator-Vary support enabled: $enable_x_accelerator_vary])
2715
2716
2717 if $CPPUNITCONFIG --help >/dev/null; then
2718 squid_cv_cppunit_version="`$CPPUNITCONFIG --version`"
2719 AC_MSG_NOTICE([using system installed cppunit version $squid_cv_cppunit_version])
2720 unset squid_cv_cppunit_version
2721 SQUID_CPPUNIT_LIBS="`$CPPUNITCONFIG --libs`"
2722 SQUID_CPPUNIT_LA=''
2723 SQUID_CPPUNIT_INC="`$CPPUNITCONFIG --cflags`"
2724 else
2725 AC_MSG_WARN([cppunit does not appear to be installed. squid does not require this, but code testing with 'make check' will fail.])
2726 SQUID_CPPUNIT_LA=''
2727 SQUID_CPPUNIT_LIBS=''
2728 SQUID_CPPUNIT_INC=''
2729 fi
2730
2731 AC_ARG_WITH(cppunit-basedir,
2732 AS_HELP_STRING([--with-cppunit-basedir=PATH],
2733 [Path where the cppunit headers are libraries can be found ]), [
2734 if test -f "$withval/include/cppunit/TestCase.h"; then
2735 AC_MSG_NOTICE([Using cppunit includes from $withval])
2736 SQUID_CPPUNIT_INC="-I${withval}/include"
2737 else
2738 AC_MSG_ERROR(Cannot find cppunit at $withval)
2739 fi
2740 if test -f "$withval/lib/libcppunit.la"; then
2741 AC_MSG_NOTICE([Using cppunit lib from $withval])
2742 SQUID_CPPUNIT_LA="${withval}/lib/libcppunit.la"
2743 SQUID_CPPUNIT_LIBS='$(SQUID_CPPUNIT_LA)'
2744 else
2745 AC_MSG_ERROR(Cannot find cppunit at $withval)
2746 fi
2747 ])
2748 SQUID_STATE_SAVE(squid_cppunit_state)
2749 CXXFLAGS="$CXXFLAGS $SQUID_CPPUNIT_INC"
2750 AC_CHECK_HEADERS(cppunit/extensions/HelperMacros.h)
2751 SQUID_STATE_ROLLBACK(squid_cppunit_state)
2752 AC_SUBST(SQUID_CPPUNIT_LIBS)
2753 AC_SUBST(SQUID_CPPUNIT_LA)
2754 AC_SUBST(SQUID_CPPUNIT_INC)
2755
2756 # Force some compilers to use ANSI features
2757 #
2758 case "$host" in
2759 *-hp-hpux*)
2760 if test "x$ac_cv_prog_CC" = "xcc" ; then
2761 AC_MSG_NOTICE([adding '-Ae' to cc args for $host])
2762 CC="cc -Ae";
2763 ac_cv_prog_CC="$CC"
2764 fi
2765 ;;
2766 esac
2767
2768
2769 dnl automake handles this AC_PATH_PROG(MAKEDEPEND, makedepend, $TRUE)
2770
2771 case "$host" in
2772 *hpux*)
2773 AC_MSG_NOTICE([Disabling ranlib for HP-UX...])
2774 RANLIB=":"
2775 ;;
2776 esac
2777
2778 dnl Check for headers
2779 AC_HEADER_DIRENT
2780 AC_HEADER_STDC
2781
2782 AC_CHECK_HEADERS( \
2783 arpa/inet.h \
2784 arpa/nameser.h \
2785 assert.h \
2786 bstring.h \
2787 crypt.h \
2788 ctype.h \
2789 direct.h \
2790 errno.h \
2791 execinfo.h \
2792 fcntl.h \
2793 fnmatch.h \
2794 getopt.h \
2795 glob.h \
2796 gnumalloc.h \
2797 grp.h \
2798 ipl.h \
2799 lber.h \
2800 ldap.h \
2801 libc.h \
2802 limits.h \
2803 linux/posix_types.h \
2804 linux/types.h \
2805 malloc.h \
2806 math.h \
2807 memory.h \
2808 mount.h \
2809 netdb.h \
2810 netinet/in.h \
2811 netinet/in_systm.h \
2812 netinet/tcp.h \
2813 paths.h \
2814 poll.h \
2815 pwd.h \
2816 regex.h \
2817 sched.h \
2818 siginfo.h \
2819 signal.h \
2820 stdarg.h \
2821 stddef.h \
2822 stdio.h \
2823 stdlib.h \
2824 string.h \
2825 strings.h \
2826 sys/bitypes.h \
2827 sys/file.h \
2828 sys/ioctl.h \
2829 sys/ipc.cc \
2830 sys/param.h \
2831 sys/prctl.h \
2832 sys/md5.h \
2833 sys/mman.h \
2834 sys/msg.h \
2835 sys/resource.h \
2836 sys/select.h \
2837 sys/shm.h \
2838 sys/socket.h \
2839 sys/stat.h \
2840 syscall.h \
2841 sys/syscall.h \
2842 sys/time.h \
2843 sys/types.h \
2844 sys/uio.h \
2845 sys/un.h \
2846 sys/vfs.h \
2847 sys/wait.h \
2848 syslog.h \
2849 time.h \
2850 unistd.h \
2851 utime.h \
2852 varargs.h \
2853 byteswap.h \
2854 glib.h \
2855 stdint.h \
2856 inttypes.h \
2857 db.h \
2858 db_185.h \
2859 wchar.h
2860 )
2861
2862 AC_CHECK_HEADERS( \
2863 linux/netfilter_ipv4.h \
2864 linux/netfilter_ipv6/ip6_tables.h \
2865 ,,,
2866 SQUID_DEFAULT_INCLUDES
2867 #if HAVE_LIMITS_H
2868 #include <limits.h>
2869 #endif
2870 /* Netfilter ip(6)tables v1.4.0 has broken headers */
2871 #if HAVE_NETINET_IN_H
2872 #include <netinet/in.h>
2873 #endif
2874 )
2875
2876 dnl *BSD dont include the dependencies for all their net/ and netinet/ files
2877 dnl We must include a few basic type headers for them to work.
2878 AC_CHECK_HEADERS( \
2879 net/if.h \
2880 netinet/if_ether.h\
2881 netinet/icmp6.h \
2882 netinet/in.h \
2883 netinet/ip.h \
2884 netinet/ip6.h \
2885 netinet/ip_icmp.h \
2886 netinet/ipl.h \
2887 net/pf/pfvar.h \
2888 net/pfvar.h \
2889 sys/mount.h\
2890 resolv.h \
2891 ,,,
2892 SQUID_BSDNET_INCLUDES)
2893
2894 AC_C_CONST
2895 AC_C_BIGENDIAN
2896
2897 AC_STRUCT_TM
2898 AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[
2899 #if TM_IN_SYS_TIME
2900 #if HAVE_SYS_TIME_H
2901 #include <sys/time.h>
2902 #endif
2903 #elif HAVE_TIME_H
2904 #include <time.h>
2905 #endif
2906 ])
2907
2908 dnl Override rusage() detect on MinGW because is emulated in source code
2909 case "$squid_host_os" in
2910 mingw)
2911 AC_DEFINE(HAVE_STRUCT_RUSAGE)
2912 ac_cv_func_getrusage='yes'
2913 AC_MSG_NOTICE([Using own rusage on Windows.])
2914 ;;
2915 *)
2916 AC_CHECK_TYPE(struct rusage,AC_DEFINE(HAVE_STRUCT_RUSAGE,1,[The system provides struct rusage]),,[
2917 #if HAVE_SYS_TIME_H
2918 #include <sys/time.h>
2919 #endif
2920 #if HAVE_SYS_RESOURCE_H
2921 #include <sys/resource.h>
2922 #endif])
2923 ;;
2924 esac
2925
2926 AC_CHECK_MEMBERS([struct iphdr.ip_hl],,,[
2927 #if HAVE_SYS_TYPES_H
2928 #include <sys/types.h>
2929 #endif
2930 #include <netinet/in.h>
2931 #include <netinet/in_systm.h>
2932 #include <netinet/ip.h>
2933 #if defined (__linux__) || defined (__CYGWIN__)
2934 #define ip_hl ihl
2935 #endif
2936 #ifndef __linux__
2937 #ifndef __CYGWIN__
2938 #define iphdr ip
2939 #endif
2940 #endif])
2941
2942 dnl Check for typedefs
2943 AC_CHECK_SIZEOF(void *)
2944
2945 # check for a bunch of types
2946 AC_TYPE_INT8_T
2947 AC_TYPE_UINT8_T
2948 AC_TYPE_INT16_T
2949 AC_TYPE_UINT16_T
2950 AC_TYPE_INT32_T
2951 AC_TYPE_UINT32_T
2952 AC_TYPE_INT64_T
2953 AC_TYPE_UINT64_T
2954 AC_TYPE_PID_T
2955 AC_TYPE_SIZE_T
2956 AC_TYPE_SSIZE_T
2957 AC_TYPE_OFF_T
2958 AC_TYPE_UID_T
2959 AC_CHECK_TYPE([bool])
2960 #need the defines for PRId64
2961 AC_CHECK_SIZEOF(int64_t)
2962 AC_CHECK_SIZEOF(long)
2963 #need the defines for PRIuSIZE
2964 AC_CHECK_SIZEOF(size_t)
2965 #need the define for overflow checks
2966 AC_CHECK_SIZEOF(off_t)
2967 AC_CHECK_SIZEOF(size_t)
2968
2969 dnl Some C++11 types we try to use
2970 AX_CXX_TYPE_NULLPTR
2971 AX_CXX_TYPE_UNIQUE_PTR
2972 AX_CXX_TYPE_UNIFORM_DISTRIBUTIONS
2973 SQUID_CXX_STD_UNDERLYING_TYPE
2974
2975 dnl On Solaris 9 x86, gcc may includes a "fixed" set of old system include files
2976 dnl that is incompatible with the updated Solaris header files.
2977 dnl For this reason, we must check if pad128_t and upad128_t are defined.
2978 AC_CHECK_TYPE(pad128_t,
2979 AC_DEFINE(HAVE_PAD128_T,1,[pad128_t is defined in system headers]),
2980 ,SQUID_DEFAULT_INCLUDES)
2981
2982 AC_CHECK_TYPE(upad128_t,
2983 AC_DEFINE(HAVE_UPAD128_T,1,[upad128_t is defined in system headers]),
2984 ,SQUID_DEFAULT_INCLUDES)
2985
2986 AC_CHECK_TYPE(mode_t, AC_DEFINE(HAVE_MODE_T,1,[mode_t is defined by the system headers]),,SQUID_DEFAULT_INCLUDES)
2987 AC_CHECK_TYPE(fd_mask, AC_DEFINE(HAVE_FD_MASK,1,[fd_mask is defined by the system headers]),,SQUID_DEFAULT_INCLUDES)
2988
2989 AC_CHECK_TYPE(socklen_t,AC_DEFINE(HAVE_SOCKLEN_T,1,[socklen_t is defined by the system headers]),,[
2990 #include <sys/types.h>
2991 #include <sys/socket.h>
2992 #if STDC_HEADERS
2993 #include <stdlib.h>
2994 #include <stddef.h>
2995 #endif])
2996
2997 AC_CHECK_TYPE(mtyp_t,AC_DEFINE(HAVE_MTYP_T,1,
2998 [mtyp_t is defined by the system headers]),,[#include <sys/types.h>
2999 #include <sys/ipc.h>
3000 #include <sys/msg.h>])
3001
3002 # check for compiler support of %zu printf macro
3003 AH_TEMPLATE(PRIuSIZE,[Compiler supports %zu printf macro])
3004 AC_MSG_CHECKING([for compiler %zu support])
3005 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3006 #include <stdio.h>
3007 ]],[[size_t n=1;printf("%zu",n);]])],[
3008 AC_DEFINE(PRIuSIZE,"zu")
3009 AC_MSG_RESULT(yes)
3010 ],[AC_MSG_RESULT(no)],[AC_MSG_RESULT(no)])
3011
3012
3013 dnl Check for special functions
3014 AC_FUNC_ALLOCA
3015
3016
3017 dnl Check for libcap header (assume its not broken unless
3018 AC_ARG_WITH(libcap, AS_HELP_STRING([--without-libcap],
3019 [disable usage of Linux capabilities library to control privileges]), [
3020 SQUID_YESNO([$withval],[unrecognized argument to --without-libcap: $withval])
3021 ],[with_libcap=auto])
3022
3023 if test "x$with_libcap" != "xno"; then
3024 # cap_clear_flag is the most recent libcap function we require
3025 AC_CHECK_HEADERS(sys/capability.h)
3026 AC_CHECK_LIB(cap, cap_clear_flag)
3027 SQUID_CHECK_FUNCTIONAL_LIBCAP2
3028
3029 # if it can't be supported..
3030 if test "x$ac_cv_header_sys_capability_h" = "xno" -o \
3031 "x$ac_cv_lib_cap_cap_clear_flag" = "xno"; then
3032 # and it was forced on: error
3033 if test "x$with_libcap" = "xyes" ; then
3034 AC_MSG_ERROR([libcap forced enabled but not available or not usable, requires libcap-2.09 or later])
3035 else
3036 # with_libcap is "auto"; it can't be supported. Disable.
3037 with_libcap=no
3038 fi
3039 else
3040 # header and lib are ok, we support
3041 with_libcap=yes
3042 fi
3043
3044 fi
3045
3046 SQUID_DEFINE_BOOL(USE_LIBCAP,$with_libcap,
3047 [use libcap to set capabilities required for TPROXY])
3048 AC_MSG_NOTICE([libcap support enabled: $with_libcap])
3049 SQUID_DEFINE_BOOL(LIBCAP_BROKEN,${squid_cv_sys_capability_works:=no},
3050 [libcap2 headers are broken and clashing with glibc])
3051 AC_MSG_NOTICE([libcap2 headers are ok: $squid_cv_sys_capability_works])
3052
3053
3054 dnl Check for needed libraries
3055 AC_SEARCH_LIBS([gethostbyname],[nsl resolv bind])
3056 AC_SEARCH_LIBS([res_init],[resolv])
3057 AC_SEARCH_LIBS([__res_search],[resolv])
3058 AC_SEARCH_LIBS([bind],[socket])
3059 AC_SEARCH_LIBS([opcom_stack_trace],[opcom_stack])
3060 AC_SEARCH_LIBS([strlcpy], [bsd])
3061 AC_SEARCH_LIBS([yp_match], [nsl nss_nis nss_nisplus])
3062 dnl Check for Winsock only on MinGW, on Cygwin we must use emulated BSD socket API
3063 if test "x$squid_host_os" = "xmingw" ; then
3064 SQUID_CHECK_WINSOCK_LIB
3065 AC_CHECK_HEADERS( \
3066 windows.h \
3067 ws2tcpip.h \
3068 iphlpapi.h ,,,[
3069 #if HAVE_WINSOCK2_H
3070 #include <winsock2.h>
3071 #endif
3072 #if HAVE_WINDOWS_H
3073 #include <windows.h>
3074 #endif
3075 #if HAVE_WS2TCPIP_H
3076 #include <ws2tcpip.h>
3077 #endif
3078 ])
3079 fi
3080
3081 # check that we have unix sockets
3082 SQUID_CHECK_UNIX_SOCKET
3083 SQUID_DEFINE_BOOL(HAVE_UNIXSOCKET,$squid_cv_unixsocket,[System supports unix sockets])
3084
3085 AC_CHECK_LIB(gnumalloc, malloc)
3086 if test "x$ac_cv_lib_gnumalloc_malloc" = "xyes"; then
3087 AC_MSG_NOTICE([Disabling extended malloc functions when using bundled gnumalloc])
3088 ac_cv_func_mallocblksize=no
3089 ac_cv_func_mallopt=no
3090 else
3091 case "$squid_host_os" in
3092 solaris)
3093 AC_MSG_NOTICE([skipping libmalloc check for $host])
3094 ;;
3095 freebsd)
3096 AC_MSG_NOTICE([skipping libmalloc check for $host])
3097 ;;
3098 *)
3099 #used later. FIXME
3100 AC_CHECK_LIB(malloc, main)
3101 ;;
3102 esac
3103 fi
3104
3105 case "$squid_host_os" in
3106 mingw)
3107 AC_MSG_NOTICE([Use MSVCRT for math functions.])
3108 ;;
3109 *)
3110 dnl rint() and log() are only used in old C code for now.
3111 AC_LANG_PUSH([C])
3112 AC_SEARCH_LIBS([rint],[m])
3113 AC_SEARCH_LIBS([log],[m])
3114 AC_LANG_POP([C])
3115 ;;
3116 esac
3117
3118 dnl --with-maxfd present for compatibility with Squid-2.
3119 dnl undocumented in ./configure --help to encourage using the Squid-3 directive
3120 AC_ARG_WITH(maxfd,,
3121 [
3122 case ${withval} in
3123 [[0-9]]*)
3124 squid_filedescriptors_num=$withval
3125 AC_MSG_NOTICE([forcing default of $squid_filedescriptors_num filedescriptors (user-forced)])
3126 ;;
3127 *)
3128 AC_MSG_ERROR(--with-maxfd expects a numeric argument)
3129 ;;
3130 esac
3131 ])
3132
3133 AC_ARG_WITH(filedescriptors,
3134 AS_HELP_STRING([--with-filedescriptors=NUMBER],
3135 [Force squid to support NUMBER filedescriptors]),
3136 [
3137 case ${withval} in
3138 [[0-9]]*)
3139 squid_filedescriptors_num=$withval
3140 AC_MSG_NOTICE([forcing default of $squid_filedescriptors_num filedescriptors (user-forced)])
3141 ;;
3142 *)
3143 AC_MSG_ERROR(--with-filedescriptors expects a numeric argument)
3144 ;;
3145 esac
3146 ])
3147
3148 SQUID_CHECK_DEFAULT_FD_SETSIZE
3149 SQUID_CHECK_MAXFD
3150 if test "x$squid_filedescriptors_num" != "x"; then
3151 AC_MSG_NOTICE([Default number of fieldescriptors: $squid_filedescriptors_num])
3152 fi
3153 if test "$squid_filedescriptors_num" -lt 512 ; then
3154 AC_MSG_WARN([$squid_filedescriptors_num may not be enough filedescriptors if your])
3155 AC_MSG_WARN([cache will be very busy. Please see the FAQ page])
3156 AC_MSG_WARN([http://wiki.squid-cache.org/SquidFaq/TroubleShooting])
3157 AC_MSG_WARN([on how to increase your filedescriptor limit])
3158 fi
3159 AC_DEFINE_UNQUOTED(SQUID_MAXFD, $squid_filedescriptors_num,[Maximum number of open filedescriptors])
3160
3161
3162 dnl Enable IPv6 support
3163 AC_MSG_CHECKING([whether to enable IPv6])
3164 AC_ARG_ENABLE(ipv6,
3165 AS_HELP_STRING([--disable-ipv6],[Disable IPv6 support. The default is to probe system capabilities on startup.]), [
3166 SQUID_YESNO([$enableval],[unrecognized argument to --disable-ipv6: $enableval])
3167 ])
3168 AC_MSG_RESULT(${enable_ipv6:=yes})
3169 SQUID_DEFINE_BOOL(USE_IPV6,$enable_ipv6,[Enable support for IPv6 ])
3170
3171 if test "x$enable_ipv6" = "xyes" ; then
3172 SQUID_CHECK_SIN6_LEN_IN_SAI
3173 fi
3174 SQUID_CHECK_SS_LEN_IN_SOCKADDR_STORAGE
3175 SQUID_CHECK_SIN_LEN_IN_SOCKADDR_IN
3176
3177
3178 dnl Check for libdl, used by auth_modules/PAM
3179 if test "x$with_dl" = "xyes"; then
3180 AC_CHECK_LIB(dl, dlopen)
3181 fi
3182
3183 dnl -lintl is needed on SCO version 3.2v4.2 for strftime()
3184 dnl Robert Side <rside@aiinc.bc.ca>
3185 dnl Mon, 18 Jan 1999 17:48:00 GMT
3186 case "$host" in
3187 *-pc-sco3.2*)
3188 AC_CHECK_LIB(intl, strftime)
3189 ;;
3190 esac
3191
3192 dnl Check for libdb
3193 dnl this is not fully functional if db.h is for a differend db version
3194 DBLIB=
3195
3196 dnl check that dbopen is actually defined in the header
3197 dnl FIXME: in case of failure undef db-related includes etc.
3198 AC_CHECK_DECL(dbopen,,,[
3199 #if HAVE_SYS_TYPES_H
3200 #include <sys/types.h>
3201 #endif
3202 #if HAVE_LIMITS_H
3203 #include <limits.h>
3204 #endif
3205 #if HAVE_DB_185_H
3206 #include <db_185.h>
3207 #elif HAVE_DB_H
3208 #include <db.h>
3209 #endif])
3210
3211 dnl 1.85
3212 SQUID_CHECK_DBOPEN_NEEDS_LIBDB
3213 if test "x$ac_cv_dbopen_libdb" = "xyes"; then
3214 LIB_DB="-ldb"
3215 fi
3216 AC_SUBST(LIB_DB)
3217
3218 dnl System-specific library modifications
3219 dnl
3220 case "$host" in
3221 i386-*-solaris2.*)
3222 if test "x$GCC" = "xyes"; then
3223 AC_MSG_NOTICE([Removing -O for gcc on $host])
3224 CFLAGS="`echo $CFLAGS | sed -e 's/-O[[0-9g]]*//'`"
3225 fi
3226 ;;
3227
3228 *-sgi-irix*)
3229 AC_MSG_NOTICE([Removing -lsocket for IRIX...])
3230 LIBS=`echo $LIBS | sed -e s/-lsocket//`
3231 AC_MSG_NOTICE([Removing -lnsl for IRIX...])
3232 LIBS=`echo $LIBS | sed -e s/-lnsl//`
3233 ac_cv_lib_nsl_main=no
3234 AC_MSG_NOTICE([Removing -lbsd for IRIX...])
3235 LIBS=`echo $LIBS | sed -e s/-lbsd//`
3236 ;;
3237 dnl From: c0032033@ws.rz.tu-bs.de (Joerg Schumacher)
3238 dnl Date: Thu, 17 Oct 1996 04:09:30 +0200
3239 dnl Please change your configure script. AIX doesn't need -lbsd.
3240 *-ibm-aix*)
3241 AC_MSG_NOTICE([Removing -lbsd for AIX...])
3242 LIBS=`echo $LIBS | sed -e s/-lbsd//`
3243
3244 SQUID_CC_REQUIRE_ARGUMENT([ac_cv_require_rtti],[-rtti],[[
3245 #include <assert.h>
3246 #ifndef NULL
3247 #define NULL 0
3248 #endif
3249 class Foo{
3250 public:virtual ~Foo(){}
3251 };
3252 class Bar:public Foo{
3253 public:Bar():Foo(){}
3254 };
3255 ]],[[
3256 Foo * myFoo=new Bar();
3257 Bar * myBar=dynamic_cast<Bar *>(myFoo);
3258 assert(myBar != NULL);
3259 ]])
3260 if test "$ac_cv_require_rtti" = "yes"; then
3261 SQUID_CFLAGS="-rtti $SQUID_CFLAGS"
3262 SQUID_CXXFLAGS="-rtti $SQUID_CXXFLAGS"
3263 fi
3264
3265 AC_LANG_PUSH([C])
3266 SQUID_CC_REQUIRE_ARGUMENT([ac_cv_require_qcpluscmt],[-qcpluscmt],[[]],[[//c++ cmt]])
3267 AC_LANG_POP([C])
3268 if test "$ac_cv_require_qcpluscmt" = "yes"; then
3269 SQUID_CFLAGS="-qcpluscmt $SQUID_CFLAGS"
3270 fi
3271 ;;
3272
3273 *m88k*)
3274 SQUID_CFLAGS="$SQUID_CFLAGS -D_SQUID_MOTOROLA_"
3275 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_SQUID_MOTOROLA_"
3276 AC_DEFINE(GETTIMEOFDAY_NO_TZP,1,
3277 [If gettimeofday is known to take only one argument])
3278 ;;
3279 [*-*-solaris2.[0-4]])
3280 AC_DEFINE(GETTIMEOFDAY_NO_TZP,1)
3281 ;;
3282 [*-sony-newsos[56]*])
3283 AC_DEFINE(GETTIMEOFDAY_NO_TZP,1)
3284 ;;
3285 esac
3286
3287 dnl This has to be before AC_CHECK_FUNCS
3288 # Disable poll() on certain platforms. Override by setting ac_cv_func_poll
3289 # when running configure.
3290 if test "x$ac_cv_func_poll" = "x" ; then
3291 case "$host" in
3292 [*-hp-hpux*.*])
3293 # Duane Wessels
3294 AC_MSG_NOTICE([disabling poll for $host...])
3295 ac_cv_func_poll='no'
3296 ;;
3297 [*-linux-*])
3298 # Henrik Nordstrom (hno@squid-cache.org) 19980817
3299 # poll is problematic on Linux. We disable it
3300 # by default until Linux gets it right.
3301 rev=`uname -r | awk -F. '{printf "%03d%03d",$1,$2}'`
3302 if test $rev -lt 002002; then
3303 AC_MSG_NOTICE([disabling poll for $host < 2.2...])
3304 ac_cv_func_poll='no'
3305 fi
3306 ;;
3307 [powerpc-ibm-aix4.1.*])
3308 # Mike Laster (mlaster@metavillage.com) 19981021
3309 AC_MSG_NOTICE([disabling poll for $host...])
3310 ac_cv_func_poll='no'
3311 ;;
3312 [*-pc-sco3.2*])
3313 # Robert Side <rside@aiinc.bc.ca>
3314 # Mon, 18 Jan 1999 17:48:00 GMT
3315 AC_MSG_NOTICE([disabling poll for $host...])
3316 ac_cv_func_poll='no'
3317 ;;
3318 esac
3319 fi
3320
3321 dnl Check for library functions
3322 AC_CHECK_FUNCS(\
3323 backtrace_symbols_fd \
3324 bcopy \
3325 eui64_aton \
3326 fchmod \
3327 getdtablesize \
3328 getpagesize \
3329 getpass \
3330 getrlimit \
3331 getrusage \
3332 getspnam \
3333 gettimeofday \
3334 glob \
3335 mallocblksize \
3336 mallopt \
3337 memcpy \
3338 memmove \
3339 memrchr \
3340 memset \
3341 mkstemp \
3342 mktime \
3343 mstats \
3344 poll \
3345 prctl \
3346 pthread_attr_setschedparam \
3347 pthread_attr_setscope \
3348 pthread_setschedparam \
3349 pthread_sigmask \
3350 putenv \
3351 regcomp \
3352 regexec \
3353 regfree \
3354 res_init \
3355 __res_init \
3356 rint \
3357 sched_getaffinity \
3358 sched_setaffinity \
3359 select \
3360 seteuid \
3361 setgroups \
3362 setpgrp \
3363 setsid \
3364 sigaction \
3365 snprintf \
3366 socketpair \
3367 sysconf \
3368 syslog \
3369 timegm \
3370 vsnprintf \
3371 )
3372 dnl ... and some we provide local replacements for
3373 AC_REPLACE_FUNCS(\
3374 initgroups \
3375 psignal \
3376 strerror \
3377 strtoll \
3378 tempnam \
3379 )
3380
3381 AC_CHECK_DECLS([getaddrinfo,getnameinfo,inet_ntop,inet_pton,InetNtopA,InetPtonA],,,[
3382 /*
3383 * BSD requires sys/types.h, sys/socket.h, netinet/in.h, netdb.h, arpa/inet.h
3384 * Linux requires sys/types.h, sys/socket.h, arpa/inet.h
3385 * Windows requires sys/socket.h, winsock2.h, ws2tcpip.h
3386 */
3387 #if HAVE_SYS_TYPES_H
3388 #include <sys/types.h>
3389 #endif
3390 #if HAVE_NETINET_IN_H
3391 #include <netinet/in.h>
3392 #endif
3393 #if HAVE_SYS_SOCKET_H
3394 #include <sys/socket.h>
3395 #endif
3396 #if HAVE_NETDB_H
3397 #include <netdb.h>
3398 #endif
3399 #if HAVE_ARPA_INET_H
3400 #include <arpa/inet.h>
3401 #endif
3402 #if HAVE_WINSOCK2_H
3403 #include <winsock2.h>
3404 #endif
3405 #if HAVE_WS2TCPIP_H
3406 #include <ws2tcpip.h>
3407 #endif
3408 ])
3409
3410 # Magic which checks whether we are forcing a type of comm loop we
3411 # are actually going to (ab)use.
3412 # Mostly ripped from squid-commloops, thanks to adrian and benno
3413
3414 if test "x$squid_opt_io_loop_engine" != "x"; then
3415 AC_MSG_NOTICE([choosing user-specified net I/O API $squid_opt_io_loop_engine])
3416 elif test "x$enable_epoll" != "xno" -a "x$squid_cv_epoll_works" = "xyes" ; then
3417 squid_opt_io_loop_engine="epoll"
3418 elif test "x$enable_kqueue" != "xno" ; then
3419 squid_opt_io_loop_engine="kqueue"
3420 elif test "x$enable_devpoll" != "xno" ; then
3421 squid_opt_io_loop_engine="devpoll"
3422 elif test "x$enable_poll" != "xno" -a "x$ac_cv_func_poll" = "xyes" ; then
3423 squid_opt_io_loop_engine="poll"
3424 elif test "x$enable_select" != "xno" -a "x$ac_cv_func_select" = "xyes"; then
3425 squid_opt_io_loop_engine="select"
3426 elif test "x$enable_select" != "xno" -a "x$squid_host_os" = "xmingw"; then
3427 squid_opt_io_loop_engine="select_win32"
3428 else
3429 AC_MSG_WARN([Eep! Cannot find epoll, kqueue, /dev/poll, poll or select!])
3430 AC_MSG_WARN([Will try select and hope for the best.])
3431 squid_opt_io_loop_engine="select"
3432 fi
3433
3434 AC_MSG_NOTICE([Using ${squid_opt_io_loop_engine} for the IO loop.])
3435
3436 AM_CONDITIONAL(ENABLE_POLL, test "x$squid_opt_io_loop_engine" = "xpoll")
3437 AM_CONDITIONAL(ENABLE_EPOLL, test "x$squid_opt_io_loop_engine" = "xepoll")
3438 AM_CONDITIONAL(ENABLE_SELECT, test "x$squid_opt_io_loop_engine" = "xselect")
3439 AM_CONDITIONAL(ENABLE_SELECT_WIN32, test "x$squid_opt_io_loop_engine" = "xselect_win32")
3440 AM_CONDITIONAL(ENABLE_KQUEUE, test "x$squid_opt_io_loop_engine" = "xkqueue")
3441 AM_CONDITIONAL(ENABLE_DEVPOLL, test "x$squid_opt_io_loop_engine" = "xdevpoll")
3442
3443 case $squid_opt_io_loop_engine in
3444 epoll) AC_DEFINE(USE_EPOLL,1,[Use epoll() for the IO loop]) ;;
3445 devpoll) AC_DEFINE(USE_DEVPOLL,1,[Use /dev/poll for the IO loop]) ;;
3446 poll) AC_DEFINE(USE_POLL,1,[Use poll() for the IO loop]) ;;
3447 kqueue) AC_DEFINE(USE_KQUEUE,1,[Use kqueue() for the IO loop]) ;;
3448 select_win32) AC_DEFINE(USE_SELECT_WIN32,1,[Use Winsock select() for the IO loop]) ;;
3449 select) AC_DEFINE(USE_SELECT,1,[Use select() for the IO loop]) ;;
3450 esac
3451
3452 if test "x$ac_cv_func_sched_getaffinity" = "xyes" -a "x$ac_cv_func_sched_setaffinity" = "xyes" ; then
3453 AC_DEFINE(HAVE_CPU_AFFINITY,1,[Support setting CPU affinity for workers])
3454 fi
3455
3456 SQUID_CHECK_SETRESUID_WORKS
3457 if test "x$squid_cv_resuid_works" = "xyes" ; then
3458 AC_DEFINE(HAVE_SETRESUID,1,[Yay! Another Linux brokenness. Knowing that setresuid() exists is not enough, because RedHat 5.0 declares setresuid() but does not implement it.])
3459 fi
3460
3461 AC_CHECK_HEADERS(mswsock.h)
3462 AC_MSG_CHECKING([for constant CMSG_SPACE])
3463 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
3464 #if HAVE_SYS_SOCKET_H
3465 #include <sys/socket.h>
3466 #endif
3467 #if HAVE_MSWSOCK_H
3468 #include <mswsock.h>
3469 #endif
3470
3471 int a[CMSG_SPACE(int)];
3472 ]])], [
3473 AC_MSG_RESULT(yes)
3474 AC_DEFINE(HAVE_CONSTANT_CMSG_SPACE, 1, [Define to 1 if CMSG_SPACE is constant])
3475 ], [
3476 AC_MSG_RESULT(no)
3477 ])
3478
3479 AC_CHECK_TYPE(struct cmsghdr,AC_DEFINE(HAVE_CMSGHDR,1,[The system provides struct cmsghdr]),,[
3480 #if HAVE_SYS_SOCKET_H
3481 #include <sys/socket.h>
3482 #endif
3483 #if HAVE_MSWSOCK_H
3484 #include <mswsock.h>
3485 #endif
3486 #if HAVE_WINSOCK2_H
3487 #include <winsock2.h>
3488 #endif
3489 ])
3490
3491 AC_CHECK_TYPE(struct iovec,AC_DEFINE(HAVE_IOVEC,1,[The system provides struct iovec]),,[
3492 #if HAVE_SYS_SOCKET_H
3493 #include <sys/socket.h>
3494 #endif
3495 #if HAVE_WINSOCK2_H
3496 #include <winsock2.h>
3497 #endif
3498 #if HAVE_SYS_UIO_H
3499 #include <sys/uio.h>
3500 #endif
3501 ])
3502
3503 AC_CHECK_TYPE(struct msghdr,AC_DEFINE(HAVE_MSGHDR,1,[The system provides struct msghdr]),,[
3504 #if HAVE_SYS_SOCKET_H
3505 #include <sys/socket.h>
3506 #endif
3507 #if HAVE_MSWSOCK_H
3508 #include <mswsock.h>
3509 #endif
3510 #if HAVE_WINSOCK2_H
3511 #include <winsock2.h>
3512 #endif
3513 ])
3514
3515 AC_CHECK_TYPE(struct sockaddr_un,AC_DEFINE(HAVE_SOCKADDR_UN,1,[The system provides sockaddr_un]),,[
3516 #if HAVE_SYS_UN_H
3517 #include <sys/un.h>
3518 #endif
3519 #if HAVE_SYS_SOCKET_H
3520 #include <sys/socket.h>
3521 #endif
3522 #if HAVE_WINSOCK2_H
3523 #include <winsock2.h>
3524 #endif
3525 ])
3526
3527 SQUID_CHECK_FUNC_STRNSTR
3528 SQUID_CHECK_FUNC_VACOPY
3529 SQUID_CHECK_FUNC___VACOPY
3530
3531 dnl IP-Filter support requires ipf header files. These aren't
3532 dnl installed by default, so we need to check for them
3533 if test "x$enable_ipf_transparent" != "xno" ; then
3534 SQUID_CHECK_BROKEN_SOLARIS_IPFILTER
3535 AC_MSG_CHECKING(for availability of IP-Filter header files)
3536 # hold on to your hats...
3537 if test "x$ac_cv_header_ip_compat_h" = "xyes" -o \
3538 "x$ac_cv_header_ip_fil_compat_h" = "xyes" -o \
3539 "x$ac_cv_header_netinet_ip_compat_h" = "xyes" -o \
3540 "x$ac_cv_header_netinet_ip_fil_compat_h" = "xyes" ; then
3541 have_ipfilter_compat_header="yes"
3542 fi
3543 if test "x$have_ipfilter_compat_header" = "xyes" -a \
3544 "x$ac_cv_header_ip_fil_h" = "xyes" -a \
3545 "x$ac_cv_header_ip_nat_h" = "xyes" ; then
3546 enable_ipf_transparent="yes"
3547 elif test "x$have_ipfilter_compat_header" = "xyes" -a \
3548 "x$ac_cv_header_netinet_ip_fil_h" = "xyes" -a \
3549 "x$ac_cv_header_netinet_ip_nat_h" = "xyes" ; then
3550 enable_ipf_transparent="yes"
3551 else
3552 enable_ipf_transparent="no"
3553 fi
3554 AC_MSG_RESULT($IPF_TRANSPARENT)
3555
3556 ## On Solaris Ipfilter includes expect that SOLARIS2 is defined with the
3557 ## Solaris minor version (8, 9, 10, ...)
3558 if test "x$enable_ipf_transparent" = "xyes" -a "x$squid_host_os" = "xsolaris" ; then
3559 solrev=`uname -r | sh -c 'IFS=. read j n x; echo $n'`
3560 CFLAGS="-DSOLARIS2=$solrev $CFLAGS"
3561 CXXFLAGS="-DSOLARIS2=$solrev $CXXFLAGS"
3562 fi
3563
3564 fi
3565 AC_MSG_NOTICE([IPF-based transparent proxying enabled: $enable_ipf_transparent])
3566 SQUID_DEFINE_BOOL(IPF_TRANSPARENT,$enable_ipf_transparent,
3567 [Enable support for IPF-style transparent proxying])
3568
3569 dnl PF /dev/pf support requires a header file.
3570 if test "x$with_nat_devpf" != "xno" ; then
3571 if test "x$ac_cv_header_net_pfvar_h" = "xyes" -o \
3572 "x$ac_cv_header_net_pf_pfvar_h" = "xyes"; then
3573 if test "x$with_nat_devpf" = "xauto" ; then
3574 with_nat_devpf="no"
3575 fi
3576 else
3577 if test "x$with_nat_devpf" = "xyes" ; then
3578 AC_MSG_ERROR([PF /dev/pf based NAT requested but needed header not found])
3579 fi
3580 with_nat_devpf="no"
3581 fi
3582 fi
3583 SQUID_DEFINE_BOOL(PF_TRANSPARENT,${enable_pf_transparent:=no},
3584 [Enable support for PF-style transparent proxying])
3585 SQUID_DEFINE_BOOL(USE_NAT_DEVPF,${with_nat_devpf:=no},
3586 [Enable support for /dev/pf NAT lookups])
3587
3588 if test "x$enable_linux_netfilter" != "xno" ; then
3589 if test "x$ac_cv_header_linux_netfilter_ipv4_h" = "xyes"; then
3590 if test "x$enable_linux_netfilter" = "xauto" ; then
3591 enable_linux_netfilter=yes
3592 fi
3593 else
3594 if test "x$enable_linux_netfilter" = "xauto" ; then
3595 enable_linux_netfilter=no
3596 else
3597 AC_MSG_ERROR([Linux Netfilter support requested but needed headers not found])
3598 fi
3599 fi
3600 fi
3601 SQUID_DEFINE_BOOL(LINUX_NETFILTER,$enable_linux_netfilter,
3602 [Enable support for Transparent Proxy on Linux via Netfilter])
3603
3604 dnl Netfilter TPROXY depends on libcap but the NAT parts can still work.
3605 AC_MSG_NOTICE([Support for Netfilter-based interception proxy requested: $enable_linux_netfilter])
3606 if test "x$enable_linux_netfilter" = "xyes" -a "x$with_libcap" != "xyes" ; then
3607 AC_MSG_WARN([Missing needed capabilities (libcap 2.09+) for TPROXY])
3608 AC_MSG_WARN([Linux Transparent Proxy (version 4+) support WILL NOT be enabled])
3609 AC_MSG_WARN([Reduced support to NAT Interception Proxy])
3610 # AC_DEFINEd later
3611 fi
3612
3613 if test "x$squid_opt_netfilterconntrack" = "xyes" -a "x$with_libcap" != "xyes" ; then
3614 AC_MSG_ERROR([Linux netfilter conntrack requires libcap support (libcap 2.09+)])
3615 fi
3616 if test "x$with_netfilter_conntrack" = "xyes" -a "x$with_libcap" != "xyes" ; then
3617 AC_MSG_WARN([Missing needed capabilities (libcap 2.09+) for netfilter mark support])
3618 AC_MSG_WARN([Linux netfilter marking support WILL NOT be enabled])
3619 with_netfilter_conntrack=no
3620 fi
3621 AC_MSG_NOTICE([Linux Netfilter Conntrack support enabled: ${with_netfilter_conntrack} ${squid_opt_netfilterconntrackpath}])
3622
3623
3624 AC_ARG_ENABLE(zph-qos,
3625 AS_HELP_STRING([--enable-zph-qos],[Enable ZPH QOS support]), [
3626 SQUID_YESNO([$enableval],
3627 [unrecognized argument to --enable-zph-qos: $enableval])
3628 ])
3629 SQUID_DEFINE_BOOL(USE_QOS_TOS,${enable_zph_qos:=yes},
3630 [Enable Zero Penalty Hit QOS. When set, Squid will alter the
3631 TOS field of HIT responses to help policing network traffic])
3632 AC_MSG_NOTICE([ZPH QOS enabled: $enable_zph_qos])
3633 if test x"$enable_zph_qos" = "xyes" ; then
3634 AC_MSG_NOTICE([QOS netfilter mark preservation enabled: $with_netfilter_conntrack])
3635 SQUID_DEFINE_BOOL(USE_LIBNETFILTERCONNTRACK,${with_netfilter_conntrack:=no},
3636 [Enable support for QOS netfilter mark preservation])
3637 fi
3638
3639
3640 AC_CHECK_LIB(regex, regexec, [REGEXLIB="-lregex"],[REGEXLIB=''])
3641 AC_ARG_ENABLE(gnuregex,
3642 AS_HELP_STRING([--enable-gnuregex],
3643 [Compile GNUregex. Unless you have reason to use
3644 this option, you should not enable it.
3645 This library file is usually only required on Windows and
3646 very old Unix boxes which do not have their own regex
3647 library built in.]), [
3648 SQUID_YESNO([$enableval],[unrecognized argument to --enable-gnuregex: $enableval])
3649 ])
3650 # force-enable on old solaris and nextstep
3651 if test "x${enable_gnuregex:=auto}" = "xauto" ; then
3652 case "$host" in
3653 *-sun-solaris2.[[0-4]])
3654 enable_gnuregex="yes"
3655 ;;
3656 *-next-nextstep*)
3657 enable_gnuregex="yes"
3658 ;;
3659 esac
3660 fi
3661
3662 # try detecting if it is needed
3663 if test "x$enable_gnuregex" = "xauto" ; then
3664 SQUID_CHECK_REGEX_WORKS
3665 if test "x$squid_cv_regex_works" = "xyes" ; then
3666 enable_gnuregex=no
3667 else
3668 enable_gnuregex=yes
3669 fi
3670 fi
3671 AC_MSG_CHECKING(if GNUregex needs to be compiled)
3672 AC_MSG_RESULT($enable_gnuregex)
3673 if test "x$enable_gnuregex" = "xyes"; then
3674 # for some reason (force-enable, test..) gnuregex was found as needed. Override any system lib
3675 REGEXLIB=""
3676 fi
3677 #if no reason was found to enable gnuregex, disable it
3678 if test "x$enable_gnuregex" = "xauto" ; then
3679 enable_gnuregex=no
3680 fi
3681 SQUID_DEFINE_BOOL(USE_GNUREGEX,$enable_gnuregex,[Define if we should use GNU regex])
3682 AC_SUBST(REGEXLIB)
3683
3684 SQUID_DETECT_UDP_SND_BUFSIZE
3685 SQUID_DETECT_UDP_RECV_BUFSIZE
3686 SQUID_DETECT_TCP_SND_BUFSIZE
3687 SQUID_DETECT_TCP_RECV_BUFSIZE
3688
3689 SQUID_CHECK_RECV_ARG_TYPE
3690 SQUID_CHECK_NEED_SYS_ERRLIST
3691 SQUID_CHECK_MAXPATHLEN
3692
3693 SQUID_CHECK_LIBRESOLV_DNS_TTL_HACK
3694 SQUID_CHECK_RESOLVER_FIELDS
3695
3696 AC_CHECK_HEADERS(sys/statvfs.h)
3697 if test "x$ac_cv_header_sys_statvfs_h" = "xyes" ; then
3698 SQUID_CHECK_WORKING_STATVFS
3699 fi
3700 if test "x$ac_cv_func_statvfs" != "xyes" ; then
3701 AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/vfs.h sys/statfs.h)
3702 AC_CHECK_FUNCS(statfs)
3703 SQUID_CHECK_F_FRSIZE_IN_STATFS
3704 fi
3705
3706 dnl Squid will not usually attempt to translate templates when building
3707 AC_ARG_ENABLE(translation,
3708 AS_HELP_STRING([--enable-translation],[Generate the localized error page templates and manuals.
3709 Which can also be downloaded from http://www.squid-cache.org/Versions/langpack/.]), [
3710 SQUID_YESNO([$enableval],
3711 [unrecognized argument to --enable-translation: $enableval])
3712 ])
3713 if test "x${enable_translation:=no}" = "xyes" ; then
3714 AX_WITH_PROG([PO2HTML],[po2html])
3715 AX_WITH_PROG([PO2TEXT],[po2txt])
3716 else
3717 PO2HTML="off"
3718 PO2TEXT="off"
3719 fi
3720 AC_SUBST(PO2HTML)
3721 AC_SUBST(PO2TEXT)
3722
3723 dnl Squid now has limited locale handling ...
3724 dnl on error pages
3725 AC_ARG_ENABLE(auto-locale,
3726 AS_HELP_STRING([--disable-auto-locale],[This prevents Squid providing localized error pages based on the
3727 clients request headers.
3728 When disabled Squid requires explicit language configuration.]), [
3729 SQUID_YESNO([$enableval],
3730 [unrecognized argument to --disable-auto-locale: $enableval])
3731 ])
3732 AC_MSG_NOTICE([Multi-Language support enabled: ${enable_auto_locale:=yes}])
3733 SQUID_DEFINE_BOOL(USE_ERR_LOCALES,$enable_auto_locale,
3734 [Use multi-language support on error pages])
3735
3736
3737 dnl Need the debugging version of malloc if available
3738 XTRA_OBJS=''
3739 if test "x$ac_cv_lib_malloc_main" = "xyes" ; then
3740 if test -r /usr/lib/debug/malloc.o ; then
3741 XTRA_OBJS="$XTRA_OBJS /usr/lib/debug/malloc.o"
3742 fi
3743 if test -r /usr/lib/debug/mallocmap.o ; then
3744 XTRA_OBJS="$XTRA_OBJS /usr/lib/debug/mallocmap.o"
3745 fi
3746 fi
3747 AC_SUBST(XTRA_OBJS)
3748
3749 if test "x$XTRA_LIBS" = "x"; then
3750 XTRA_LIBS="$LIBS"
3751 dnl minor cleanup
3752 XTRA_LIBS=`echo $XTRA_LIBS | sed -e "s/ */ /g"`
3753 LIBS=''
3754 fi
3755 AC_SUBST(XTRA_LIBS)
3756
3757 AC_SUBST(SQUID_CFLAGS)
3758 AC_SUBST(SQUID_CXXFLAGS)
3759
3760 AC_ARG_VAR([BUILDCXXFLAGS],[C++ compiler flags for building compile-time tools. e.g. cf_gen])
3761 if test "x$BUILDCXXFLAGS" = "x"; then
3762 # if we are NOT cross-compiling, use the default build flags for cf_gen and friends
3763 # otherwise rely on the user-provided value
3764 if test "x$squid_cv_check_marchnative" = "xyes"; then
3765 # always valid for the Build compiler.
3766 BUILDCXXFLAGS="-march=native"
3767 fi
3768 BUILDCXXFLAGS="$BUILDCXXFLAGS $CXXFLAGS"
3769 fi
3770 AC_SUBST(BUILDCXXFLAGS)
3771
3772 AC_MSG_NOTICE([BUILD LIBRARIES: $LIBS])
3773 AC_MSG_NOTICE([BUILD EXTRA LIBRARIES: $XTRA_LIBS])
3774 AC_MSG_NOTICE([BUILD OBJECTS: $OBJS])
3775 AC_MSG_NOTICE([BUILD EXTRA OBJECTS: $XTRA_OBJS])
3776 AC_MSG_NOTICE([BUILD C FLAGS: $CFLAGS])
3777 AC_MSG_NOTICE([BUILD EXTRA C FLAGS: $SQUID_CFLAGS])
3778 AC_MSG_NOTICE([BUILD C++ FLAGS: $CXXFLAGS])
3779 AC_MSG_NOTICE([BUILD EXTRA C++ FLAGS: $SQUID_CXXFLAGS])
3780 AC_MSG_NOTICE([BUILD Tools C++ FLAGS: $BUILDCXXFLAGS])
3781
3782 dnl Clean up after OSF/1 core dump bug
3783 rm -f core
3784
3785 AC_CONFIG_FILES([
3786 Makefile
3787 compat/Makefile
3788 contrib/Makefile
3789 doc/Makefile
3790 doc/manuals/Makefile
3791 doc/release-notes/Makefile
3792 errors/Makefile
3793 icons/Makefile
3794 lib/Makefile
3795 lib/libTrie/Makefile
3796 lib/libTrie/test/Makefile
3797 lib/ntlmauth/Makefile
3798 lib/profiler/Makefile
3799 lib/rfcnb/Makefile
3800 lib/smblib/Makefile
3801 lib/snmplib/Makefile
3802 scripts/Makefile
3803 src/Makefile
3804 src/acl/Makefile
3805 src/acl/external/Makefile
3806 src/acl/external/AD_group/Makefile
3807 src/acl/external/delayer/Makefile
3808 src/acl/external/eDirectory_userip/Makefile
3809 src/acl/external/file_userip/Makefile
3810 src/acl/external/kerberos_ldap_group/Makefile
3811 src/acl/external/LDAP_group/Makefile
3812 src/acl/external/LM_group/Makefile
3813 src/acl/external/session/Makefile
3814 src/acl/external/SQL_session/Makefile
3815 src/acl/external/unix_group/Makefile
3816 src/acl/external/wbinfo_group/Makefile
3817 src/acl/external/time_quota/Makefile
3818 src/adaptation/Makefile
3819 src/adaptation/icap/Makefile
3820 src/adaptation/ecap/Makefile
3821 src/anyp/Makefile
3822 src/auth/Makefile
3823 src/auth/basic/Makefile
3824 src/auth/basic/DB/Makefile
3825 src/auth/basic/fake/Makefile
3826 src/auth/basic/getpwnam/Makefile
3827 src/auth/basic/LDAP/Makefile
3828 src/auth/basic/NCSA/Makefile
3829 src/auth/basic/NIS/Makefile
3830 src/auth/basic/PAM/Makefile
3831 src/auth/basic/POP3/Makefile
3832 src/auth/basic/RADIUS/Makefile
3833 src/auth/basic/SASL/Makefile
3834 src/auth/basic/SMB/Makefile
3835 src/auth/basic/SMB_LM/Makefile
3836 src/auth/basic/SSPI/Makefile
3837 src/auth/digest/Makefile
3838 src/auth/digest/eDirectory/Makefile
3839 src/auth/digest/file/Makefile
3840 src/auth/digest/LDAP/Makefile
3841 src/auth/negotiate/Makefile
3842 src/auth/negotiate/kerberos/Makefile
3843 src/auth/negotiate/SSPI/Makefile
3844 src/auth/negotiate/wrapper/Makefile
3845 src/auth/ntlm/Makefile
3846 src/auth/ntlm/fake/Makefile
3847 src/auth/ntlm/SMB_LM/Makefile
3848 src/auth/ntlm/SSPI/Makefile
3849 src/base/Makefile
3850 src/clients/Makefile
3851 src/comm/Makefile
3852 src/dns/Makefile
3853 src/DiskIO/Makefile
3854 src/DiskIO/AIO/Makefile
3855 src/DiskIO/Blocking/Makefile
3856 src/DiskIO/DiskDaemon/Makefile
3857 src/DiskIO/DiskThreads/Makefile
3858 src/DiskIO/IpcIo/Makefile
3859 src/DiskIO/Mmapped/Makefile
3860 src/esi/Makefile
3861 src/eui/Makefile
3862 src/format/Makefile
3863 src/fs/Makefile
3864 src/ftp/Makefile
3865 src/helper/Makefile
3866 src/http/Makefile
3867 src/http/one/Makefile
3868 src/http/url_rewriters/Makefile
3869 src/http/url_rewriters/fake/Makefile
3870 src/http/url_rewriters/LFS/Makefile
3871 src/icmp/Makefile
3872 src/ident/Makefile
3873 src/ip/Makefile
3874 src/ipc/Makefile
3875 src/log/Makefile
3876 src/log/DB/Makefile
3877 src/log/file/Makefile
3878 src/mem/Makefile
3879 src/mgr/Makefile
3880 src/parser/Makefile
3881 src/repl/Makefile
3882 src/sbuf/Makefile
3883 src/security/Makefile
3884 src/security/cert_generators/Makefile
3885 src/security/cert_generators/file/Makefile
3886 src/security/cert_validators/Makefile
3887 src/security/cert_validators/fake/Makefile
3888 src/servers/Makefile
3889 src/snmp/Makefile
3890 src/ssl/Makefile
3891 src/store/Makefile
3892 src/store/id_rewriters/Makefile
3893 src/store/id_rewriters/file/Makefile
3894 test-suite/Makefile
3895 tools/Makefile
3896 tools/helper-mux/Makefile
3897 tools/purge/Makefile
3898 tools/squidclient/Makefile
3899 tools/systemd/Makefile
3900 tools/sysvinit/Makefile
3901 ])
3902
3903 # must configure libltdl subdir unconditionally for "make distcheck" to work
3904 #AC_CONFIG_SUBDIRS(libltdl)
3905
3906 AC_OUTPUT