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