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