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