]> git.ipfire.org Git - thirdparty/squid.git/blob - configure.ac
Improved 'stateless' helper-related classes (#1480)
[thirdparty/squid.git] / configure.ac
1 ## Copyright (C) 1996-2023 The Squid Software Foundation and contributors
2 ##
3 ## Squid software is distributed under GPLv2+ license and includes
4 ## contributions from numerous individuals and organizations.
5 ## Please see the COPYING and CONTRIBUTORS files for details.
6 ##
7
8 AC_INIT([Squid Web Proxy],[7.0.0-VCS],[https://bugs.squid-cache.org/],[squid])
9 AC_PREREQ(2.61)
10 AC_CONFIG_HEADERS([include/autoconf.h])
11 AC_CONFIG_AUX_DIR(cfgaux)
12 AC_CONFIG_SRCDIR([src/main.cc])
13 AM_INIT_AUTOMAKE([tar-ustar nostdinc subdir-objects dist-xz])
14 AC_REVISION($Revision$)dnl
15 AC_PREFIX_DEFAULT(/usr/local/squid)
16 AM_MAINTAINER_MODE
17
18 m4_include([acinclude/ax_with_prog.m4])
19 m4_include([acinclude/init.m4])
20 m4_include([acinclude/squid-util.m4])
21 m4_include([acinclude/compiler-flags.m4])
22 m4_include([acinclude/os-deps.m4])
23 m4_include([acinclude/krb5.m4])
24 m4_include([acinclude/ldap.m4])
25 m4_include([acinclude/nettle.m4])
26 m4_include([acinclude/pam.m4])
27 m4_include([acinclude/pkg.m4])
28 m4_include([acinclude/tdb.m4])
29 m4_include([acinclude/lib-checks.m4])
30 m4_include([acinclude/ax_cxx_compile_stdcxx.m4])
31 m4_include([acinclude/win32-sspi.m4])
32
33 PRESET_CFLAGS="$CFLAGS"
34 PRESET_CXXFLAGS="$CXXFLAGS"
35 PRESET_LDFLAGS="$LDFLAGS"
36
37 dnl Set default LDFLAGS
38 AS_IF([test "x$LDFLAGS" = "x"],[LDFLAGS="-g"])
39
40 # check for host OS detail
41 AC_CANONICAL_HOST
42 AC_MSG_CHECKING([simplified host os])
43 simple_host_os=`echo $host_os|sed 's/[0-9].*//g;s/-.*//g'`
44 squid_host_os_version=`echo $host_os|tr -d "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-"`
45 AS_IF([test -n "$squid_host_os_version"],[
46 squid_host_os="`echo $simple_host_os| sed s/$squid_host_os_version//g`"
47 ],[
48 squid_host_os="$simple_host_os"
49 ])
50 AC_MSG_RESULT($squid_host_os (version $squid_host_os_version))
51 # on windows squid_host_os is either mingw or cygwin, version is 32
52
53 AC_PROG_CC
54 AM_PROG_CC_C_O
55 AC_PROG_CXX
56
57 # AC_USE_SYSTEM_EXTENSIONS should be called before any macros that run the C compiler.
58 AC_USE_SYSTEM_EXTENSIONS
59
60 AC_LANG([C++])
61
62 # Clang 3.2 on some CPUs requires -march-native to detect correctly.
63 # GCC 4.3+ can also produce faster executables when its used.
64 # But building inside a virtual machine environment has been found to
65 # cause random Illegal Instruction errors due to mis-detection of CPU.
66 AC_ARG_ENABLE(arch-native,
67 AS_HELP_STRING([--disable-arch-native],[Some compilers offer CPU-specific
68 optimizations with the -march=native parameter.
69 This flag disables the optimization. The default is to
70 auto-detect compiler support and use where available.]), [
71 SQUID_YESNO([$enableval],[--enable-arch-native])
72 ])
73 AC_MSG_NOTICE([CPU arch native optimization enabled: ${enable_arch_native:=auto}])
74 AS_IF([test "x${enable_arch_native}" != "xno"],[
75 SQUID_CC_CHECK_ARGUMENT([squid_cv_check_marchnative],[-march=native])
76 ])
77
78 # If the user did not specify a C++ version.
79 user_cxx=`echo "$PRESET_CXXFLAGS" | grep -o -E "(-)std="`
80 AS_IF([test "x$user_cxx" = "x"],[
81 # Check for C++17 compiler support
82 # May change CXX.
83 AX_CXX_COMPILE_STDCXX([17],[noext],[mandatory])
84 ])
85
86 # Prerequisite: CXX has been finalized.
87 # BUILDCXXFLAGS are defined later, after CXXFLAGS have been finalized.
88 AC_ARG_VAR([BUILDCXX],[path to compiler for building compile-time tools. e.g. cf_gen])
89 AS_IF([test "x$HOSTCXX" != "x" -a "x$BUILDCXX" = "x"],[
90 AC_MSG_WARN([Cross-compiling with HOSTCXX is deprecated. Use BUILDCXX instead.])
91 BUILDCXX="$HOSTCXX"
92 ])
93 AS_IF([test "x$BUILDCXX" = "x"],[
94 BUILDCXX="$CXX"
95 AS_IF([test "x$squid_cv_check_marchnative" = "xyes"],[
96 CXXFLAGS="$CXXFLAGS -march=native"
97 ])
98 ])
99 AC_SUBST(BUILDCXX)
100
101 # test for programs
102 AC_PROG_RANLIB
103 AC_PROG_CPP
104 AC_PROG_INSTALL
105 AC_PROG_LN_S
106 AC_PROG_EGREP
107
108 AC_PATH_PROG(SH, sh, /bin/sh)
109 AC_PATH_PROG(FALSE, false, /usr/bin/false)
110 AC_PATH_PROG(TRUE, true, /usr/bin/true)
111 AC_PATH_PROG(MV, mv, $FALSE)
112 AC_PATH_PROG(MKDIR, mkdir, $FALSE)
113 AC_PATH_PROG(LN, ln, cp)
114 AC_PATH_PROG(CHMOD, chmod, $FALSE)
115 AC_PATH_PROG(TR, tr, $FALSE)
116 AC_PATH_PROG(RM, rm, $FALSE)
117 dnl Libtool 2.2.6 requires: rm -f
118 RM="$RM -f"
119
120 PKG_PROG_PKG_CONFIG
121
122 AC_PATH_PROG(PERL, perl, none)
123 AS_IF([test "x$ac_cv_path_PERL" = "xnone"],[
124 AC_MSG_FAILURE([Perl is required to compile Squid. Please install Perl and then re-run configure ])
125 ])
126 AC_PATH_PROG(POD2MAN, pod2man, $FALSE)
127 AM_CONDITIONAL(ENABLE_POD2MAN_DOC, test "x${ac_cv_path_POD2MAN}" != "x$FALSE")
128
129 AC_PATH_PROG(AR, ar, $FALSE)
130 AR_R="$AR r"
131 AC_SUBST(AR_R)
132
133 AC_PATH_PROG(LINUXDOC, linuxdoc, $FALSE)
134 AM_CONDITIONAL(ENABLE_RELEASE_DOCS, test "x${ac_cv_path_LINUXDOC}" != "x$FALSE")
135
136 SQUID_RELEASE=`echo $VERSION | cut -d. -f1`
137 AC_SUBST(SQUID_RELEASE)
138
139 # pre-define DEFAULT_PREFIX, some modules need it.
140 AS_IF([test "${prefix}" = "NONE"],[squid_prefix=$ac_default_prefix],[squid_prefix=$prefix])
141 AC_DEFINE_UNQUOTED(DEFAULT_PREFIX,[$squid_prefix],[The install prefix])
142
143 AC_ARG_ENABLE(strict-error-checking,
144 AS_HELP_STRING([--disable-strict-error-checking],[By default squid is compiled
145 with all possible static compiler error-checks enabled.
146 This flag disables the behavior]), [
147 SQUID_YESNO([$enableval],[--enable-strict-error-checking])
148 ])
149 AC_MSG_NOTICE([strict error checking enabled: ${enable_strict_error_checking:=yes}])
150
151 # LT_INIT requires libtool v2, might as well state it loud
152 LT_PREREQ([2.2])
153 LT_INIT([dlopen])
154 AS_IF([test "x$ac_top_build_prefix" != "x"],[
155 # LTDL v3-v7 macros assume the autoconf 2.62 variable top_build_prefix is defined
156 # But from autoconf 2.64 its called ac_top_build_prefix and not automatically added to the Makefile
157 # This fixes Linux LTDLv3-v7, and BSD LTDL v2.2
158 top_build_prefix=${ac_top_build_prefix}
159 AC_SUBST(top_build_prefix)
160 ])
161 LTDL_INIT
162
163 dnl LibTool environment is now prepared for setup. Check that it is usable and initialize.
164 LT_LIB_DLLOAD
165
166 # Do we need these unconditionally for "make distcheck" to work?
167 AC_SUBST(INCLTDL)
168 AC_SUBST(LIBLTDL)
169
170 AC_MSG_CHECKING(whether to use loadable modules)
171 AS_IF([test "x${enable_shared:=yes}" = "xyes"],[AC_DEFINE(USE_LOADABLE_MODULES,1,[Support Loadable Modules])])
172 AM_CONDITIONAL(ENABLE_LOADABLE_MODULES, test "x${enable_shared:=yes}" = "xyes")
173 AC_MSG_RESULT([$enable_shared])
174
175 SQUID_CC_GUESS_VARIANT
176 SQUID_CC_GUESS_OPTIONS
177
178 dnl find out the exe extension for this platform.
179 dnl If it is not empty, use it for CGI as well.
180 AC_EXEEXT
181 AC_OBJEXT
182 AS_IF([test "x$EXEEXT" = "x"],[CGIEXT=".cgi"],[CGIEXT=""])
183 AC_SUBST(CGIEXT)
184
185 AM_CONDITIONAL(ENABLE_WIN32SPECIFIC,[test "x$squid_host_os" = "xmingw"])
186 AM_CONDITIONAL(ENABLE_WIN32_IPC,[test "x$squid_host_os" = "xmingw"])
187
188 AS_CASE(["$squid_host_os"],
189 [mingw],[
190 CFLAGS="$CFLAGS -mthreads"
191 CXXFLAGS="$CXXFLAGS -mthreads -static-libgcc -static-libstdc++"
192 dnl Check for Winsock only on MinGW
193 SQUID_CHECK_WINSOCK_LIB
194 AC_CHECK_HEADERS([ws2tcpip.h winsock2.h windows.h],,,[
195 #if HAVE_WS2TCPIP_H
196 #include <ws2tcpip.h>
197 #endif
198 #if HAVE_WINSOCK2_H
199 #include <winsock2.h>
200 #endif
201 #if HAVE_WINDOWS_H
202 #include <windows.h>
203 #endif
204 ])
205 MINGW_LIBS="-lmingwex"
206 AC_SUBST(MINGW_LIBS)
207 ],
208
209 [freebsd],[
210 # FreeBSD places local libraries and packages in /usr/local
211 CFLAGS="$CFLAGS -I/usr/local/include"
212 CXXFLAGS="$CXXFLAGS -I/usr/local/include"
213 LDFLAGS="$LDFLAGS -L/usr/local/lib -Wl,-R/usr/local/lib"
214 ]
215 )
216
217 dnl Substitutions
218 AC_DEFINE_UNQUOTED(CONFIG_HOST_TYPE, "$host",[Host type from configure])
219
220 AC_DEFINE_UNQUOTED(SQUID_CONFIGURE_OPTIONS, "$ac_configure_args",
221 [configure command line used to configure Squid])
222
223 CACHE_EFFECTIVE_USER="nobody"
224 AC_ARG_WITH(default-user,
225 AS_HELP_STRING([--with-default-user=USER],[System user account for squid permissions. Default: nobody]),
226 [ CACHE_EFFECTIVE_USER="$withval" ]
227 )
228 AC_SUBST(CACHE_EFFECTIVE_USER)
229
230 DEFAULT_LOG_DIR="$localstatedir/logs"
231 AC_ARG_WITH(logdir,
232 AS_HELP_STRING([--with-logdir=PATH],
233 [Default location for squid logs. default: PREFIX/var/logs]),[
234 AS_CASE([$withval],
235 [yes|no],[AC_MSG_ERROR([--with-logdir requires a directory PATH. --with-logdir=PATH])],
236 [DEFAULT_LOG_DIR="$withval"]
237 )
238 ])
239 AC_SUBST(DEFAULT_LOG_DIR)
240
241 DEFAULT_PID_FILE="$localstatedir/run/@SERVICE_NAME@.pid"
242 AC_ARG_WITH(pidfile,
243 AS_HELP_STRING([--with-pidfile=PATH],
244 [Default location for squid pid file. Default: PREFIX/var/run/squid.pid]),[
245 AS_CASE([$withval],
246 [yes|no],[AC_MSG_ERROR([--with-pidfile requires a file PATH. --with-pidfile=PATH])],
247 [DEFAULT_PID_FILE="$withval"]
248 )
249 ])
250 AC_SUBST(DEFAULT_PID_FILE)
251
252 DEFAULT_SWAP_DIR="$localstatedir/cache/squid"
253 AC_ARG_WITH(swapdir,
254 AS_HELP_STRING([--with-swapdir=PATH],
255 [Default location for squid cache directories. Default: PREFIX/var/cache/squid]),[
256 AS_CASE([$withval],
257 [yes|no],[AC_MSG_ERROR([--with-swapdir requires a directory PATH. --with-swapdir=PATH])],
258 [DEFAULT_SWAP_DIR="$withval"]
259 )
260 ])
261 AC_SUBST(DEFAULT_SWAP_DIR)
262
263 dnl Set Default CFLAGS
264 AS_IF([test "x$PRESET_CFLAGS" = "x"],[
265 AS_IF([test "$squid_cv_compiler" = "gcc"],[
266 # TODO check if these exceptions are still necessary
267 AS_CASE(["$host"],
268 [*-sun-sunos*],[
269 # sunos has too many warnings for -Wall to be useful
270 ],
271 [CFLAGS="$squid_cv_cc_option_wall $CFLAGS"]
272 )
273 ],[
274 AS_CASE(["$host"],
275 [*mips-sgi-irix6.*],[
276 # suggested by Rafael Seidl <rafaels@cthulhu.engr.sgi.com>
277 CFLAGS="$squid_cv_cc_option_optimize -OPT:Olimit=0:space=OFF \
278 -woff 1009,1014,1110,1116,1183,1185,1188,1204,1230,1233,1355 \
279 -Wl,-woff,85,-woff,84,-woff,134 \
280 -nostdinc -I/usr/include -D_BSD_SIGNALS $CFLAGS"
281 CXXFLAGS="$squid_cv_cc_option_optimize -OPT:Olimit=0:space=OFF \
282 -woff 1009,1014,1110,1116,1183,1185,1188,1204,1230,1233,1355 \
283 -Wl,-woff,85,-woff,84,-woff,134 \
284 -nostdinc -I/usr/include -D_BSD_SIGNALS $CXXFLAGS"
285 ])
286 ])
287 ])
288
289 AC_MSG_CHECKING([compiler name-version])
290 squid_cv_cc_name=`$CC --version | head -1 | cut -f1 -d" "`
291 AS_CASE([$squid_cv_cc_name],
292 [gcc|clang],[squid_cv_cc_majversion=`$CC -dumpversion | cut -f1 -d.`],
293 [squid_cv_cc_majversion="unknown"]
294 )
295 squid_cv_cc_simplified="$squid_cv_cc_name-$squid_cv_cc_majversion"
296 AC_MSG_RESULT($squid_cv_cc_simplified)
297
298 # warning flags
299
300 # -Wall
301 SQUID_CC_ADD_CXXFLAG_WARNING_IF_SUPPORTED([$squid_cv_cc_option_wall])
302
303 # -Wextra
304 AS_IF([test "$squid_cv_cc_simplified" = "gcc-4"],[
305 AC_MSG_NOTICE([skipping -Wextra on $squid_cv_cc_simplified])
306 ],[
307 SQUID_CC_ADD_CXXFLAG_WARNING_IF_SUPPORTED([-Wextra])
308
309 # Now disable or configure certain warnings enabled by -Wextra
310
311 # -Wunused-private-field causes a huge number of false positives
312 # in unit tests. Disable that
313 SQUID_CC_ADD_CXXFLAG_WARNING_IF_SUPPORTED([-Wno-unused-private-field])
314
315 # ...=5: Do not trust comments about fallthrough cases (GCC).
316 SQUID_CC_ADD_CXXFLAG_WARNING_IF_SUPPORTED([-Wimplicit-fallthrough=5])
317 AS_IF([test "x$squid_cv_cc_arg_wimplicit_fallthrough_5" != "xyes"], [
318 SQUID_CC_ADD_CXXFLAG_WARNING_IF_SUPPORTED([-Wno-implicit-fallthrough])
319 ])
320 ])
321
322 # useful warnings that may not be included in -Wall -Wextra
323 SQUID_CC_ADD_CXXFLAG_WARNING_IF_SUPPORTED([-Wpointer-arith])
324 SQUID_CC_ADD_CXXFLAG_WARNING_IF_SUPPORTED([-Wwrite-strings])
325 SQUID_CC_ADD_CXXFLAG_WARNING_IF_SUPPORTED([-Wcomments])
326 SQUID_CC_ADD_CXXFLAG_WARNING_IF_SUPPORTED([-Wshadow])
327 SQUID_CC_ADD_CXXFLAG_WARNING_IF_SUPPORTED([-Wmissing-declarations])
328 SQUID_CC_ADD_CXXFLAG_WARNING_IF_SUPPORTED([-Woverloaded-virtual])
329
330 dnl CentOS (and RHEL) still define ntohs() using deprecated C++ features
331 SQUID_CC_REQUIRE_ARGUMENT([ac_cv_require_wno_deprecated_register],[-Werror -Wno-deprecated-register],[[#include <arpa/inet.h>]],[[int fox=ntohs(1);]])
332
333 AS_IF([test "x$enable_strict_error_checking" != "xno"],[
334 SQUID_CFLAGS="$SQUID_CFLAGS $squid_cv_cc_option_werror"
335 SQUID_CXXFLAGS="$SQUID_CXXFLAGS $squid_cv_cxx_option_werror"
336 ])
337
338 AS_IF([test "x$ac_cv_require_wno_deprecated_register" = "xyes"],[
339 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -Wno-deprecated-register"
340 ])
341
342 # squid_cv_cc_arg_pipe is set by SQUID_CC_GUESS_OPTIONS
343 SQUID_CXXFLAGS="$SQUID_CXXFLAGS $squid_cv_cc_arg_pipe"
344 SQUID_CFLAGS="$SQUID_CFLAGS $squid_cv_cc_arg_pipe"
345
346 # possibly include some build info tag into squid -v
347 SQUID_EMBED_BUILD_INFO
348
349 AC_ARG_ENABLE(optimizations,
350 AS_HELP_STRING([--disable-optimizations],
351 [Do not compile Squid with compiler optimizations enabled.
352 Optimization is good for production builds, but not
353 good for debugging. During development, use
354 --disable-optimizations to reduce compilation times
355 and allow easier debugging.]), [
356 AS_IF([test "x$enableval" = "xno"],[
357 AC_MSG_NOTICE([Disabling compiler optimizations (-O flag)])
358 CFLAGS="`echo $CFLAGS | sed -e 's/-O[[0-9g]]*//'`"
359 CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-O[[0-9g]]*//'`"
360 ])
361 ])
362
363 dnl Nasty hack to get autoconf 2.64 on Linux to run.
364 dnl all other uses of RUN_IFELSE are wrapped inside CACHE_CHECK which breaks on 2.64
365 AC_RUN_IFELSE([AC_LANG_SOURCE([[ int main(int argc, char **argv) { return 0; } ]])],[],[],[:])
366
367 AH_TEMPLATE(XMALLOC_STATISTICS,[Define to have malloc statistics])
368 AC_ARG_ENABLE(xmalloc-statistics,
369 AS_HELP_STRING([--enable-xmalloc-statistics],
370 [Show malloc statistics in status page]), [
371 SQUID_YESNO([$enableval],[--enable-xmalloc-statistics])
372 ])
373 SQUID_DEFINE_BOOL(XMALLOC_STATISTICS,${enable_xmalloc_statistics:=no},
374 [Show malloc statistics in status page])
375 AC_MSG_NOTICE([xmalloc stats display: $enable_xmalloc_statistics])
376
377 squid_opt_aufs_threads=""
378 AC_ARG_WITH(aufs-threads,
379 AS_HELP_STRING([--with-aufs-threads=N_THREADS],
380 [Tune the number of worker threads for the aufs object store.]), [
381 AS_CASE([$withval],
382 [@<:@0-9@:>@*],[squid_opt_aufs_threads=$withval],
383 AC_MSG_ERROR(--with-aufs-threads expects a numeric argument)
384 )
385 ])
386 AS_IF([test "x$squid_opt_aufs_threads" != "x"],[
387 AC_MSG_NOTICE([With $squid_opt_aufs_threads aufs threads])
388 AC_DEFINE_UNQUOTED(AUFS_IO_THREADS,$squid_opt_aufs_threads,
389 [Defines how many threads aufs uses for I/O])
390 ])
391
392 ## TODO check if this is necessary, LT_INIT does these checks
393 SQUID_AUTO_LIB(dl,[dynamic linking],[LIBDL])
394 SQUID_CHECK_LIB_WORKS(dl,[
395 LDFLAGS="$LIBDL_PATH $LDFLAGS"
396 AC_CHECK_LIB(dl, dlopen,[LIBDL_LIBS="-ldl"])
397 LIBS="$LIBDL_LIBS $LIBS"
398 ])
399
400 AC_DEFUN([LIBATOMIC_CHECKER],[
401 AC_MSG_CHECKING(whether linking $1 -latomic works)
402 AC_LINK_IFELSE([
403 AC_LANG_SOURCE([[
404 #include <atomic>
405 #include <cstdint>
406 int
407 main(int argc, char **) {
408 return (
409 std::atomic<uint8_t>(uint8_t(argc)).exchange(0) &&
410 std::atomic<uint64_t>{}.is_lock_free()
411 ) ? 0 : 1;
412 }
413 ]])],[
414 AC_MSG_RESULT(yes)
415 libatomic_checker_result="yes"],[
416 AC_MSG_RESULT(no)
417 libatomic_checker_result="no"
418 ])])
419
420 ## check for atomics library before anything that might need it
421 SQUID_STATE_SAVE(LIBATOMIC)
422 LIBATOMIC_CHECKER(without)
423 AS_IF([test "x$libatomic_checker_result" = "xno"],[
424 LIBS="$LIBS -latomic"
425 LIBATOMIC_CHECKER(with)
426 AS_IF([test "x$libatomic_checker_result" = "xyes"],[
427 ATOMICLIB="-latomic"],[
428 AC_MSG_ERROR([Required library libatomic not found.])
429 ])])
430 SQUID_STATE_ROLLBACK(LIBATOMIC)
431 AC_SUBST(ATOMICLIB)
432
433 SQUID_AUTO_LIB(psapi,[Windows PSAPI.dll],[LIBPSAPI])
434 AS_IF([test "x$with_psapi" != "xno"],[
435 SQUID_STATE_SAVE(squid_psapi_state)
436 CPPFLAGS="$LIBPSAPI_CFLAGS $CPPFLAGS"
437 LIBS="$LIBPSAPI_PATH $LIBS"
438 AC_CHECK_LIB([psapi],[K32GetProcessMemoryInfo],[LIBPSAPI_LIBS="-lpsapi"])
439 AC_CHECK_HEADER([psapi.h],,,[
440 #if HAVE_WINDOWS_H
441 #include <windows.h>
442 #endif
443 ])
444 SQUID_STATE_ROLLBACK(squid_psapi_state)
445 AS_IF([test "x$LIBPSAPI_LIBS" != "x"],[
446 CXXFLAGS="$LIBPSAPI_CFLAGS $CXXFLAGS"
447 LIBPSAPI_LIBS="$LIBPSAPI_PATH $LIBPSAPI_LIBS"
448 ],[test "x$with_psapi" = "xyes"],[
449 AC_MSG_ERROR([Required library PSAPI.dll not found])
450 ],[
451 AC_MSG_NOTICE([Library PSAPI.dll not found.])
452 ])
453 ])
454 AC_MSG_NOTICE([Using Windows PSAPI.dll library: ${with_psapi:=auto}])
455 AC_SUBST(LIBPSAPI_LIBS)
456
457 AC_SEARCH_LIBS([shm_open], [rt])
458 AS_IF([test "x$ac_cv_search_shm_open" != "xno"],[
459 AC_DEFINE(HAVE_SHM,1,[Support shared memory features])
460 ])
461
462 squid_disk_module_candidates=
463 AC_ARG_ENABLE(disk-io,
464 AS_HELP_STRING([--enable-disk-io="list of modules"],
465 [Build support for the list of disk I/O modules.
466 Set without a value or omitted, all available modules will be built.
467 See src/DiskIO for a list of available modules, or
468 Programmers Guide section on DiskIO
469 for details on how to build your custom disk module]),
470 AS_CASE(["$enableval"],
471 [yes],[],
472 [no|none],[enable_disk_io="no"],
473 [
474 enable_disk_io="yes"
475 squid_disk_module_candidates="$enableval"
476 ])
477 )
478 AS_IF([test "x${enable_disk_io:=yes}" = "xyes"],[
479 SQUID_LOOK_FOR_MODULES([$srcdir/src/DiskIO],[squid_disk_module_candidates])
480 AS_IF([test "x$ac_cv_search_shm_open" = "xno"],[
481 squid_disk_module_candidates=`echo "$squid_disk_module_candidates" | sed 's/IpcIo//g'`
482 ])
483 ])
484 SQUID_CLEANUP_MODULES_LIST([squid_disk_module_candidates])
485 SQUID_CHECK_EXISTING_MODULES([$srcdir/src/DiskIO],[squid_disk_module_candidates])
486 AC_MSG_NOTICE([DiskIO modules built: ${squid_disk_module_candidates:-none}])
487 SQUID_DEFINE_BOOL(USE_DISKIO,$enable_disk_io,[DiskIO modules are expected to be available.])
488
489 dnl Some autoconf.h defines we might enable later...
490 AC_ARG_WITH(pthreads,AS_HELP_STRING([--without-pthreads],[Disable POSIX Threads]))
491 AC_ARG_WITH(aio, AS_HELP_STRING([--without-aio],[Do not use POSIX AIO. Default: auto-detect]))
492 ENABLE_WIN32_AIOPS=0
493 squid_opt_use_aio=
494 squid_opt_use_diskthreads=
495 AIOLIB=
496
497 dnl Setup the module paths etc.
498 DISK_LIBS=
499 DISK_MODULES=
500 AH_TEMPLATE(HAVE_DISKIO_MODULE_AIO, [Whether POSIX AIO Disk I/O module is built])
501 AH_TEMPLATE(HAVE_DISKIO_MODULE_BLOCKING, [Whether Blocking Disk I/O module is built])
502 AH_TEMPLATE(HAVE_DISKIO_MODULE_DISKDAEMON, [Whether DiskDaemon Disk I/O module is built])
503 AH_TEMPLATE(HAVE_DISKIO_MODULE_DISKTHREADS, [Whether DiskThreads Disk I/O module is built])
504 AH_TEMPLATE(HAVE_DISKIO_MODULE_IPCIO, [Whether IpcIo Disk I/O module is built])
505 AH_TEMPLATE(HAVE_DISKIO_MODULE_MMAPPED, [Whether Mmapped Disk I/O module is built])
506 for module in $squid_disk_module_candidates none; do
507 # maybe not needed
508 AS_IF([test "x$module" = "xnone"],[continue])
509 AS_IF([! test -d "$srcdir/src/DiskIO/$module"],[AC_MSG_ERROR([disk-io $module does not exist])])
510 AS_CASE(["$module"],
511 [AIO],[
512 dnl Check for POSIX AIO availability
513 squid_opt_use_aio="yes"
514 AIOLIB=
515 AS_IF([test "x$with_aio" != "xno"],[
516 have_aio_header=no
517 AC_CHECK_HEADERS(aio.h,[have_aio_header=yes])
518 dnl On some systems POSIX AIO functions are in librt
519 dnl On some systems POSIX AIO functions are in libaio
520 AC_CHECK_LIB(rt,aio_read,[AIOLIB="-lrt"],AC_CHECK_LIB(aio,aio_read,[AIOLIB="-laio"],[]))
521 dnl Enable AIO if the library and headers are found
522 AS_IF([test "x$AIOLIB" != "x" -a "x$have_aio_header" = "xyes"],[
523 AC_MSG_NOTICE([Native POSIX AIO support detected.])
524 squid_opt_use_aio="yes"
525 ],[
526 dnl Windows does things differently. We provide wrappers.
527 dnl TODO: Windows really needs its own DiskIO module or its Overlaped IO
528 AS_IF([test "$squid_host_os" = "mingw"],[
529 squid_opt_use_aio="yes"
530 AC_MSG_NOTICE([Windows being built. Maybe-enable POSIX AIO.])
531 ],[
532 squid_opt_use_aio="no"
533 AC_MSG_NOTICE([Native POSIX AIO support not detected. AIO automatically disabled.])
534 ])
535 ])
536 ],[
537 AC_MSG_NOTICE([POSIX AIO support manually disabled.])
538 squid_opt_use_aio="no"
539 ])
540 dnl Use the POSIX AIO pieces if we actually need them.
541 AS_IF([test "x$squid_opt_use_aio" = "xyes"],[
542 DISK_MODULES="$DISK_MODULES AIO"
543 AC_DEFINE([HAVE_DISKIO_MODULE_AIO],1,[POSIX AIO Disk I/O module is built])
544 AS_IF([test "$squid_host_os" = "mingw"],[
545 ENABLE_WIN32_AIO=1
546 AC_MSG_NOTICE([Replacing AIO DiskIO module with: Windows overlapped I/O support])
547 ],[
548 AC_MSG_NOTICE([Enabling AIO DiskIO module])
549 ])
550 ],[
551 AC_MSG_NOTICE([AIO DiskIO Module disabled. Missing POSIX AIO support.])
552 squid_disk_module_candidates_AIO=no
553 ])
554 ],
555
556 [Blocking],[
557 AC_MSG_NOTICE([Enabling Blocking DiskIO module])
558 DISK_MODULES="$DISK_MODULES Blocking"
559 AC_DEFINE([HAVE_DISKIO_MODULE_BLOCKING],1,[Blocking Disk I/O module is built])
560 ],
561
562 [DiskDaemon],[
563 AS_IF([test "$squid_host_os" = "mingw"],[
564 AC_MSG_NOTICE([DiskDaemon not supported on MinGW])
565 squid_disk_module_candidates_DiskDaemon=no
566 ],[
567 AC_MSG_NOTICE([Enabling DiskDaemon DiskIO module])
568 DISK_MODULES="$DISK_MODULES DiskDaemon"
569 AC_DEFINE([HAVE_DISKIO_MODULE_DISKDAEMON],1,[DiskDaemon Disk I/O module is built])
570 ])
571 ],
572
573 [DiskThreads],[
574 squid_opt_use_diskthreads="yes"
575 LIBPTHREADS=
576 SQUID_STATE_SAVE([diskthreads_state],[SQUID_CFLAGS SQUID_CXXFLAGS])
577 AS_IF([test "x$with_pthreads" != "xno"],[
578 dnl TODO: this needs to be extended to handle more systems and better
579 dnl REF: http://www.openldap.org/lists/openldap-bugs/200006/msg00070.html
580 dnl REF: http://autoconf-archive.cryp.to/acx_pthread.html
581 AS_CASE(["$squid_host_os"],
582 [mingw],[
583 ENABLE_WIN32_AIOPS=1
584 AC_MSG_NOTICE([Windows threads support automatically enabled])
585 ],
586
587 [freebsd],[
588 AS_IF([test `echo "$squid_host_os_version" | tr -d .` -lt 70],[
589 AC_MSG_NOTICE(pthread library requires FreeBSD 7 or later)
590 squid_opt_use_diskthreads="no"
591 ],[
592 SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT"
593 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT"
594 AS_IF([test "x$GCC" = "xyes" -a "x$PRESET_LDFLAGS" = "x"],[LDFLAGS="$LDFLAGS -pthread"])
595 ])
596 ],
597
598 [openbsd],[
599 AS_IF([test `echo "$squid_host_os_version" | tr -d .` -lt 52],[
600 AC_MSG_NOTICE(pthread library requires OpenBSD 5.2 or later)
601 squid_opt_use_diskthreads="no"
602 ],[
603 SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT"
604 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT"
605 LDFLAGS="$LDFLAGS -lpthread"
606 ])
607 ],
608
609 [solaris],[
610 AS_IF([test "x$GCC" = "xyes"],[
611 SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT -pthreads"
612 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT -pthreads"
613 AC_CHECK_LIB(pthread, pthread_create ,[LIBPTHREADS="-lpthread"], [
614 AC_MSG_NOTICE(pthread library required but cannot be found.)
615 squid_opt_use_diskthreads="no"
616 ])
617 ],[
618 dnl test for -lpthread first. libc version is a stub apparently on Solaris.
619 SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT -lpthread"
620 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT -lpthread"
621 AC_SEARCH_LIBS([pthread_create],[pthread thread],[
622 LIBPTHREADS="" #in LIBS
623 ],[
624 AC_MSG_NOTICE(pthread library required but cannot be found.)
625 squid_opt_use_diskthreads="no"
626 ])
627 ])
628 ],
629
630 [
631 SQUID_CFLAGS="$SQUID_CFLAGS -D_REENTRANT"
632 SQUID_CXXFLAGS="$SQUID_CXXFLAGS -D_REENTRANT"
633 AC_CHECK_LIB(pthread, pthread_create ,[LIBPTHREADS="-lpthread"], [
634 AC_MSG_NOTICE(pthread library required but cannot be found.)
635 squid_opt_use_diskthreads="no"
636 ])
637 ]
638 )
639 ],[
640 AC_MSG_NOTICE([Native pthreads support manually disabled.])
641 squid_opt_use_diskthreads="no"
642 ])
643 AS_IF([test "x$squid_opt_use_diskthreads" = "xyes"],[
644 AC_MSG_NOTICE([Enabling DiskThreads DiskIO module])
645 DISK_MODULES="$DISK_MODULES DiskThreads"
646 AC_DEFINE([HAVE_DISKIO_MODULE_DISKTHREADS],1,[DiskThreads Disk I/O module is built])
647 ],[
648 AC_MSG_NOTICE([Native pthreads support disabled. DiskThreads module automaticaly disabled.])
649 SQUID_STATE_ROLLBACK([diskthreads_state])
650 squid_disk_module_candidates_DiskThreads=no
651 ])
652 ],
653
654 [IpcIo],[
655 AS_IF([test "x$ac_cv_search_shm_open" = "xno"],[
656 AC_MSG_NOTICE([DiskIO IpcIo module requires shared memory support])
657 squid_disk_module_candidates_IpcIo=no
658 ],[
659 AC_MSG_NOTICE([Enabling IpcIo DiskIO module])
660 DISK_MODULES="$DISK_MODULES IpcIo"
661 AC_DEFINE([HAVE_DISKIO_MODULE_IPCIO],1,[IpcIo Disk I/O module is built])
662 ])
663 ],
664
665 [Mmapped],[
666 dnl TODO: use availability of sys/mman.h and/or mmap to define
667 dnl OR support windows mmap functions
668 AS_IF([test "x$squid_host_os" = "xmingw"],[
669 AC_MSG_NOTICE([Mmapped DiskIO is not available on Mingw])
670 squid_disk_module_candidates_Mmapped=no
671 ],[
672 AC_MSG_NOTICE([Enabling Mmapped DiskIO module])
673 DISK_MODULES="$DISK_MODULES Mmapped"
674 AC_DEFINE([HAVE_DISKIO_MODULE_MMAPPED],1,[Mmapped Disk I/O module is built])
675 ])
676 ],
677
678 [
679 AC_MSG_NOTICE([Enabling $module DiskIO module])
680 DISK_LIBS="$DISK_LIBS lib${module}.la"
681 DISK_MODULES="$DISK_MODULES ${module}"
682 ])
683 done
684 AC_MSG_NOTICE([IO Modules built: $DISK_MODULES])
685 AC_SUBST(DISK_MODULES)
686 AC_SUBST(DISK_LIBS)
687 AM_CONDITIONAL(ENABLE_DISKIO_AIO, test "x$squid_disk_module_candidates_AIO" = "xyes")
688 AC_SUBST(AIOLIB)
689 AM_CONDITIONAL(ENABLE_WIN32_AIO, test "x$squid_disk_module_candidates_AIO" = "xyes" -a "x$ENABLE_WIN32_AIO" = "x1")
690 AM_CONDITIONAL(ENABLE_DISKIO_BLOCKING, test "x$squid_disk_module_candidates_Blocking" = "xyes")
691 AM_CONDITIONAL(ENABLE_DISKIO_DISKDAEMON, test "x$squid_disk_module_candidates_DiskDaemon" = "xyes")
692 AM_CONDITIONAL(ENABLE_DISKIO_DISKTHREADS, test "x$squid_disk_module_candidates_DiskThreads" = "xyes")
693 AC_SUBST(LIBPTHREADS)
694 AM_CONDITIONAL(ENABLE_WIN32_AIOPS, test "x$squid_disk_module_candidates_DiskThreads" = "xyes" -a "x$ENABLE_WIN32_AIOPS" = "x1")
695 AM_CONDITIONAL(ENABLE_DISKIO_IPCIO, test "x$squid_disk_module_candidates_IpcIo" = "xyes")
696 AM_CONDITIONAL(ENABLE_DISKIO_MMAPPED, test "x$squid_disk_module_candidates_Mmapped" = "xyes")
697
698 dnl Check what Storage formats are wanted.
699 dnl This version will error out with a message saying why if a required DiskIO is missing.
700 AC_ARG_ENABLE([storeio],
701 AS_HELP_STRING([--enable-storeio="list of modules"],
702 [Build support for the list of store I/O modules.
703 The default is only to build the "ufs" module.
704 See src/fs for a list of available modules, or
705 Programmers Guide section <not yet written>
706 for details on how to build your custom store module]), [
707 AS_CASE(["$enableval"],
708 [yes],[],
709 [no|none],[enable_storeio="no"],
710 [
711 enable_storeio="yes"
712 # ufs is really always needed as it has low-level routines
713 # if it is a dupe it will be cleaned-up later
714 squid_storeio_module_candidates="$enableval ufs"
715 ])
716 ])
717 AS_IF([test "x${enable_storeio:=yes}" = "xyes"],[
718 SQUID_LOOK_FOR_MODULES([$srcdir/src/fs],[squid_storeio_module_candidates])
719 ])
720 SQUID_CLEANUP_MODULES_LIST([squid_storeio_module_candidates])
721 SQUID_CHECK_EXISTING_MODULES([$srcdir/src/fs],[squid_storeio_module_candidates])
722 AC_MSG_NOTICE([Store modules built: ${squid_storeio_module_candidates:-none}])
723
724 for fs in ${squid_storeio_module_candidates:-none}; do
725 AS_CASE([$fs],
726 [diskd],[
727 AS_IF([test "x$squid_disk_module_candidates_Blocking" != "xyes" -a \
728 "x$squid_disk_module_candidates_DiskDaemon" != "xyes"],[
729 AC_MSG_ERROR([Storage diskd module requires DiskIO module: Blocking or DiskDaemon])
730 ])
731 ],
732 [aufs],[
733 AS_IF([test "x$squid_disk_module_candidates_Blocking" != "xyes" -a \
734 "x$squid_disk_module_candidates_DiskThreads" != "xyes"],[
735 AC_MSG_ERROR([Storage module aufs requires DiskIO module: Blocking or DiskThreads])
736 ])
737 ],
738 [rock],[
739 AS_IF([test "x$squid_disk_module_candidates_IpcIo" != "xyes" -a \
740 "x$squid_disk_module_candidates_Blocking" != "xyes"],[
741 AC_MSG_ERROR([Storage module Rock requires DiskIO module: Blocking or IpcIo])
742 ])
743 squid_do_build_rock=true
744 ],
745 [ufs],[
746 AS_IF([test "x$squid_disk_module_candidates_Blocking" != "xyes"],[
747 AC_MSG_ERROR([Storage module ufs requires DiskIO module: Blocking])
748 ])
749 squid_do_build_ufs=true
750 ]
751 )
752 done
753
754 AM_CONDITIONAL(ENABLE_FS_UFS, test "x$squid_do_build_ufs" = "xtrue")
755 AM_CONDITIONAL(ENABLE_FS_ROCK, test "x$squid_do_build_rock" = "xtrue")
756 dnl hack: need to define those even if not used in the build system to
757 dnl make sure that global FS objects are linked to the squid binary.
758 AH_TEMPLATE(HAVE_FS_UFS, "Define to 1 if ufs filesystem module is build")
759 AH_TEMPLATE(HAVE_FS_AUFS, "Define to 1 if aufs filesystem module is build")
760 AH_TEMPLATE(HAVE_FS_DISKD, "Define to 1 if diskd filesystem module is build")
761 AH_TEMPLATE(HAVE_FS_ROCK, "Define to 1 if rock filesystem module is build")
762
763
764 dnl got final squid_storeio_module_candidates, build library lists
765 dnl This list will not be needed when each fs library has its own Makefile
766 STORE_LIBS_TO_BUILD=
767 dnl File system libraries to link executables with.
768 dnl These are the same as STORE_LIBS_TO_BUILD, but with a path
769 STORE_LIBS_TO_ADD=
770 for fs in $squid_storeio_module_candidates; do
771 STORE_LIBS_TO_BUILD="$STORE_LIBS_TO_BUILD lib${fs}.la"
772 STORE_LIBS_TO_ADD="$STORE_LIBS_TO_ADD fs/lib${fs}.la"
773 SQUID_TOUPPER_VAR_CONTENTS([fs])
774 AC_DEFINE_UNQUOTED(HAVE_FS_${fs}, 1)
775 done
776
777 AC_SUBST(STORE_LIBS_TO_BUILD)
778 AC_SUBST(STORE_LIBS_TO_ADD)
779 AC_SUBST(STORE_TESTS)
780
781
782 dnl At lest one removal policy is always needed.
783 dnl 'lru' removal policy is currently hard-coded by name for tests
784 dnl so we must set it as default.
785 REPL_POLICIES="lru"
786 AC_ARG_ENABLE(removal-policies,
787 AS_HELP_STRING([--enable-removal-policies="list of policies"],
788 [Build support for the list of removal policies.
789 The default is only to build the "lru" module.
790 See src/repl for a list of available modules, or
791 Programmers Guide section 9.9 for details on how
792 to build your custom policy]), [
793 AS_CASE(["$enableval"],
794 [yes],[ SQUID_LOOK_FOR_MODULES([$srcdir/src/repl],[REPL_POLICIES]) ],
795 [no],[],
796 [ REPL_POLICIES="$enableval" ]
797 )
798 ])
799 SQUID_CLEANUP_MODULES_LIST([REPL_POLICIES])
800 SQUID_CHECK_EXISTING_MODULES([$srcdir/src/repl],[REPL_POLICIES])
801 AC_MSG_NOTICE([Removal policies to build: $REPL_POLICIES])
802 REPL_OBJS="repl/lib`echo \"$REPL_POLICIES\" | sed -e 's% %.a repl/lib%g'`.a"
803 REPL_LIBS=`echo "$REPL_OBJS" | sed -e 's%repl/%%g'`
804 AC_SUBST(REPL_POLICIES)
805 AC_SUBST(REPL_OBJS)
806 AC_SUBST(REPL_LIBS)
807
808 AM_CONDITIONAL(ENABLE_PINGER, false)
809 AC_ARG_ENABLE(icmp,
810 AS_HELP_STRING([--enable-icmp],[Enable ICMP pinging and Network Measurement]),[
811 AS_IF([test "x$enableval" = "xyes"],[
812 AC_MSG_NOTICE([ICMP enabled])
813 AC_DEFINE(USE_ICMP,1,[Define to use Squid ICMP and Network Measurement features (highly recommended!)])
814 AM_CONDITIONAL(ENABLE_PINGER, true)
815 ])
816 ])
817
818 AM_CONDITIONAL(ENABLE_DELAY_POOLS, false)
819 AC_ARG_ENABLE(delay-pools,
820 AS_HELP_STRING([--enable-delay-pools],[Enable delay pools to limit bandwidth usage]),[
821 AS_IF([test "x$enableval" = "xyes"],[
822 AC_MSG_NOTICE([Delay pools enabled])
823 AC_DEFINE([USE_DELAY_POOLS],1,[Traffic management via "delay pools".])
824 AM_CONDITIONAL(ENABLE_DELAY_POOLS, true)
825 ])
826 ])
827
828 dnl disable generic/common adaptation support by default
829 squid_opt_use_adaptation=no
830
831 squid_opt_use_esi=auto
832 AH_TEMPLATE([USE_SQUID_ESI],[Define to enable the ESI processor])
833 AC_ARG_ENABLE(esi,
834 AS_HELP_STRING([--disable-esi],
835 [Disable ESI for accelerators. ESI requires expat or xml2 library.
836 Enabling ESI will cause squid reverse proxies to be capable
837 of the Edge Acceleration Specification (www.esi.org).]),
838 [squid_opt_use_esi=$enableval],[])
839
840 # ESI support libraries: expat
841 AH_TEMPLATE(HAVE_LIBEXPAT,[Define to 1 if you have the expat library])
842 SQUID_AUTO_LIB(expat,[ESI expat library],[LIBEXPAT])
843 AS_IF([test "x$squid_opt_use_esi" != "xno" -a "x$with_expat" != "xno"],[
844 SQUID_STATE_SAVE(squid_expat_state)
845 PKG_CHECK_MODULES([LIBEXPAT],[expat],[],[
846 AC_CHECK_LIB([expat],[main],[LIBEXPAT_LIBS="-lexpat"])
847 ])
848 CPPFLAGS="$LIBEXPAT_CFLAGS $CPPFLAGS"
849 AC_CHECK_HEADERS(expat.h)
850 SQUID_STATE_ROLLBACK(squid_expat_state)
851 AS_IF([test "x$LIBEXPAT_LIBS" != "x"],[
852 squid_opt_use_esi=yes
853 LIBEXPAT_LIBS="$LIBEXPAT_PATH $LIBEXPAT_LIBS"
854 AC_DEFINE(HAVE_LIBEXPAT,1,[Define to 1 if you have the expat library])
855 ],
856 [test "x$with_expat" = "xyes"],[AC_MSG_ERROR([Required library expat not found.])],
857 [AC_MSG_NOTICE([Library expat not found.])]
858 )
859 ])
860 AM_CONDITIONAL(ENABLE_LIBEXPAT,[test "x$LIBEXPAT_LIBS" != "x"])
861 AC_SUBST(LIBEXPAT_LIBS)
862
863 # ESI support libraries: xml2
864 AH_TEMPLATE(HAVE_LIBXML2,[Define to 1 if you have the xml2 library])
865 SQUID_AUTO_LIB(xml2,[ESI xml2 library],[LIBXML2])
866 AS_IF([test "x$squid_opt_use_esi" != "xno" -a "x$with_xml2" != "xno"],[
867 SQUID_STATE_SAVE([squid_libxml2_save])
868 PKG_CHECK_MODULES([LIBXML2],[libxml-2.0],[],[
869 AC_CHECK_LIB([xml2],[main],[LIBXML2_LIBS="$LIBXML2_PATH -lxml2"])
870 ])
871 CPPFLAGS="$LIBXML2_CFLAGS $CPPFLAGS"
872 AC_CHECK_HEADERS(libxml/parser.h libxml/HTMLparser.h libxml/HTMLtree.h)
873 SQUID_STATE_ROLLBACK([squid_libxml2_save])
874
875 AS_IF([test "x$LIBXML2_LIBS" != "x"],[
876 squid_opt_use_esi=yes
877 CPPFLAGS="$LIBXML2_CFLAGS $CPPFLAGS"
878 LIBXML2_LIBS="$LIBXML2_PATH $LIBXML2_LIBS"
879 AC_DEFINE(HAVE_LIBXML2,1,[Define to 1 if you have the xml2 library])
880 ],[test "x$with_xml2" = "xyes"],[
881 AC_MSG_ERROR([Required library xml2 not found])
882 ],[
883 AC_MSG_NOTICE([Library xml2 not found.])
884 ])
885 ])
886 AM_CONDITIONAL(ENABLE_LIBXML2,[test "x$LIBXML2_LIBS" != "x"])
887 AC_SUBST(LIBXML2_LIBS)
888
889 AS_IF([test "x$squid_opt_use_esi" = "xyes"],[
890 AS_IF([test "x$LIBXML2_LIBS" = "x" -a "x$LIBEXPAT_LIBS" = "x"],[
891 AC_MSG_ERROR([ESI processor requires libxml2 or libexpat])
892 ])
893 AC_MSG_NOTICE([Enabling ESI processor: $LIBEXPAT_LIBS $LIBXML2_LIBS])
894 AC_DEFINE(USE_SQUID_ESI,1,[Compile the ESI processor])
895 ],[
896 AS_IF(test "x$squid_opt_use_esi" = "xno",[
897 AC_MSG_NOTICE([Disabling ESI processor.])
898 ],[
899 AC_MSG_NOTICE([Disabling ESI processor. libxml2 and libexpat not found.])
900 ])
901 ])
902 AM_CONDITIONAL(ENABLE_ESI, test "x$squid_opt_use_esi" = "xyes")
903
904 AC_ARG_ENABLE(icap-client,
905 AS_HELP_STRING([--disable-icap-client],[Disable the ICAP client.]),[
906 SQUID_YESNO([$enableval],[--enable-icap-client])
907 ])
908 SQUID_DEFINE_BOOL(ICAP_CLIENT,${enable_icap_client:=yes}, [Enable ICAP client features in Squid])
909 AS_IF(test "x$enable_icap_client" != "xno", squid_opt_use_adaptation="yes")
910 AM_CONDITIONAL(ENABLE_ICAP_CLIENT, test "x$enable_icap_client" != "xno")
911
912 AC_ARG_ENABLE(ecap,
913 AS_HELP_STRING([--enable-ecap],[support loadable content adaptation modules]),[
914 SQUID_YESNO([$enableval],[--enable-ecap])],[
915 enable_ecap="no"
916 ])
917 dnl Perform configuration consistency checks for eCAP
918 AS_IF([test "x$enable_ecap" != "xno"],[
919 AS_IF([test "x$enable_shared" != "xyes"],[
920 AC_MSG_ERROR([eCAP support requires loadable modules. Please do not use --disable-shared with --enable-ecap.])
921 ])
922
923 AS_IF([test -n "$PKG_CONFIG"],[
924 dnl eCAP support requires libecap.
925 dnl This Squid supports libecap v1.0.x.
926 dnl Use EXT_ prefix to distinguish external libecap (that we check for
927 dnl here) from our own convenience ecap library in Makefiles.
928 PKG_CHECK_MODULES([EXT_LIBECAP],[libecap >= 1.0 libecap < 1.1])
929 ],[
930 AC_MSG_NOTICE([eCAP support requires pkg-config to verify the correct library version. Trouble may follow.])
931 ])
932
933 SQUID_STATE_SAVE(squid_ecap_state)
934 AC_MSG_CHECKING([whether -lecap will link])
935 CXXFLAGS="$CXXFLAGS $EXT_LIBECAP_CFLAGS"
936 LIBS="$LIBS $EXT_LIBECAP_LIBS"
937 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <libecap/common/names.h>]],[[
938 const libecap::Name test("test", libecap::Name::NextId());
939 ]])],[
940 AC_MSG_RESULT(yes)
941 squid_opt_use_adaptation=yes
942 ],[
943 AC_MSG_RESULT(no)
944 AS_IF([test "x$enable_ecap" = "xyes"],[
945 AC_MSG_ERROR([eCAP library will not link.
946 You may need to rebuild libecap using the same version of GCC as Squid.
947 There have been breaking ABI changes in the libstdc++ STL with GCC 5.])
948 ],[
949 AC_MSG_NOTICE([eCAP library will not link.
950 You may need to rebuild libecap using the same version of GCC as Squid.
951 There have been breaking ABI changes in the libstdc++ STL with GCC 5.])
952 enable_ecap="no"
953 ])
954 ])
955 SQUID_STATE_ROLLBACK(squid_ecap_state)
956 ])
957 SQUID_DEFINE_BOOL(USE_ECAP,${enable_ecap:=no},[Whether to use eCAP support])
958 AM_CONDITIONAL(ENABLE_ECAP, test "x$enable_ecap" = "xyes")
959
960 dnl enable adaptation if requested by specific adaptation mechanisms
961 ADAPTATION_LIBS=""
962 AS_IF([test "x$squid_opt_use_adaptation" = "xyes"],[ADAPTATION_LIBS="adaptation/libadaptation.la"])
963 SQUID_DEFINE_BOOL(USE_ADAPTATION,${squid_opt_use_adaptation:=no}, [common adaptation support])
964 AM_CONDITIONAL(ENABLE_ADAPTATION, test "x$squid_opt_use_adaptation" = "xyes")
965 AC_SUBST(ADAPTATION_LIBS)
966
967 AS_IF([test "x$squid_host_os" = "xmingw"],[enable_wccp=no])
968 AC_ARG_ENABLE(wccp,
969 AS_HELP_STRING([--disable-wccp],[Disable Web Cache Coordination Protocol]),[
970 SQUID_YESNO([$enableval],[--enable-wccp])
971 ])
972 SQUID_DEFINE_BOOL(USE_WCCP, ${enable_wccp:=yes}, [Define to enable WCCP])
973 AC_MSG_NOTICE([Web Cache Coordination Protocol enabled: $enable_wccp])
974
975 AS_IF([test "x$squid_host_os" = "xmingw"],[enable_wccpv2=no])
976 AC_ARG_ENABLE(wccpv2,
977 AS_HELP_STRING([--disable-wccpv2],
978 [Disable Web Cache Coordination V2 Protocol]), [
979 SQUID_YESNO([$enableval],[--enable-wccpv2])
980 ])
981 SQUID_DEFINE_BOOL(USE_WCCPv2,${enable_wccpv2:=yes},
982 [Define to enable WCCP V2])
983 AC_MSG_NOTICE([Web Cache Coordination V2 Protocol enabled: $enable_wccpv2])
984
985 AC_ARG_ENABLE(snmp,
986 AS_HELP_STRING([--disable-snmp],[Disable SNMP monitoring support]), [
987 SQUID_YESNO([$enableval],[--enable-snmp])
988 ])
989 SQUID_DEFINE_BOOL(SQUID_SNMP,${enable_snmp:=yes},
990 [Define to enable SNMP monitoring of Squid])
991 AM_CONDITIONAL(ENABLE_SNMP, [test "x$enable_snmp" = "xyes"])
992 AS_IF([test "x$enable_snmp" = "xyes"],[SNMPLIB="../lib/snmplib/libsnmplib.la"])
993 AC_MSG_NOTICE([SNMP support enabled: $enable_snmp])
994 AC_SUBST(SNMPLIB)
995
996 AC_ARG_ENABLE(cachemgr-hostname,
997 AS_HELP_STRING([--enable-cachemgr-hostname=hostname],
998 [Make cachemgr.cgi default to this host.
999 If unspecified, uses the name of the build-host]), [
1000 AS_CASE([$enableval],
1001 [yes],[
1002 AC_DEFINE(CACHEMGR_HOSTNAME,[getfullhostname()],
1003 [If you are upset that the cachemgr.cgi form comes up with the hostname field blank, then define this to getfullhostname()])
1004 AC_MSG_NOTICE([Cachemgr default hostname == host where cachemgr runs])
1005 ],
1006 [no],[:],
1007 [
1008 AC_DEFINE_UNQUOTED(CACHEMGR_HOSTNAME,"${enableval}")
1009 AC_MSG_NOTICE([Cachemgr default hostname set to ${enableval}])
1010 ])
1011 ])
1012
1013 AC_ARG_ENABLE(eui,
1014 AS_HELP_STRING([--disable-eui],
1015 [Disable use of ARP / MAC/ EUI (ether address)]), [
1016 SQUID_YESNO([$enableval],[--enable-eui])
1017 ])
1018 AS_IF([test "x${enable_eui:=yes}" = "xyes"],[
1019 SQUID_STATE_SAVE(LIBEUI)
1020 # GLIBC 2.30 deprecates sysctl.h. Test with the same flags that (may) break includes later.
1021 CFLAGS=$SQUID_CFLAGS
1022 CXXFLAGS=$SQUID_CXXFLAGS
1023 AS_CASE(["$squid_host_os"],
1024 [linux|solaris|freebsd|openbsd|netbsd|cygwin],[:],
1025 [mingw],[EUILIB="-liphlpapi"],
1026 [AC_MSG_WARN([EUI support probably will not work on host $host.])]
1027 )
1028 # iphlpapi.h check delayed after winsock2.h
1029 AC_CHECK_HEADERS( \
1030 windows.h \
1031 sys/sockio.h \
1032 sys/param.h,
1033 [], [], [[
1034 #if HAVE_WINDOWS_H
1035 include <windows.h>
1036 #endif
1037 ]]
1038 )
1039 AC_CHECK_HEADERS( \
1040 net/if_arp.h \
1041 net/route.h,
1042 [], [], [[
1043 #include <sys/types.h>
1044 #include <sys/socket.h>
1045 ]])
1046
1047 # OpenBSD, FreeBSD and NetBSD requires sys/param.h to be included before sysctl.h and net/if_dl.h
1048 AC_CHECK_HEADERS( \
1049 net/if_dl.h \
1050 sys/sysctl.h,
1051 [], [], [[
1052 #if HAVE_SYS_PARAM_H
1053 #include <sys/param.h>
1054 #endif
1055 ]])
1056 SQUID_STATE_ROLLBACK(LIBEUI)
1057 ])
1058 AC_SUBST(EUILIB)
1059 AC_MSG_NOTICE([EUI (MAC address) controls enabled: $enable_eui])
1060 SQUID_DEFINE_BOOL(USE_SQUID_EUI,$enable_eui,
1061 [Define this to include code which lets you use ethernet addresses. This code uses API initially defined in 4.4-BSD.])
1062 AM_CONDITIONAL(ENABLE_EUI, [test "x$enable_eui" = "xyes" ])
1063
1064
1065 AC_ARG_ENABLE(htcp,
1066 AS_HELP_STRING([--disable-htcp],[Disable HTCP protocol support]), [
1067 SQUID_YESNO([$enableval],[--enable-htcp])
1068 ])
1069 SQUID_DEFINE_BOOL(USE_HTCP,${enable_htcp:=yes},
1070 [Define this to include code for the Hypertext Cache Protocol (HTCP)])
1071 AM_CONDITIONAL(ENABLE_HTCP, [test "x$enable_htcp" = "xyes"])
1072 AC_MSG_NOTICE([HTCP support enabled: $enable_htcp])
1073
1074 # Cryptograhic libraries
1075 SQUID_AUTO_LIB(nettle,[Nettle crypto],[LIBNETTLE])
1076 SQUID_CHECK_LIB_WORKS(nettle,[
1077 SQUID_STATE_SAVE(squid_nettle_state)
1078 PKG_CHECK_MODULES([LIBNETTLE],[nettle >= 3.4],[],[
1079 CPPFLAGS="$LIBNETTLE_CFLAGS $CPPFLAGS"
1080 AC_CHECK_LIB(nettle,[nettle_md5_init],[LIBNETTLE_LIBS="-lnettle"])
1081 ])
1082 AC_CHECK_HEADERS(nettle/base64.h nettle/md5.h)
1083 SQUID_CHECK_NETTLE_BASE64
1084 SQUID_STATE_ROLLBACK(squid_nettle_state)
1085 ])
1086
1087 dnl Check for libcrypt
1088 CRYPTLIB=
1089 dnl Some of our helpers use crypt(3) which may be in libc, or in
1090 dnl libcrypt (eg FreeBSD)
1091 AC_CHECK_LIB(crypt, crypt, [CRYPTLIB="-lcrypt"])
1092 dnl Solaris10 provides MD5 natively through libmd5
1093 AC_CHECK_LIB(md5, MD5Init, [CRYPTLIB="$CRYPTLIB -lmd5"])
1094 AC_SUBST(CRYPTLIB)
1095
1096 SSLLIB=""
1097
1098 SQUID_AUTO_LIB(gnutls,[GnuTLS crypto],[LIBGNUTLS])
1099 AH_TEMPLATE(USE_GNUTLS,[GnuTLS support is available])
1100 SQUID_CHECK_LIB_WORKS(gnutls,[
1101 SQUID_STATE_SAVE(squid_gnutls_state)
1102
1103 # User may have provided a custom location for GnuTLS. Otherwise...
1104 CPPFLAGS="$LIBGNUTLS_CFLAGS $CPPFLAGS"
1105 LIBS="$LIBS $LIBGNUTLS_PATH"
1106
1107 # auto-detect using pkg-config
1108 PKG_CHECK_MODULES([LIBGNUTLS],[gnutls >= 3.4.0],[
1109 CPPFLAGS="$CPPFLAGS $LIBGNUTLS_CFLAGS"
1110 ],[
1111 ## find the package without pkg-config
1112 ## check that the library is actually new enough.
1113 ## by testing for a 3.4.0+ function which we use
1114 AC_CHECK_LIB(gnutls,gnutls_pcert_export_x509,[LIBGNUTLS_LIBS="-lgnutls"])
1115 ])
1116 # if any of the required headers is not found, signal we can't support gnutls
1117 AC_CHECK_HEADERS([gnutls/gnutls.h gnutls/x509.h gnutls/abstract.h], [], [LIBGNUTLS_LIBS=""])
1118
1119 SQUID_STATE_ROLLBACK(squid_gnutls_state) #de-pollute LIBS
1120
1121 AS_IF([test "x$LIBGNUTLS_LIBS" != "x"],[
1122 SSLLIB="$LIBGNUTLS_PATH $LIBGNUTLS_LIBS $SSLLIB"
1123 AC_DEFINE(USE_GNUTLS,1,[GnuTLS support is available])
1124 ])
1125 ])
1126
1127 dnl User may specify OpenSSL is needed from a non-standard location
1128 SQUID_OPTIONAL_LIB(openssl,[OpenSSL],[LIBOPENSSL])
1129 AH_TEMPLATE(USE_OPENSSL,[OpenSSL support is available])
1130 ## OpenSSL is default disable due to licensing issues on some OS
1131 AS_IF([test "x$with_openssl" = "xyes"],[
1132 CPPFLAGS="$LIBOPENSSL_CFLAGS $CPPFLAGS"
1133 AC_CHECK_HEADERS( \
1134 openssl/asn1.h \
1135 openssl/bio.h \
1136 openssl/bn.h \
1137 openssl/crypto.h \
1138 openssl/decoder.h \
1139 openssl/dh.h \
1140 openssl/err.h \
1141 openssl/evp.h \
1142 openssl/lhash.h \
1143 openssl/md5.h \
1144 openssl/opensslv.h \
1145 openssl/rsa.h \
1146 openssl/ssl.h \
1147 openssl/x509.h \
1148 openssl/x509v3.h \
1149 openssl/engine.h \
1150 openssl/txt_db.h \
1151 )
1152
1153 # User may have provided a custom location for OpenSSL. Otherwise...
1154 SQUID_STATE_SAVE(squid_openssl_state)
1155 LIBS="$LIBS $LIBOPENSSL_PATH"
1156
1157 # auto-detect using pkg-config
1158 PKG_CHECK_MODULES([LIBOPENSSL],[openssl],,[
1159 ## For some OS pkg-config is broken or unavailable.
1160 ## Detect libraries the hard way.
1161
1162 # Windows MinGW has some special libraries ...
1163 AS_IF([test "x$squid_host_os" = "xmingw"],[
1164 LIBOPENSSL_LIBS='-lssleay32 -leay32 -lgdi32 $LIBOPENSSL_LIBS'
1165 AC_MSG_NOTICE([Windows OpenSSL library support: yes -lssleay32 -leay32 -lgdi32])
1166 ])
1167
1168 AC_CHECK_LIB(crypto,[CRYPTO_new_ex_data],[LIBOPENSSL_LIBS="-lcrypto $LIBOPENSSL_LIBS"],[
1169 AC_MSG_ERROR([library 'crypto' is required for OpenSSL])
1170 ],$LIBOPENSSL_LIBS)
1171 AC_CHECK_LIB(ssl,[SSL_CTX_new],[LIBOPENSSL_LIBS="-lssl $LIBOPENSSL_LIBS"],[
1172 AC_MSG_ERROR([library 'ssl' is required for OpenSSL])
1173 ],$LIBOPENSSL_LIBS)
1174 ])
1175
1176 # This is a workaround for RedHat 9 brain damage..
1177 AS_IF([test -d /usr/kerberos/include -a -f /usr/include/openssl/kssl.h],[
1178 AC_MSG_NOTICE([OpenSSL depends on Kerberos])
1179 LIBOPENSSL_LIBS="-L/usr/kerberos/lib $LIBOPENSSL_LIBS"
1180 CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
1181 ])
1182 SQUID_STATE_ROLLBACK(squid_openssl_state) #de-pollute LIBS
1183
1184 AS_IF([test "x$LIBOPENSSL_LIBS" != "x"],[
1185 CXXFLAGS="$LIBOPENSSL_CFLAGS $CXXFLAGS"
1186 SSLLIB="$LIBOPENSSL_PATH $LIBOPENSSL_LIBS $SSLLIB"
1187 AC_DEFINE(USE_OPENSSL,1,[OpenSSL support is available])
1188
1189 # check for API functions
1190 SQUID_CHECK_LIBCRYPTO_API
1191 SQUID_CHECK_LIBSSL_API
1192 SQUID_CHECK_OPENSSL_TLS_METHODS
1193 SQUID_STATE_SAVE(check_SSL_CTX_get0_certificate)
1194 LIBS="$LIBS $SSLLIB"
1195 AC_CHECK_LIB(ssl, SSL_CTX_get0_certificate, [
1196 AC_DEFINE(HAVE_SSL_CTX_GET0_CERTIFICATE, 1, [SSL_CTX_get0_certificate is available])
1197 ], [
1198 missing_SSL_CTX_get0_certificate=yes
1199 ])
1200 SQUID_STATE_ROLLBACK(check_SSL_CTX_get0_certificate)
1201
1202 # check for other specific broken implementations
1203 AS_IF([test "x$missing_SSL_CTX_get0_certificate" = "xyes"],SQUID_CHECK_OPENSSL_GETCERTIFICATE_WORKS)
1204 SQUID_CHECK_OPENSSL_CONST_SSL_METHOD
1205 SQUID_CHECK_OPENSSL_CONST_CRYPTO_EX_DATA
1206 SQUID_CHECK_OPENSSL_CONST_SSL_SESSION_CB_ARG
1207 SQUID_CHECK_OPENSSL_CONST_X509_GET0_SIGNATURE_ARGS
1208 SQUID_CHECK_OPENSSL_TXTDB
1209 ])
1210 AS_IF([test "x$SSLLIB" = "x"],[AC_MSG_ERROR([Required OpenSSL library not found])])
1211 ])
1212 AC_MSG_NOTICE([OpenSSL library support: ${with_openssl:=no} ${LIBOPENSSL_PATH} ${LIBOPENSSL_LIBS}])
1213 AM_CONDITIONAL(ENABLE_SSL,[ test "x$with_openssl" = "xyes" ])
1214 AC_SUBST(SSLLIB)
1215
1216 dnl User may specify MIT Kerberos is needed from a non-standard location
1217 SQUID_AUTO_LIB(mit-krb5,[MIT Kerberos],[LIB_KRB5])
1218 AH_TEMPLATE(USE_APPLE_KRB5,[Apple Kerberos support is available])
1219 AH_TEMPLATE(USE_MIT_KRB5,[MIT Kerberos support is available])
1220 AH_TEMPLATE(USE_SOLARIS_KRB5,[Solaris Kerberos support is available])
1221
1222 ## find out if pkg-config or krb5-config will work
1223 AS_IF([test "x$with_mit_krb5" != "xno"],[
1224 CXXFLAGS="$LIB_KRB5_CFLAGS $CXXFLAGS"
1225 krb5confpath="$with_mit_krb5/bin"
1226 # find installed libs via pkg-config or krb5-config
1227 squid_pc_krb5_name=
1228 PKG_CHECK_EXISTS(mit-krb5-gssapi mit-krb5, [squid_pc_krb5_name="mit-krb5-gssapi mit-krb5"],[
1229 PKG_CHECK_EXISTS(gssapi-krb5 krb5, [squid_pc_krb5_name="gssapi-krb5 krb5"])
1230 ])
1231 AS_IF([test "x$squid_pc_krb5_name" = "x" -a "$cross_compiling" = "no"],[
1232 # Look for krb5-config (unless cross-compiling)
1233 AC_PATH_PROG(krb5_config,krb5-config,no,$krb5confpath)
1234 AS_IF([test "x$ac_cv_path_krb5_config" != "xno"],[
1235 krb5confpath="`dirname $ac_cv_path_krb5_config`"
1236 ac_heimdal="`$ac_cv_path_krb5_config --version 2>/dev/null | grep -c -i heimdal`"
1237 ac_solaris="`$ac_cv_path_krb5_config --version 2>/dev/null | grep -c -i solaris`"
1238 ac_apple="`$ac_cv_path_krb5_config --vendor 2>/dev/null | grep -c -i apple`"
1239 AS_IF([test $ac_solaris -gt 0],[with_solaris_krb5=yes],
1240 [test $ac_apple -gt 0],[with_apple_krb5=yes],
1241 [test $ac_heimdal -gt 0],[with_mit_krb5=no]
1242 )
1243 ],[
1244 AS_IF([test "x$with_mit_krb5" = "xyes"],[
1245 AC_MSG_ERROR([Could not find krb5-config in path])
1246 ],[
1247 with_mit_krb5=no
1248 ])
1249 ])
1250 ])
1251 ])
1252
1253 # detect MIT Kerberos dependencies (except on Solaris)
1254 AS_IF([test "x$with_mit_krb5" != "xno" -a "x$with_solaris_krb5" != "xyes"],[
1255 SQUID_STATE_SAVE([squid_krb5_save])
1256 LIBS="$LIBS $LIB_KRB5_PATH"
1257
1258 # auto-detect using pkg-config
1259 PKG_CHECK_MODULES([LIB_KRB5], $squid_pc_krb5_name,,[
1260 # look for krb5-config (unless cross-compiling)
1261 AS_IF([test "$cross_compiling" = "no"],[
1262 AS_IF([test "x$krb5confpath" = "x"],[
1263 AC_PATH_PROG(krb5_config,krb5-config,no)
1264 AS_IF([test "x$ac_cv_path_krb5_config" != "xno"],[ac_krb5_config="$ac_cv_path_krb5_config"])
1265 ],[
1266 ac_krb5_config="$krb5confpath/krb5-config"
1267 ])
1268 ])
1269 AS_IF([test "x$ac_krb5_config" != "x" -a -x "$ac_krb5_config"],[
1270 # Get libs, etc
1271 AC_MSG_NOTICE([Use krb5-config to get CXXFLAGS and LIBS])
1272 LIB_KRB5_CFLAGS="`$ac_krb5_config --cflags krb5 2>/dev/null`"
1273 LIB_KRB5_LIBS="`$ac_krb5_config --libs krb5 2>/dev/null`"
1274 LIB_KRB5_CFLAGS="`$ac_krb5_config --cflags gssapi 2>/dev/null` $LIB_KRB5_CFLAGS"
1275 LIB_KRB5_LIBS="`$ac_krb5_config --libs gssapi 2>/dev/null` $LIB_KRB5_LIBS"
1276 ],[
1277 ## For some OS pkg-config is broken or unavailable.
1278 ## Detect libraries the hard way.
1279
1280 SQUID_STATE_SAVE([squid_mit_save])
1281 missing_required=
1282 AC_MSG_NOTICE([Try to find Kerberos libraries in given path])
1283 AC_CHECK_LIB(com_err, [main], [LIB_KRB5_LIBS="-lcom_err $LIB_KRB5_LIBS"],[
1284 AC_MSG_WARN([library 'com_err' is required for MIT Kerberos])
1285 missing_required=yes
1286 ])
1287 LIBS=$LIB_KRB5_LIBS
1288 AC_CHECK_LIB(k5crypto, [main], [LIB_KRB5_LIBS="-lk5crypto $LIB_KRB5_LIBS"],[
1289 AC_MSG_WARN([library 'k5crypto' is required for MIT Kerberos])
1290 missing_required=yes
1291 ])
1292 LIBS=$LIB_KRB5_LIBS
1293 AC_CHECK_LIB(krb5, [main], [LIB_KRB5_LIBS="-lkrb5 $LIB_KRB5_LIBS"],[
1294 AC_MSG_WARN([library 'krb5' is required for MIT Kerberos])
1295 missing_required=yes
1296 ])
1297 LIBS=$LIB_KRB5_LIBS
1298 AC_CHECK_LIB(gssapi_krb5, [main], [LIB_KRB5_LIBS="-lgssapi_krb5 $LIB_KRB5_LIBS"],[
1299 AC_MSG_WARN([library 'gssapi_krb5' is required for MIT Kerberos])
1300 missing_required=yes
1301 ])
1302 SQUID_STATE_ROLLBACK([squid_mit_save])
1303 AS_IF([test "x$missing_required" = "xyes"],[LIB_KRB5_LIBS=""])
1304 ])
1305 ])
1306
1307 AS_IF([test "x$LIB_KRB5_LIBS" != "x"],[
1308 AS_IF([test "x$with_apple_krb5" = "xyes"],[
1309 AC_DEFINE(USE_APPLE_KRB5,1,[Apple Kerberos support is available])
1310 KRB5_FLAVOUR="Apple"
1311 ],[
1312 AC_DEFINE(USE_MIT_KRB5,1,[MIT Kerberos support is available])
1313 KRB5_FLAVOUR="MIT"
1314 ])
1315 KRB5LIBS="$LIB_KRB5_PATH $LIB_KRB5_LIBS $KRB5LIBS"
1316 KRB5INCS="$LIB_KRB5_CFLAGS"
1317
1318 # check for other specific broken implementations
1319 CXXFLAGS="$CXXFLAGS $KRB5INCS"
1320 LIBS="$LIBS $KRB5LIBS"
1321
1322 AC_MSG_NOTICE([Try to find Kerberos headers in given path])
1323 AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h gssapi/gssapi_krb5.h)
1324 AC_CHECK_HEADERS(gssapi/gssapi_generic.h)
1325 AC_CHECK_HEADERS(krb5.h com_err.h et/com_err.h)
1326 AC_CHECK_HEADERS(profile.h)
1327
1328 SQUID_CHECK_KRB5_FUNCS
1329 ])
1330 AS_IF([test "x$with_mit_krb5" = "xyes" -a "x$KRB5LIBS" = "x"],[
1331 AC_MSG_ERROR([Required Kerberos library not found])
1332 ],[test "x$KRB5LIBS" = "x"],[
1333 with_mit_krb5=no
1334 with_apple_krb5=no
1335 ])
1336 SQUID_STATE_ROLLBACK([squid_krb5_save])
1337 ])
1338
1339 # detect Solaris Kerberos dependencies
1340 AS_IF([test "x$with_solaris_krb5" = "xyes" -a "x$KRB5LIBS" = "x"],[
1341 SQUID_STATE_SAVE([squid_krb5_save])
1342 LIBS="$LIBS $LIB_KRB5_PATH"
1343
1344 # no pkg-config for solaris native Kerberos
1345 # look for krb5-config (unless cross-compiling)
1346 AS_IF([test "$cross_compiling" = "no"],[
1347 AS_IF([test "x$krb5confpath" = "x"],[
1348 AC_PATH_PROG(krb5_config,krb5-config,no)
1349 AS_IF([test "x$ac_cv_path_krb5_config" != "xno"],[ac_krb5_config="$ac_cv_path_krb5_config"])
1350 ],[
1351 ac_krb5_config="$krb5confpath/krb5-config"
1352 ])
1353 ])
1354 AS_IF([test "x$ac_krb5_config" != "x" -a -x "$ac_krb5_config"],[
1355 # Get libs, etc
1356 AC_MSG_NOTICE([Use krb5-config to get CXXFLAGS and LIBS])
1357 LIB_KRB5_CFLAGS="`$ac_krb5_config --cflags krb5 2>/dev/null`"
1358 LIB_KRB5_LIBS="`$ac_krb5_config --libs krb5 2>/dev/null`"
1359 # Solaris 10 Update 11 patches the krb5-config tool to produce stderr messages on stdout.
1360 SOLARIS_BROKEN_KRB5CONFIG_GSSAPI="`$ac_krb5_config --libs gssapi 2>/dev/null | grep "krb5-config"`"
1361 AS_IF([test "x$SOLARIS_BROKEN_KRB5CONFIG_GSSAPI" = "x"],[
1362 LIB_KRB5_CFLAGS="`$ac_krb5_config --cflags gssapi 2>/dev/null` $LIB_KRB5_CFLAGS"
1363 LIB_KRB5_LIBS="`$ac_krb5_config --libs gssapi 2>/dev/null` $LIB_KRB5_LIBS"
1364 ])
1365 ],[
1366 ## For some OS pkg-config is broken or unavailable.
1367 ## Detect libraries the hard way.
1368
1369 CXXFLAGS="-I/usr/include/kerberosv5 $CXXFLAGS"
1370
1371 SQUID_STATE_SAVE([squid_solaris_save])
1372 missing_required=
1373 AC_MSG_NOTICE([Try to find Kerberos libraries in given path])
1374 AC_CHECK_LIB(krb5, [main], [LIB_KRB5_LIBS="-lkrb5 $LIB_KRB5_LIBS"],[
1375 AC_MSG_WARN([library 'krb5' is required for Solaris Kerberos])
1376 missing_required=yes
1377 ])
1378 LIBS=$LIB_KRB5_LIBS
1379 AC_CHECK_LIB(gss, [main], [LIB_KRB5_LIBS="-lgss $LIB_KRB5_LIBS"],[
1380 AC_MSG_WARN([library 'gss' is required for Solaris Kerberos])
1381 missing_required=yes
1382 ])
1383 SQUID_STATE_ROLLBACK([squid_solaris_save])
1384 AS_IF([test "x$missing_required" = "xyes"],[LIB_KRB5_LIBS=""])
1385 ])
1386
1387 AS_IF([test "x$LIB_KRB5_LIBS" != "x"],[
1388 KRB5LIBS="$LIB_KRB5_PATH $LIB_KRB5_LIBS $KRB5LIBS"
1389 KRB5INCS="$LIB_KRB5_CFLAGS"
1390 AC_DEFINE(USE_SOLARIS_KRB5,1,[Solaris Kerberos support is available])
1391 KRB5_FLAVOUR="Solaris"
1392
1393 # check for other specific broken implementations
1394 CXXFLAGS="$CXXFLAGS $KRB5INCS"
1395 LIBS="$LIBS $KRB5LIBS"
1396
1397 AC_MSG_NOTICE([Try to find Kerberos headers in given path])
1398 AC_CHECK_HEADERS(gssapi/gssapi.h gssapi/gssapi_ext.h)
1399 AC_CHECK_HEADERS(krb5.h com_err.h)
1400
1401 SQUID_CHECK_KRB5_SOLARIS_BROKEN_KRB5_H
1402 AS_IF([test "x$squid_cv_broken_krb5_h" = "xyes"],[
1403 AC_DEFINE(HAVE_BROKEN_SOLARIS_KRB5_H, 1, [Define to 1 if Solaris krb5.h is broken for C++])
1404 AC_MSG_WARN([You have a broken Solaris <krb5.h> system include.])
1405 AC_MSG_WARN([Please see http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6837512])
1406 AC_MSG_WARN([If you need Kerberos support you will have to patch])
1407 AC_MSG_WARN([your system. See contrib/solaris/solaris-krb5-include.patch])
1408 ])
1409 SQUID_CHECK_KRB5_FUNCS
1410 ])
1411 AS_IF([test "x$with_mit_krb5" = "xyes" -a "x$KRB5LIBS" = "x"],[
1412 # Error only if Solaris flavour was detected while looking for required MIT Kerberos
1413 AC_MSG_ERROR([Required Kerberos library not found])
1414 ],[test "x$KRB5LIBS" = "x"],[
1415 with_solaris_krb5=no
1416 with_mit_krb5=no
1417 ])
1418 SQUID_STATE_ROLLBACK([squid_krb5_save])
1419 ])
1420
1421 dnl User may specify Heimdal Kerberos is needed from a non-standard location
1422 SQUID_AUTO_LIB(heimdal-krb5,[Heimdal Kerberos],[LIB_KRB5])
1423 AH_TEMPLATE(USE_HEIMDAL_KRB5,[Heimdal Kerberos support is available])
1424 AS_IF([test "x$with_heimdal_krb5" != "xno" -a "x$KRB5LIBS" = "x"],[
1425 CXXFLAGS="$LIB_KRB5_CFLAGS $CXXFLAGS"
1426 krb5confpath="$with_heimdal_krb5/bin"
1427 # find installed libs via pkg-config or krb5-config
1428 PKG_CHECK_EXISTS(heimdal-krb5, [squid_pc_krb5_name="heimdal-krb5"])
1429 AS_IF([test "x$squid_pc_krb5_name" = "x"],[
1430 PKG_CHECK_EXISTS(heimdal-gssapi, [squid_pc_krb5_name="heimdal-gssapi"])
1431 ])
1432 AS_IF([test "x$squid_pc_krb5_name" = "x" -a "$cross_compiling" = "no"],[
1433 # Look for krb5-config (unless cross-compiling)
1434 AC_PATH_PROG(krb5_config,krb5-config,no,$krb5confpath)
1435 AS_IF([test "x$ac_cv_path_krb5_config" != "xno"],[
1436 krb5confpath="`dirname $ac_cv_path_krb5_config`"
1437 ac_heimdal="`$ac_cv_path_krb5_config --version 2>/dev/null | grep -c -i heimdal`"
1438 AS_IF([test "x$with_heimdal_krb5" = "xyes" -a $ac_heimdal = 0],[
1439 AC_MSG_ERROR([Could not find pkg-config or krb5-config for Heimdal Kerberos])
1440 ])
1441 ],[
1442 AS_IF([test "x$with_heimdal_krb5" = "xyes"],[
1443 AC_MSG_ERROR([Could not find krb5-config in path])
1444 ],[
1445 AC_MSG_WARN([Could not find krb5-config in path])
1446 with_heimdal_krb5=no
1447 ])
1448 ])
1449 ])
1450 ])
1451 AS_IF([test "x$with_heimdal_krb5" != "xno" -a "x$KRB5LIBS" = "x"],[
1452 SQUID_STATE_SAVE([squid_krb5_save])
1453 LIBS="$LIBS $LIB_KRB5_PATH"
1454
1455 # auto-detect using pkg-config
1456 PKG_CHECK_MODULES([LIB_KRB5], $squid_pc_krb5_name,,[
1457 # look for krb5-config (unless cross-compiling)
1458 AS_IF([test "$cross_compiling" = "no"],[
1459 AS_IF([test "x$krb5confpath" = "x"],[
1460 AC_PATH_PROG(krb5_config,krb5-config,no)
1461 AS_IF([test "x$ac_cv_path_krb5_config" != "xno"],[ac_krb5_config="$ac_cv_path_krb5_config"])
1462 ],[
1463 ac_krb5_config="$krb5confpath/krb5-config"
1464 ])
1465 ])
1466 AS_IF([test "x$ac_krb5_config" != "x" -a -x "$ac_krb5_config"],[
1467 # Get libs, etc
1468 AC_MSG_NOTICE([Use krb5-config to get CXXFLAGS and LIBS])
1469 LIB_KRB5_CFLAGS="`$ac_krb5_config --cflags krb5 2>/dev/null`"
1470 LIB_KRB5_LIBS="`$ac_krb5_config --libs krb5 2>/dev/null`"
1471 LIB_KRB5_CFLAGS="`$ac_krb5_config --cflags gssapi 2>/dev/null` $LIB_KRB5_CFLAGS"
1472 LIB_KRB5_LIBS="`$ac_krb5_config --libs gssapi 2>/dev/null` $LIB_KRB5_LIBS"
1473 ],[
1474 ## For some OS pkg-config is broken or unavailable.
1475 ## Detect libraries the hard way.
1476 SQUID_STATE_SAVE([squid_heimdal_save])
1477 missing_required=
1478 AC_MSG_NOTICE([Try to find Kerberos libraries in given path])
1479 AC_CHECK_LIB(resolv, [main], [LIB_KRB5_LIBS="-lresolv $LIB_KRB5_LIBS"],[
1480 AC_MSG_WARN([library 'resolv' is required for Heimdal Kerberos])
1481 missing_required=yes
1482 ])
1483 LIBS=$LIB_KRB5_LIBS
1484 AC_CHECK_LIB(crypt, [main], [LIB_KRB5_LIBS="-lcrypt $LIB_KRB5_LIBS"],[
1485 AC_MSG_WARN([library 'crypt' is required for Heimdal Kerberos])
1486 missing_required=yes
1487 ])
1488 LIBS=$LIB_KRB5_LIBS
1489 AC_CHECK_LIB(roken, [main], [LIB_KRB5_LIBS="-lroken $LIB_KRB5_LIBS"],[
1490 AC_MSG_WARN([library 'roken' is required for Heimdal Kerberos])
1491 missing_required=yes
1492 ])
1493 LIBS=$LIB_KRB5_LIBS
1494 AC_CHECK_LIB(heimbase, [main], [LIB_KRB5_LIBS="-lheimbase $LIB_KRB5_LIBS"],[
1495 AC_MSG_WARN([library 'heimbase' may be required for Heimdal Kerberos])
1496 ])
1497 LIBS=$LIB_KRB5_LIBS
1498 AC_CHECK_LIB(wind, [main], [LIB_KRB5_LIBS="-lwind $LIB_KRB5_LIBS"],[
1499 AC_MSG_WARN([library 'wind' may be required for Heimdal Kerberos])
1500 ])
1501 LIBS=$LIB_KRB5_LIBS
1502 AC_CHECK_LIB(crypto, [main], [LIB_KRB5_LIBS="-lcrypto $LIB_KRB5_LIBS"],[
1503 AC_MSG_WARN([library 'crypto' is required for Heimdal Kerberos])
1504 missing_required=yes
1505 ])
1506 LIBS=$LIB_KRB5_LIBS
1507 AC_CHECK_LIB(com_err, [main], [LIB_KRB5_LIBS="-lcom_err $LIB_KRB5_LIBS"],[
1508 AC_MSG_WARN([library 'com_err' is required for Heimdal Kerberos])
1509 missing_required=yes
1510 ])
1511 LIBS=$LIB_KRB5_LIBS
1512 AC_CHECK_LIB(hx509, [main], [LIB_KRB5_LIBS="-lhx509 $LIB_KRB5_LIBS"],[
1513 AC_MSG_WARN([library 'hx509' may be required for Heimdal Kerberos])
1514 ])
1515 LIBS=$LIB_KRB5_LIBS
1516 AC_CHECK_LIB(asn1, [main], [LIB_KRB5_LIBS="-lasn1 $LIB_KRB5_LIBS"],[
1517 AC_MSG_WARN([library 'asn1' is required for Heimdal Kerberos])
1518 missing_required=yes
1519 ])
1520 LIBS=$LIB_KRB5_LIBS
1521 AC_CHECK_LIB(krb5, [main], [LIB_KRB5_LIBS="-lkrb5 $LIB_KRB5_LIBS"],[
1522 AC_MSG_WARN([library 'krb5' is required for Heimdal Kerberos])
1523 missing_required=yes
1524 ])
1525 LIBS=$LIB_KRB5_LIBS
1526 AC_CHECK_LIB(heimntlm, [main], [LIB_KRB5_LIBS="-lheimntlm $LIB_KRB5_LIBS"],[
1527 AC_MSG_WARN([library 'heimntlm' may be required for Heimdal Kerberos])
1528 ])
1529 LIBS=$LIB_KRB5_LIBS
1530 AC_CHECK_LIB(gssapi, [main], [LIB_KRB5_LIBS="-lgssapi $LIB_KRB5_LIBS"],[
1531 AC_MSG_WARN([library 'gssapi' is required for Heimdal Kerberos])
1532 missing_required=yes
1533 ])
1534 SQUID_STATE_ROLLBACK([squid_heimdal_save])
1535 AS_IF([test "x$missing_required" = "xyes"],[LIB_KRB5_LIBS=""])
1536 ])
1537 ])
1538 AS_IF([test "x$LIB_KRB5_LIBS" != "x"],[
1539 KRB5LIBS="$LIB_KRB5_PATH $LIB_KRB5_LIBS $KRB5LIBS"
1540 KRB5INCS="$LIB_KRB5_CFLAGS"
1541 AC_DEFINE(USE_HEIMDAL_KRB5,1,[Heimdal Kerberos support is available])
1542 KRB5_FLAVOUR="Heimdal"
1543
1544 # check for other specific broken implementations
1545 CXXFLAGS="$CXXFLAGS $KRB5INCS"
1546 LIBS="$LIBS $KRB5LIBS"
1547
1548 AC_MSG_NOTICE([Try to find Kerberos headers in given path])
1549 AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h gssapi/gssapi_krb5.h)
1550 AC_CHECK_HEADERS(krb5.h com_err.h et/com_err.h)
1551
1552 SQUID_CHECK_KRB5_HEIMDAL_BROKEN_KRB5_H
1553 AS_IF([test "x$squid_cv_broken_heimdal_krb5_h" = "xyes"],[
1554 AC_DEFINE(HAVE_BROKEN_HEIMDAL_KRB5_H, 1, [Define to 1 if Heimdal krb5.h is broken for C++])
1555 ])
1556 SQUID_CHECK_KRB5_FUNCS
1557 ])
1558 AS_IF([test "x$KRB5LIBS" = "x"],[
1559 AS_IF([test "x$with_heimdal_krb5" = "xyes"],[
1560 AC_MSG_ERROR([Required Heimdal Kerberos library not found])
1561 ],[
1562 AC_MSG_WARN([Heimdal Kerberos library not found])
1563 ])
1564 ])
1565 SQUID_STATE_ROLLBACK([squid_krb5_save])
1566 ])
1567
1568 dnl User may specify GNU gss is needed from a non-standard location
1569 SQUID_AUTO_LIB(gnugss,[GNU gss],[LIB_KRB5])
1570 AH_TEMPLATE(USE_GNUGSS,[GNU gss support is available])
1571 AS_IF([test "x$with_gnugss" != "xno" -a "x$KRB5LIBS" = "x"],[
1572 CXXFLAGS="$LIB_KRB5_CFLAGS $CXXFLAGS"
1573 krb5confpath=
1574 SQUID_STATE_SAVE([squid_krb5_save])
1575 LIBS="$LIBS $LIB_KRB5_PATH"
1576
1577 # auto-detect using pkg-config
1578 PKG_CHECK_MODULES([LIB_KRB5],[gss],,[
1579 ## For some OS pkg-config is broken or unavailable.
1580 ## Detect libraries the hard way.
1581
1582 AC_MSG_NOTICE([Try to find Kerberos libraries in given path])
1583 AC_CHECK_LIB(gss, [main], [LIB_KRB5_LIBS="-lgss $LIB_KRB5_LIBS"],[
1584 AC_MSG_WARN([library 'com_err' is required for GNU Kerberos])
1585 ])
1586 ])
1587
1588 AS_IF([test "x$LIB_KRB5_LIBS" != "x"],[
1589 KRB5LIBS="$LIB_KRB5_PATH $LIB_KRB5_LIBS $KRB5LIBS"
1590 KRB5INCS="$LIB_KRB5_CFLAGS"
1591 AC_DEFINE(USE_GNUGSS,1,[GNU Kerberos support is available])
1592 KRB5_FLAVOUR="GNU GSS"
1593
1594 # check for other specific broken implementations
1595 CXXFLAGS="$CXXFLAGS $KRB5INCS"
1596 LIBS="$LIBS $KRB5LIBS"
1597
1598 AC_MSG_NOTICE([Try to find Kerbeors headers in given path])
1599 AC_CHECK_HEADERS(gss.h)
1600
1601 SQUID_CHECK_WORKING_GSSAPI
1602 SQUID_DEFINE_BOOL(HAVE_GSSAPI,$squid_cv_working_gssapi,[GSSAPI support])
1603
1604 SQUID_CHECK_SPNEGO_SUPPORT
1605 SQUID_DEFINE_BOOL(HAVE_SPNEGO,$squid_cv_have_spnego,[SPNEGO support])
1606
1607 SQUID_CHECK_WORKING_KRB5
1608 SQUID_DEFINE_BOOL(HAVE_KRB5,$squid_cv_working_krb5,[KRB5 support])
1609 ])
1610 AS_IF([test "x$KRB5LIBS" = "x"],[
1611 AS_IF([test "x$with_gnugss" = "xyes"],[
1612 AC_MSG_ERROR([Required GNU GSS Kerberos library not found])
1613 ],[
1614 AC_MSG_WARN([GNU GSS Kerberos library not found])
1615 ])
1616 ])
1617 SQUID_STATE_ROLLBACK([squid_krb5_save])
1618 ])
1619
1620 AS_IF([test "x$KRB5LIBS" != "x"],[with_krb5=yes])
1621 AC_MSG_NOTICE([$KRB5_FLAVOUR Kerberos library support: ${with_krb5:=no} ${LIB_KRB5_PATH} ${LIB_KRB5_LIBS}])
1622 AC_SUBST(KRB5INCS)
1623 AC_SUBST(KRB5LIBS)
1624
1625 SQUID_AUTO_LIB(ldap,[LDAP],[LIBLDAP])
1626 SQUID_CHECK_LIB_WORKS(ldap,[
1627 dnl On MinGW OpenLDAP is not available, so LDAP helpers can be linked
1628 dnl only with Windows LDAP libraries using -lwldap32
1629 AS_IF([test "$squid_host_os" = "mingw"],[
1630 LIBLDAP_LIBS="-lwldap32"
1631 ],[
1632 SQUID_STATE_SAVE(squid_ldap_state)
1633 LIBS="$LIBLDAP_PATH $LIBPTHREADS $LIBS"
1634 PKG_CHECK_MODULES([LIBLDAP],[ldap],[],[
1635 AC_CHECK_LIB(lber, ber_init, [LIBLBER="-llber"])
1636 AC_CHECK_LIB(ldap, ldap_init, [LIBLDAP_LIBS="-lldap $LIBLBER"])
1637 dnl if no ldap lib found check for mozilla version
1638 AS_IF([test "x$ac_cv_lib_ldap_ldap_init" != "xyes"],[
1639 SQUID_STATE_SAVE(squid_ldap_mozilla)
1640 LIBS="$LIBLDAP_PATH $LIBPTHREADS"
1641 AC_CHECK_LIB(ldap60, ldap_init, [LIBLDAP_LIBS="-lldap60 $LIBLBER"])
1642 LIBS="$LIBLDAP_PATH $LIBLDAP_LIBS $LIBPTHREADS"
1643 AC_CHECK_LIB(prldap60, prldap_init, [LIBLDAP_LIBS="-lprldap60 $LIBLDAP_LIBS"])
1644 LIBS="$LIBLDAP_PATH $LIBLDAP_LIBS $LIBPTHREADS"
1645 AC_CHECK_LIB(ssldap60, ldapssl_init, [LIBLDAP_LIBS="-lssldap60 $LIBLDAP_LIBS"])
1646 SQUID_STATE_ROLLBACK(squid_ldap_mozilla)
1647 ])
1648 ])
1649 AC_CHECK_HEADERS(ldap.h lber.h)
1650 AC_CHECK_HEADERS(mozldap/ldap.h)
1651 SQUID_CHECK_LDAP_API
1652 ])
1653 ])
1654
1655 SQUID_AUTO_LIB(systemd,[systemd API for start-up notification],[LIBSYSTEMD])
1656 AH_TEMPLATE(USE_SYSTEMD,[systemd support is available])
1657 SQUID_CHECK_LIB_WORKS(systemd,[
1658 SQUID_STATE_SAVE(squid_systemd_state)
1659 LIBS="$LIBS $LIBSYSTEMD_PATH"
1660 PKG_CHECK_MODULES(LIBSYSTEMD,[libsystemd],,[
1661 # systemd < 209
1662 PKG_CHECK_MODULES(LIBSYSTEMD,[libsystemd-daemon],,[:])
1663 ])
1664 AC_CHECK_HEADERS(systemd/sd-daemon.h)
1665 SQUID_STATE_ROLLBACK(squid_systemd_state)
1666
1667 AS_IF([test "x$LIBSYSTEMD_LIBS" != "x"],[
1668 AC_DEFINE(USE_SYSTEMD,1,[systemd support is available])
1669 ])
1670 ])
1671
1672 AC_ARG_ENABLE(forw-via-db,
1673 AS_HELP_STRING([--enable-forw-via-db],[Enable Forw/Via database]), [
1674 SQUID_YESNO([$enableval],[--enable-forw-via-db])
1675 ])
1676 SQUID_DEFINE_BOOL(USE_FORW_VIA_DB,${enable_forw_via_db:=no},
1677 [Enable Forw/Via database])
1678 AC_MSG_NOTICE([Forw/Via database enabled: $enable_forw_via_db])
1679
1680 AC_ARG_ENABLE(cache-digests,
1681 AS_HELP_STRING([--enable-cache-digests],
1682 [Use Cache Digests. See https://wiki.squid-cache.org/SquidFaq/CacheDigests]),[
1683 SQUID_YESNO([$enableval],[--enable-cache-digests])
1684 ])
1685 SQUID_DEFINE_BOOL(USE_CACHE_DIGESTS,${enable_cache_digests:=no},
1686 [Use Cache Digests for locating objects in neighbor caches.])
1687 AC_MSG_NOTICE([Cache Digests enabled: $enable_cache_digests])
1688
1689
1690 ################################
1691 # check for netio plugin stuff #
1692 ################################
1693 dnl order of these options handling is relevant in case the user
1694 dnl supplies more than one --enable option. Options handled later
1695 dnl override those handled earlier for io loop method manual override
1696 AC_ARG_ENABLE(select,
1697 AS_HELP_STRING([--disable-select],[Disable select(2) support.]),[
1698 SQUID_YESNO([$enableval],[--enable-select])
1699 AS_IF([test "x$enableval" = "xyes"],[squid_opt_io_loop_engine="select"])
1700 ])
1701 AC_MSG_NOTICE([enabling select syscall for net I/O: ${enable_select:=auto}])
1702
1703 AC_ARG_ENABLE(poll,
1704 AS_HELP_STRING([--disable-poll],[Disable poll(2) support.]),[
1705 SQUID_YESNO([$enableval],[--enable-poll])
1706 AS_IF([test "x$enableval" = "xyes"],[squid_opt_io_loop_engine="poll"])
1707 ])
1708 AC_MSG_NOTICE([enabling poll syscall for net I/O: ${enable_poll:=auto}])
1709
1710 AC_ARG_ENABLE(kqueue,
1711 AS_HELP_STRING([--disable-kqueue],
1712 [Disable kqueue(2) support.]), [
1713 SQUID_YESNO([$enableval],[--enable-kqueue])
1714 ])
1715 AS_IF([test "x${enable_kqueue:=auto}" != "xno"],[
1716 AC_CHECK_HEADERS([sys/event.h],[],[
1717 AS_IF([test "x${enable_kqueue}" = "xyes"],[
1718 AC_MSG_ERROR([kqueue support requires sys/event.h header file.])
1719 ])
1720 ])
1721 AC_CHECK_FUNCS(kqueue,[],[
1722 AS_IF([test "x${enable_kqueue}" = "xyes"],[
1723 AC_MSG_ERROR([kqueue support missing in libc library.])
1724 ])
1725 ])
1726 AS_IF([test "x$ac_cv_func_kqueue" = "xyes" -a "x$ac_cv_header_sys_event_h" = "xyes"],[
1727 squid_opt_io_loop_engine="kqueue"
1728 ],[
1729 enable_kqueue="no"
1730 ])
1731 ])
1732 AC_MSG_NOTICE([enabling kqueue for net I/O: ${enable_kqueue:=auto}])
1733
1734 dnl Enable epoll()
1735 AC_ARG_ENABLE(epoll,
1736 AS_HELP_STRING([--disable-epoll],[Disable Linux epoll(2) support.]),
1737 [
1738 SQUID_YESNO([$enableval],[--enable-epoll])
1739 AS_IF([test "x$enableval" = "xyes"],[squid_opt_io_loop_engine="epoll"])
1740 ])
1741 AC_MSG_NOTICE([enabling epoll syscall for net I/O: ${enable_epoll:=auto}])
1742
1743 # auto-detect and verify epoll header and library present and working
1744 # logic mapping and loop method selection are performed later
1745 AS_IF([test "x$enable_epoll" != "xno"],[
1746 # check if libs are needed to support epoll
1747 SQUID_STATE_SAVE(squid_epoll_state)
1748 AC_SEARCH_LIBS(epoll_ctl,[epoll])
1749 AS_IF([test "x$ac_cv_search_epoll_ctl" = "xno"],[enable_epoll=no],
1750 [test "x$ac_cv_search_epoll_ctl" = "xnone required"],[EPOLL_LIBS=""],
1751 [EPOLL_LIBS=$ac_cv_search_epoll_ctl]
1752 )
1753 AC_SUBST(EPOLL_LIBS)
1754 SQUID_STATE_ROLLBACK(squid_epoll_state) #de-pollute LIBS
1755
1756 # epoll requires sys/epoll.h
1757 AC_CHECK_HEADERS([sys/epoll.h])
1758
1759 dnl Verify that epoll really works
1760 AS_IF([test "x$ac_cv_search_epoll_ctl" != "xno"], SQUID_CHECK_EPOLL)
1761
1762 AS_IF([test "x$enable_epoll" = "xyes" -a "x$squid_cv_epoll_works" = "xno"],[
1763 AC_MSG_ERROR([Epoll does not work. Force-enabling it is not going to help.])
1764 ])
1765 ])
1766
1767 dnl Enable /dev/poll
1768 AC_ARG_ENABLE(devpoll,
1769 AS_HELP_STRING([--disable-devpoll],[Disable Solaris /dev/poll support.]),[
1770 SQUID_YESNO([$enableval],[--enable-devpoll])
1771 AS_IF([test "x$enableval" = "xyes"],[squid_opt_io_loop_engine="devpoll"])
1772 ])
1773 AC_MSG_NOTICE([enabling /dev/poll for net I/O: ${enable_devpoll:=auto}])
1774
1775 ## auto-detect and verify devpoll header and library present and working
1776 AS_IF([test "x$enable_devpoll" != "xno"],[
1777 # /dev/poll requires ioctl() and write()
1778 AC_CHECK_FUNCS(ioctl)
1779 AC_CHECK_FUNCS(write)
1780
1781 # /dev/poll requires sys/devpoll.h
1782 AC_CHECK_HEADERS([sys/devpoll.h],,[
1783 AS_IF([test "x$enable_devpoll" = "xyes"],[
1784 AC_MSG_ERROR([--enable-devpoll specified but /dev/poll headers not found])
1785 ])
1786 enable_devpoll=no
1787 ])
1788
1789 # Verify that /dev/poll really works
1790 AS_IF([test "x$enable_devpoll" != "xno"], SQUID_CHECK_DEVPOLL)
1791
1792 AS_IF([test "x$enable_devpoll" = "xyes" -a "x$squid_cv_devpoll_works" = "xno"],[
1793 AC_MSG_ERROR([/dev/poll does not work. Force-enabling it is not going to help.])
1794 ])
1795 ])
1796
1797 AC_ARG_ENABLE(http-violations,
1798 AS_HELP_STRING([--disable-http-violations],
1799 [This allows you to remove code which is known to
1800 violate the HTTP protocol specification.]), [
1801 SQUID_YESNO([$enableval],[--enable-http-violations])
1802 ])
1803 SQUID_DEFINE_BOOL(USE_HTTP_VIOLATIONS, ${enable_http_violations:=yes},
1804 [Define to enable code which volates the HTTP standard specification])
1805 AC_MSG_NOTICE([HTTP violations support enabled: $enable_http_violations])
1806
1807 # IPFW Transparent Proxy
1808 AC_ARG_ENABLE(ipfw-transparent,
1809 AS_HELP_STRING([--enable-ipfw-transparent],
1810 [Enable Transparent Proxy support for systems
1811 using FreeBSD IPFW-style firewalling.]), [
1812 SQUID_YESNO([$enableval],[--enable-ipfw-transparent])
1813 ])
1814 SQUID_DEFINE_BOOL(IPFW_TRANSPARENT,${enable_ipfw_transparent:=no},
1815 [Enable support for Transparent Proxy on systems using FreeBSD IPFW-style firewalling.])
1816 AC_MSG_NOTICE([FreeBSD IPFW-based transparent proxying enabled: $enable_ipfw_transparent])
1817
1818 # IP-Filter Transparent Proxy
1819 AC_ARG_ENABLE(ipf-transparent,
1820 AS_HELP_STRING([--enable-ipf-transparent],
1821 [Enable Transparent Proxy support using IPFilter-style firewalling]), [
1822 SQUID_YESNO([$enableval],[--enable-ipf-transparent])
1823 ])
1824 #will be AC_DEFINEd later, after checking for appropriate infrastructure
1825 #IPF currently broken. Default-disabled for now.
1826 AC_MSG_NOTICE([IPF-based transparent proxying requested: ${enable_ipf_transparent:=no}])
1827
1828 dnl Enable PF Transparent Proxy
1829 AC_ARG_ENABLE(pf-transparent,
1830 AS_HELP_STRING([--enable-pf-transparent],
1831 [Enable Transparent Proxy support for systems using PF network address redirection.]), [
1832 SQUID_YESNO([$enableval],[--enable-pf-transparent])
1833 ])
1834 #will be AC_DEFINEd later, after checking for appropriate infrastructure
1835 AC_MSG_NOTICE([PF-based transparent proxying requested: ${enable_pf_transparent:=no}])
1836
1837 dnl Enable /dev/pf support for older PF Transparent Proxy systems (OpenBSD 4.x and older)
1838 AC_ARG_WITH(nat-devpf,
1839 AS_HELP_STRING([--with-nat-devpf],
1840 [Enable /dev/pf support for NAT on older OpenBSD and FreeBSD kernels.]), [
1841 SQUID_YESNO([$withval],[--with-nat-devpf])
1842 ])
1843 #will be AC_DEFINEd later, after checking for appropriate infrastructure
1844 AC_MSG_NOTICE([NAT lookups via /dev/pf: ${with_nat_devpf:=no}])
1845
1846 # Linux Netfilter Transparent Proxy
1847 AC_ARG_ENABLE(linux-netfilter,
1848 AS_HELP_STRING([--enable-linux-netfilter],
1849 [Enable Transparent Proxy support for Linux (Netfilter)]), [
1850 SQUID_YESNO([$enableval],[--enable-linux-netfilter])
1851 ])
1852 AC_MSG_NOTICE([Linux Netfilter support requested: ${enable_linux_netfilter:=auto}])
1853 #will be AC_DEFINEd later, after checking for appropriate infrastructure
1854
1855
1856 dnl Look for libnetfilter_conntrack options (needed for QOS netfilter marking)
1857 SQUID_AUTO_LIB(netfilter-conntrack,[Netfilter conntrack],[LIBNETFILTER_CONNTRACK])
1858 SQUID_CHECK_LIB_WORKS(netfilter-conntrack,[
1859 LDFLAGS="$LIBNETFILTER_CONNTRACK_PATH $LDFLAGS"
1860 CPPFLAGS="$LIBNETFILTER_CONNTRACK_CFLAGS $CPPFLAGS"
1861 AC_SEARCH_LIBS([nfct_query],[netfilter_conntrack],[LIBNETFILTER_CONNTRACK_LIBS="-lnetfilter_conntrack"])
1862 AC_CHECK_HEADERS([ \
1863 libnetfilter_conntrack/libnetfilter_conntrack.h \
1864 libnetfilter_conntrack/libnetfilter_conntrack_tcp.h
1865 ],,[LIBNETFILTER_CONNTRACK_LIBS=""])
1866 ])
1867
1868 dnl Enable Large file support
1869 buildmodel=""
1870
1871 AC_ARG_WITH(large-files,
1872 AS_HELP_STRING([--with-large-files],[Enable support for large files (logs etc).]), [
1873 SQUID_YESNO([$withval],[--with-large-files])
1874 squid_opt_enable_large_files=$withval
1875 ])
1876
1877 dnl UNIX Build environment
1878 dnl AS_HELP_STRING is not suited here because it cannot to specify newlines
1879 AC_ARG_WITH(build-environment,
1880 AS_HELP_STRING([--with-build-environment=model],
1881 [The build environment to use. Normally one of
1882 POSIX_V6_ILP32_OFF32 (32 bits),
1883 POSIX_V6_ILP32_OFFBIG (32 bits with large file support),
1884 POSIX_V6_LP64_OFF64 (64 bits),
1885 POSIX_V6_LPBIG_OFFBIG (large pointers and files),
1886 XBS5_ILP32_OFF32 i(legacy, 32 bits),
1887 XBS5_ILP32_OFFBIG (legacy, 32 bits with large file support),
1888 XBS5_LP64_OFF64 (legacy, 64 bits),
1889 XBS5_LPBIG_OFFBIG (legacy, large pointers and files)
1890 or default (The default for your OS)]), [
1891 AS_CASE(["$withval"],
1892 [yes|no],[AC_MSG_FAILURE([--with-build-environment expects a build environment string as used by getconf])],
1893 [buildmodel="$withval"]
1894 )
1895 ])
1896
1897 #hack. Let's early-detect sizeof(long)
1898 AC_CHECK_SIZEOF(long)
1899
1900 AS_IF([test "x$squid_opt_enable_large_files" = "xyes" -a "x$buildmodel" = "x"],[
1901 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
1902 AS_IF([test "`getconf _$model 2>/dev/null || true`" = 1 -o "`getconf $model 2>/dev/null || true`"],[
1903 buildmodel=$model
1904 break
1905 ])
1906 done
1907 AS_IF([test "x$buildmodel" = "x"],[
1908 AC_MSG_WARN([No suitable build environment found for large files. Trying to use _FILE_OFFSET_BITS=64])
1909 ])
1910 ])
1911 AS_IF([test "x$buildmodel" = "xdefault" -o "x$buildmodel" = "x"],[
1912 # define _FILE_OFFSET_BITS if requested and needed
1913 AS_IF([test "x$squid_opt_enable_large_files" = "xyes" -a $ac_cv_sizeof_long -le 4],[
1914 AC_MSG_NOTICE([Enabling -D_FILE_OFFSET_BITS=64])
1915 CFLAGS="-D_FILE_OFFSET_BITS=64 $CFLAGS"
1916 CXXFLAGS="-D_FILE_OFFSET_BITS=64 $CXXFLAGS"
1917 ])
1918 ],[
1919 AC_MSG_NOTICE([Using $buildmodel build environment])
1920 AS_IF([ ! test "`getconf _$buildmodel 2>/dev/null || true`" = 1 -o "`getconf $buildmodel 2>/dev/null || true`"],[
1921 AC_MSG_ERROR([Build environment $buildmodel not known to getconf.])
1922 ])
1923 CFLAGS="`getconf ${buildmodel}_CFLAGS` $CFLAGS"
1924 CXXFLAGS="`getconf ${buildmodel}_CFLAGS` $CXXFLAGS"
1925 LIBS="`getconf ${buildmodel}_LIBS` $LIBS"
1926 LDFLAGS="`getconf ${buildmodel}_LDFLAGS` $LDFLAGS"
1927
1928 AS_IF([test "x$squid_host_os" = "xsolaris"],[
1929 # On Solaris getconf returns for CFLAGS -xarch=generic64, -Xa and -Usun options, and
1930 # for LDFLAGS -xarch=generic64, but:
1931 # "-Xa" is supported only by Sun cc, so we need to remove it when using gcc
1932 # For gcc "-xarch=generic64" must be replaced with "-m64"
1933 # The 'sun' define is needed by ipfilter includes, so we must remove "-Usun"
1934 AS_IF([test "x$GCC" = "xyes"],[
1935 AC_MSG_NOTICE([Removing -Xa for gcc/g++ on $host])
1936 CFLAGS="`echo $CFLAGS | sed -e 's/-Xa//'`"
1937 CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-Xa//'`"
1938 AC_MSG_NOTICE([Replacing -xarch=generic64 with -m64 for gcc/g++ on $host])
1939 CFLAGS="`echo $CFLAGS | sed -e 's/-xarch=generic64/-m64/'`"
1940 CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-xarch=generic64/-m64/'`"
1941 LDFLAGS="`echo $LDFLAGS | sed -e 's/-xarch=generic64//'`"
1942 ])
1943 AC_MSG_NOTICE([Removing -Usun on $host])
1944 CFLAGS="`echo $CFLAGS | sed -e 's/-Usun//'`"
1945 CXXFLAGS="`echo $CXXFLAGS | sed -e 's/-Usun//'`"
1946 ])
1947 ])
1948
1949 AC_ARG_ENABLE(follow-x-forwarded-for,
1950 AS_HELP_STRING([--disable-follow-x-forwarded-for],
1951 [Do not follow the X-Forwarded-For
1952 HTTP header to try to find the IP address of the
1953 original or indirect client when a request has
1954 been forwarded through other proxies.]), [
1955 SQUID_YESNO([$enableval],[--enable-follow-x-forwarded-for])
1956 ])
1957 AC_MSG_NOTICE([Support for X-Forwarded-For enabled: ${enable_follow_x_forwarded_for:=yes}])
1958 SQUID_DEFINE_BOOL(FOLLOW_X_FORWARDED_FOR,$enable_follow_x_forwarded_for,
1959 [Enable following X-Forwarded-For headers])
1960
1961 AC_ARG_ENABLE(ident-lookups,
1962 AS_HELP_STRING([--disable-ident-lookups],
1963 [Remove code that supports performing Ident (RFC 931) lookups.]), [
1964 SQUID_YESNO([$enableval],[--enable-ident-lookups])
1965 ])
1966 AC_MSG_NOTICE([Support for Ident lookups enabled: ${enable_ident_lookups:=yes}])
1967 SQUID_DEFINE_BOOL(USE_IDENT,$enable_ident_lookups,[Support for Ident (RFC 931) lookups])
1968
1969 dnl Select Default hosts file location
1970 AC_ARG_ENABLE(default-hostsfile,
1971 AS_HELP_STRING([--enable-default-hostsfile=path],
1972 [Select default location for hosts file.
1973 See hosts_file directive in squid.conf for details]), [
1974 # TODO: handle the "yes" case cleanly
1975 AS_CASE(["$enableval"],
1976 [no|none],[squid_opt_default_hosts="none"],
1977 [
1978 squid_opt_default_hosts=$enableval
1979 AS_IF([ ! test -f "$enableval"],[
1980 AC_MSG_WARN([Unable to find file $enableval. I hope you know what you are doing.])
1981 ])
1982 ])
1983 ])
1984 AC_MSG_NOTICE([Default hosts file set to: ${squid_opt_default_hosts:=/etc/hosts}])
1985 DEFAULT_HOSTS=$squid_opt_default_hosts
1986 AC_SUBST(DEFAULT_HOSTS)
1987
1988 # Select auth schemes modules to build
1989 AC_ARG_ENABLE(auth,
1990 AS_HELP_STRING([--disable-auth],
1991 [Do not support authentication. When supported, the list of schemes
1992 and helpers to be enabled is defined elsewhere]), [
1993 SQUID_YESNO([$enableval],[--enable-auth])
1994 ])
1995 AC_MSG_NOTICE([Authentication support enabled: ${enable_auth:=yes}])
1996 SQUID_DEFINE_BOOL(USE_AUTH,$enable_auth,[Enable support for authentication])
1997 AM_CONDITIONAL(ENABLE_AUTH, test "x$enable_auth" != "xno")
1998 AUTH_MODULES=""
1999 require_smblib="no"
2000 require_sspi="no"
2001
2002 AC_ARG_ENABLE(auth-basic,
2003 AS_HELP_STRING([--enable-auth-basic="list of helpers"],
2004 [Enable the basic authentication scheme, and build the specified helpers.
2005 Not providing an explicit list of helpers will attempt build of
2006 all possible helpers. Default is to do so.
2007 To disable the basic authentication scheme, use --disable-auth-basic.
2008 To enable but build no helpers, specify "none".
2009 To see available helpers, see the src/auth/basic/ directory. ]),[
2010 #nothing to do really
2011 ])
2012 m4_include([src/auth/basic/helpers.m4])
2013
2014 AC_ARG_ENABLE(auth-digest,
2015 AS_HELP_STRING([--enable-auth-digest="list of helpers"],
2016 [Enable the Digest authentication scheme, and build the specified helpers.
2017 Not providing an explicit list of helpers will attempt build of
2018 all possible helpers. Default is to do so.
2019 To disable the Digest authentication scheme, use --disable-auth-digest.
2020 To enable but build no helpers, specify "none".
2021 To see available helpers, see the src/auth/digest/ directory. ]),[
2022 #nothing to do, really
2023 ])
2024 m4_include([src/auth/digest/helpers.m4])
2025
2026 AC_ARG_ENABLE(auth-negotiate,
2027 AS_HELP_STRING([--enable-auth-negotiate="list of helpers"],
2028 [Enable the Negotiate authentication scheme, and build the specified
2029 helpers.
2030 Not providing an explicit list of helpers will attempt build of
2031 all possible helpers. Default is to do so.
2032 To disable the Negotiate authentication scheme,
2033 use --disable-auth-negotiate.
2034 To enable but build no helpers, specify "none".
2035 To see available helpers, see the src/auth/negotiate/ directory. ]),[
2036 #nothing to do, really
2037 ])
2038 m4_include([src/auth/negotiate/helpers.m4])
2039
2040 AC_ARG_ENABLE(auth-ntlm,
2041 AS_HELP_STRING([--enable-auth-ntlm="list of helpers"],
2042 [Enable the NTLM authentication scheme, and build the specified helpers.
2043 Not providing an explicit list of helpers will attempt build of
2044 all possible helpers. Default is to do so.
2045 To disable the NTLM authentication scheme, use --disable-auth-ntlm.
2046 To enable but build no helpers, specify "none".
2047 To see available helpers, see the src/auth/ntlm/ directory. ]),[
2048 ])
2049 m4_include([src/auth/ntlm/helpers.m4])
2050
2051 dnl Authentication libraries to build
2052 dnl This list will not be needed when each auth library has its own Makefile
2053 dnl this is to be placed AFTER each auth module's handler
2054 AUTH_LIBS_TO_BUILD=
2055 for module in $AUTH_MODULES; do
2056 AUTH_LIBS_TO_BUILD="$AUTH_LIBS_TO_BUILD ${module}/lib${module}.la"
2057 done
2058 AC_SUBST(AUTH_MODULES)
2059 AC_SUBST(AUTH_LIBS_TO_BUILD)
2060 AM_CONDITIONAL(ENABLE_SMBLIB, test "x$require_smblib" = "xyes")
2061 AM_CONDITIONAL(ENABLE_SSPI, test "x$require_sspi" = "xyes")
2062
2063 dnl Select logging daemon helpers to build
2064 AC_ARG_ENABLE(log-daemon-helpers,
2065 AS_HELP_STRING([--enable-log-daemon-helpers="list of helpers"],
2066 [This option selects which logging daemon helpers to
2067 build and install as part of the normal build process
2068 For a list of available helpers see the src/log/
2069 directory.]),[
2070 #nothing to do, really
2071 ])
2072 m4_include([src/log/helpers.m4])
2073
2074 AC_ARG_ENABLE(external-acl-helpers,
2075 AS_HELP_STRING([--enable-external-acl-helpers="list of helpers"],
2076 [Enable external_acl helpers support and the helpers themselves.
2077 Default is to build all buildable helpers and enable support.
2078 To disable support, use --disable-external-acl-helpers.
2079 To build no helpers, specify "none".
2080 To see available helpers, see the src/acl/external/
2081 directory]), [
2082 #nothing to do, really
2083 ])
2084 m4_include([src/acl/external/helpers.m4])
2085
2086 dnl Select url_rewrite helpers to build
2087 AC_ARG_ENABLE(url-rewrite-helpers,
2088 AS_HELP_STRING([--enable-url-rewrite-helpers="list of helpers"],
2089 [This option selects which url_rewrite helpers to
2090 build and install as part of the normal build
2091 process. The default is to attempt the build of all possible
2092 helpers. Use --disable-url-rewrite-helpers to build none.
2093 For a list of available helpers see the
2094 src/http/url_rewriters/ directory.]),[
2095 ])
2096 m4_include([src/http/url_rewriters/helpers.m4])
2097
2098 dnl Select security helpers to build
2099 AC_ARG_ENABLE(security-cert-validators,
2100 AS_HELP_STRING([--enable-security-cert-validators="list of helpers"],
2101 [This option selects which security certificate validator
2102 helpers to build and install as part of the normal build
2103 process. The default is to attempt the build of all possible
2104 helpers. Use --disable-security-cert-validators to
2105 build none. For a list of available helpers see the
2106 src/security/cert_validators/ directory.]),[
2107 ])
2108 m4_include([src/security/cert_validators/helpers.m4])
2109
2110 AC_ARG_ENABLE(security-cert-generators,
2111 AS_HELP_STRING([--enable-security-cert-generators="list of helpers"],
2112 [This option selects which security certificate validator
2113 helpers to build and install as part of the normal build
2114 process. The default is to attempt the build of all possible
2115 helpers. Use --disable-security-cert-genrators to
2116 build none. For a list of available helpers see the
2117 src/security/cert_generators/ directory.]),[
2118 ])
2119 m4_include([src/security/cert_generators/helpers.m4])
2120
2121 dnl Select storeid_rewrite helpers to build
2122 AC_ARG_ENABLE(storeid-rewrite-helpers,
2123 AS_HELP_STRING([--enable-storeid-rewrite-helpers="list of helpers"],
2124 [This option selects which Store-ID rewrite helpers to
2125 build and install as part of the normal build
2126 process. The default is to attempt the build of all possible
2127 helpers. Use --disable-storeid-rewrite-helpers to build none.
2128 For a list of available helpers see the
2129 src/store/id_rewriters/ directory.]),[
2130 ])
2131 m4_include([src/store/id_rewriters/helpers.m4])
2132
2133 AC_ARG_WITH(valgrind-debug,
2134 AS_HELP_STRING([--with-valgrind-debug],
2135 [Include debug instrumentation for use with valgrind]),
2136 [
2137 SQUID_YESNO([$withval],[--with-valgrind-debug])
2138 AS_IF([test "x$withval" != "xno"],[
2139 AC_CHECK_HEADERS(valgrind/memcheck.h,[],[
2140 AC_MSG_ERROR([Valgrind support requested, needed headers not found.])
2141 ])
2142 ])
2143 ])
2144 SQUID_DEFINE_BOOL(WITH_VALGRIND,${with_valgrind_debug:=no},
2145 [Valgrind memory debugger support])
2146 AC_MSG_NOTICE([Valgrind debug support enabled: $with_valgrind_debug])
2147
2148 dnl Enable WIN32 Service compile mode
2149 AC_ARG_ENABLE(win32-service,
2150 AS_HELP_STRING([--enable-win32-service],
2151 [Compile Squid as a WIN32 Service.
2152 Works only on MS-Windows platforms]), [
2153 SQUID_YESNO([$enableval],[--enable-win32-service])
2154 ])
2155 SQUID_DEFINE_BOOL(USE_WIN32_SERVICE,${enable_win32_service:=no},
2156 [Enable code supporting MS Windows service mode])
2157 AC_MSG_NOTICE([MS Windows service mode enabled: $enable_win32_service])
2158
2159
2160 # Disable "unlinkd" code
2161 AC_ARG_ENABLE(unlinkd,
2162 AS_HELP_STRING([--disable-unlinkd],[Do not use unlinkd]), [
2163 SQUID_YESNO([$enableval],[--enable-unlinkd])
2164 ])
2165 SQUID_DEFINE_BOOL(USE_UNLINKD,${enable_unlinkd:=yes},
2166 [Enable useage of unlinkd])
2167 AM_CONDITIONAL(ENABLE_UNLINKD,test "x$enable_unlinkd" = "xyes")
2168 AC_MSG_NOTICE([unlinkd enabled: $enable_unlinkd])
2169
2170 # Enable backtraces on fatal errors
2171 AC_ARG_ENABLE(stacktraces,
2172 AS_HELP_STRING([--enable-stacktraces],
2173 [Enable automatic call backtrace on fatal errors]), [
2174 SQUID_YESNO([$enableval],[--enable-stacktraces])
2175 ])
2176 SQUID_DEFINE_BOOL(PRINT_STACK_TRACE,${enable_stacktraces:=no},
2177 [Print stack traces on fatal errors])
2178 AC_MSG_NOTICE([Automatically print stack trace on fatal errors: $enable_stacktraces])
2179
2180 # Enable X-Accelerator-Vary for Vary support within an accelerator setup
2181 AC_ARG_ENABLE(x-accelerator-vary,
2182 AS_HELP_STRING([--enable-x-accelerator-vary],
2183 [Enable support for the X-Accelerator-Vary
2184 HTTP header. Can be used to indicate
2185 variance within an accelerator setup.
2186 Typically used together with other code
2187 that adds custom HTTP headers to the requests.]), [
2188 SQUID_YESNO([$enableval],[--enable-x-accelerator-vary])
2189 ])
2190 SQUID_DEFINE_BOOL(X_ACCELERATOR_VARY,${enable_x_accelerator_vary:=no},
2191 [Enable support for the X-Accelerator-Vary HTTP header])
2192 AC_MSG_NOTICE([X-Accelerator-Vary support enabled: $enable_x_accelerator_vary])
2193
2194 SQUID_AUTO_LIB(cppunit,[cppunit test framework],[LIBCPPUNIT])
2195 SQUID_CHECK_LIB_WORKS(cppunit,[
2196 LIBCPPUNIT_LIBS="$LIBCPPUNIT_PATH -lcppunit"
2197 PKG_CHECK_MODULES([LIBCPPUNIT],[cppunit],[
2198 squid_cv_cppunit_version="`pkg-config --modversion cppunit`"
2199 AC_MSG_NOTICE([using system installed cppunit version $squid_cv_cppunit_version])
2200 AS_UNSET(squid_cv_cppunit_version)
2201
2202 SQUID_STATE_SAVE(squid_cppunit_state)
2203 CXXFLAGS="${CXXFLAGS} ${LIBCPPUNIT_CFLAGS}"
2204 LIBS="${LIBS} ${LIBCPPUNIT_LIBS}"
2205 AC_CHECK_HEADERS(cppunit/extensions/HelperMacros.h)
2206 SQUID_STATE_ROLLBACK(squid_cppunit_state)
2207 ],[
2208 AC_MSG_WARN([cppunit does not appear to be installed. Squid does not require this, but code testing with 'make check' will fail.])
2209 ])
2210 ])
2211
2212 dnl Check for headers
2213 AC_CHECK_HEADERS( \
2214 arpa/inet.h \
2215 arpa/nameser.h \
2216 assert.h \
2217 bstring.h \
2218 crypt.h \
2219 ctype.h \
2220 direct.h \
2221 dirent.h \
2222 errno.h \
2223 execinfo.h \
2224 fcntl.h \
2225 fnmatch.h \
2226 getopt.h \
2227 glob.h \
2228 gnumalloc.h \
2229 grp.h \
2230 ipl.h \
2231 libc.h \
2232 limits.h \
2233 linux/posix_types.h \
2234 linux/types.h \
2235 malloc.h \
2236 math.h \
2237 memory.h \
2238 mount.h \
2239 netdb.h \
2240 netinet/in.h \
2241 netinet/in_systm.h \
2242 netinet/tcp.h \
2243 paths.h \
2244 poll.h \
2245 priv.h \
2246 pwd.h \
2247 regex.h \
2248 sched.h \
2249 siginfo.h \
2250 signal.h \
2251 stdarg.h \
2252 stddef.h \
2253 stdio.h \
2254 stdlib.h \
2255 string.h \
2256 strings.h \
2257 sys/bitypes.h \
2258 sys/file.h \
2259 sys/ioctl.h \
2260 sys/ipc.cc \
2261 sys/param.h \
2262 sys/prctl.h \
2263 sys/procctl.h \
2264 sys/md5.h \
2265 sys/mman.h \
2266 sys/msg.h \
2267 sys/resource.h \
2268 sys/select.h \
2269 sys/shm.h \
2270 sys/socket.h \
2271 sys/stat.h \
2272 syscall.h \
2273 sys/syscall.h \
2274 sys/time.h \
2275 sys/types.h \
2276 sys/uio.h \
2277 sys/un.h \
2278 sys/vfs.h \
2279 sys/wait.h \
2280 syslog.h \
2281 time.h \
2282 unistd.h \
2283 utime.h \
2284 varargs.h \
2285 byteswap.h \
2286 glib.h \
2287 stdint.h \
2288 inttypes.h \
2289 wchar.h
2290 )
2291
2292 AC_CHECK_HEADERS( \
2293 linux/netfilter_ipv4.h \
2294 linux/netfilter_ipv6/ip6_tables.h \
2295 ,,,
2296 SQUID_DEFAULT_INCLUDES
2297 #if HAVE_LIMITS_H
2298 #include <limits.h>
2299 #endif
2300 /* Netfilter ip(6)tables v1.4.0 has broken headers */
2301 #if HAVE_NETINET_IN_H
2302 #include <netinet/in.h>
2303 #endif
2304 )
2305
2306 dnl *BSD do not include the dependencies for all their net/ and netinet/ files
2307 dnl We must include a few basic type headers for them to work.
2308 AC_CHECK_HEADERS( \
2309 net/if.h \
2310 netinet/if_ether.h\
2311 netinet/icmp6.h \
2312 netinet/in.h \
2313 netinet/ip.h \
2314 netinet/ip6.h \
2315 netinet/ip_icmp.h \
2316 netinet/ipl.h \
2317 net/pf/pfvar.h \
2318 net/pfvar.h \
2319 sys/mount.h\
2320 resolv.h \
2321 ,,,
2322 SQUID_BSDNET_INCLUDES)
2323
2324 AC_C_CONST
2325 AC_C_BIGENDIAN
2326
2327 AC_CHECK_MEMBERS([struct tm.tm_gmtoff],,,[
2328 #if HAVE_TIME_H
2329 #include <time.h>
2330 #endif
2331 ])
2332
2333 AC_CHECK_TYPE(struct rusage,AC_DEFINE(HAVE_STRUCT_RUSAGE,1,[The system provides struct rusage]),,[
2334 #if HAVE_SYS_TIME_H
2335 #include <sys/time.h>
2336 #endif
2337 #if HAVE_SYS_RESOURCE_H
2338 #include <sys/resource.h>
2339 #endif
2340 ])
2341
2342 AC_CHECK_MEMBERS([struct iphdr.ip_hl],,,[
2343 #if HAVE_SYS_TYPES_H
2344 #include <sys/types.h>
2345 #endif
2346 #include <netinet/in.h>
2347 #include <netinet/in_systm.h>
2348 #include <netinet/ip.h>
2349 #if defined (__linux__) || defined (__CYGWIN__)
2350 #define ip_hl ihl
2351 #endif
2352 #ifndef __linux__
2353 #ifndef __CYGWIN__
2354 #define iphdr ip
2355 #endif
2356 #endif])
2357
2358 dnl Check for typedefs
2359 AC_CHECK_SIZEOF(void *)
2360
2361 # check for a bunch of types
2362 AC_TYPE_INT8_T
2363 AC_TYPE_UINT8_T
2364 AC_TYPE_INT16_T
2365 AC_TYPE_UINT16_T
2366 AC_TYPE_INT32_T
2367 AC_TYPE_UINT32_T
2368 AC_TYPE_INT64_T
2369 AC_TYPE_UINT64_T
2370 AC_TYPE_PID_T
2371 AC_TYPE_SIZE_T
2372 AC_TYPE_SSIZE_T
2373 AC_TYPE_OFF_T
2374 AC_TYPE_UID_T
2375 AC_CHECK_TYPE([bool])
2376 #need the defines for PRId64
2377 AC_CHECK_SIZEOF(int64_t)
2378 AC_CHECK_SIZEOF(long)
2379 #need the define for overflow checks
2380 AC_CHECK_SIZEOF(off_t)
2381 AC_CHECK_SIZEOF(size_t)
2382
2383 dnl On Solaris 9 x86, gcc may includes a "fixed" set of old system include files
2384 dnl that is incompatible with the updated Solaris header files.
2385 dnl For this reason, we must check if pad128_t and upad128_t are defined.
2386 AC_CHECK_TYPE(pad128_t,
2387 AC_DEFINE(HAVE_PAD128_T,1,[pad128_t is defined in system headers]),
2388 ,SQUID_DEFAULT_INCLUDES)
2389
2390 AC_CHECK_TYPE(upad128_t,
2391 AC_DEFINE(HAVE_UPAD128_T,1,[upad128_t is defined in system headers]),
2392 ,SQUID_DEFAULT_INCLUDES)
2393
2394 AC_CHECK_TYPE(mode_t, AC_DEFINE(HAVE_MODE_T,1,[mode_t is defined by the system headers]),,SQUID_DEFAULT_INCLUDES)
2395 AC_CHECK_TYPE(fd_mask, AC_DEFINE(HAVE_FD_MASK,1,[fd_mask is defined by the system headers]),,SQUID_DEFAULT_INCLUDES)
2396
2397 AC_CHECK_TYPE(socklen_t,AC_DEFINE(HAVE_SOCKLEN_T,1,[socklen_t is defined by the system headers]),,[
2398 #include <sys/types.h>
2399 #include <sys/socket.h>
2400 #include <stdlib.h>
2401 #include <stddef.h>
2402 ])
2403
2404 AC_CHECK_TYPE(mtyp_t,AC_DEFINE(HAVE_MTYP_T,1,
2405 [mtyp_t is defined by the system headers]),,[#include <sys/types.h>
2406 #include <sys/ipc.h>
2407 #include <sys/msg.h>])
2408
2409 AC_CHECK_TYPE(cpu_set_t,
2410 AC_DEFINE(HAVE_CPU_SET_T,1,[cpu_set_t is defined by the system headers]),,[
2411 #if HAVE_SCHED_H
2412 #include <sched.h>
2413 #endif
2414 ])
2415
2416 dnl Check for special functions
2417 AC_FUNC_ALLOCA
2418
2419 SQUID_AUTO_LIB(cap,[Linux capabilities],[LIBCAP])
2420 SQUID_CHECK_LIB_WORKS(cap,[
2421 SQUID_STATE_SAVE(squid_libcap_state)
2422 CXXFLAGS="$LIBCAP_CFLAGS $CXXFLAGS"
2423 LDFLAGS="$LIBCAP_PATH $LDFLAGS"
2424 PKG_CHECK_MODULES([LIBCAP],[libcap >= 2.09],[],[
2425 # cap_clear_flag is the most recent libcap function we require
2426 AC_CHECK_LIB([cap],[cap_clear_flag],[LIBCAP_LIBS="$LIBCAP_LIBS -lcap"])
2427 ])
2428 SQUID_CHECK_FUNCTIONAL_LIBCAP2
2429 AC_MSG_NOTICE([libcap headers are ok: $squid_cv_sys_capability_works])
2430 AS_IF([test "x$squid_cv_sys_capability_works" = "xno"],[LIBCAP_LIBS=""])
2431 SQUID_STATE_ROLLBACK(squid_libcap_state)
2432
2433 AS_IF([test "x$LIBCAP_LIBS" != "x"],[
2434 AC_DEFINE(USE_LIBCAP,1,[Linux capabilities library support])
2435 ])
2436 ])
2437
2438 dnl Check for needed libraries
2439 AC_SEARCH_LIBS([gethostbyname],[nsl resolv bind])
2440 AC_SEARCH_LIBS([res_init],[resolv])
2441 AC_SEARCH_LIBS([__res_search],[resolv])
2442 AC_SEARCH_LIBS([bind],[socket])
2443 AC_SEARCH_LIBS([opcom_stack_trace],[opcom_stack])
2444 AC_SEARCH_LIBS([yp_match], [nsl nss_nis nss_nisplus])
2445
2446 # check that we have unix sockets
2447 SQUID_CHECK_UNIX_SOCKET
2448 SQUID_DEFINE_BOOL(HAVE_UNIXSOCKET,$squid_cv_unixsocket,[System supports unix sockets])
2449
2450 AC_CHECK_LIB(gnumalloc, malloc)
2451 AS_IF([test "x$ac_cv_lib_gnumalloc_malloc" = "xyes"],[
2452 AC_MSG_NOTICE([Disabling extended malloc functions when using bundled gnumalloc])
2453 ac_cv_func_mallocblksize=no
2454 ac_cv_func_mallopt=no
2455 ],[
2456 AS_CASE(["$squid_host_os"],
2457 [solaris],[AC_MSG_NOTICE([skipping libmalloc check for $host])],
2458 [freebsd],[AC_MSG_NOTICE([skipping libmalloc check for $host])],
2459 [AC_CHECK_LIB(malloc, main)]
2460 )
2461 ])
2462
2463 AS_IF([test "$squid_host_os" = "mingw"],[
2464 AC_MSG_NOTICE([Use MSVCRT for math functions.])
2465 ],[
2466 dnl log() are only used in old C code for now.
2467 AC_LANG_PUSH([C])
2468 AC_SEARCH_LIBS([log],[m])
2469 AC_LANG_POP([C])
2470 ])
2471
2472 dnl --with-maxfd present for compatibility with Squid-2.
2473 dnl undocumented in ./configure --help to encourage using the Squid-3 directive
2474 AC_ARG_WITH(maxfd,,[
2475 AS_CASE([$withval],
2476 [@<:@0-9@:>@*],[
2477 squid_filedescriptors_num=$withval
2478 AC_MSG_NOTICE([forcing default of $squid_filedescriptors_num filedescriptors (user-forced)])
2479 ],
2480 [AC_MSG_ERROR(--with-maxfd expects a numeric argument)]
2481 )
2482 ])
2483
2484 AC_ARG_WITH(filedescriptors,
2485 AS_HELP_STRING([--with-filedescriptors=NUMBER],
2486 [Force squid to support NUMBER filedescriptors]),[
2487 AS_CASE([$withval],
2488 [@<:@0-9@:>@*],[
2489 squid_filedescriptors_num=$withval
2490 AC_MSG_NOTICE([forcing default of $squid_filedescriptors_num filedescriptors (user-forced)])],
2491 [AC_MSG_ERROR([--with-filedescriptors expects a numeric argument])]
2492 )
2493 ])
2494
2495 SQUID_CHECK_DEFAULT_FD_SETSIZE
2496 SQUID_CHECK_MAXFD
2497
2498
2499 dnl Enable IPv6 support
2500 AC_MSG_CHECKING([whether to enable IPv6])
2501 AC_ARG_ENABLE(ipv6,
2502 AS_HELP_STRING([--disable-ipv6],[Disable IPv6 support. The default is to probe system capabilities on startup.]), [
2503 SQUID_YESNO([$enableval],[--enable-ipv6])
2504 ])
2505 AC_MSG_RESULT(${enable_ipv6:=yes})
2506 SQUID_DEFINE_BOOL(USE_IPV6,$enable_ipv6,[Enable support for IPv6 ])
2507
2508 AS_IF([test "x$enable_ipv6" = "xyes"],[SQUID_CHECK_SIN6_LEN_IN_SAI])
2509 SQUID_CHECK_SS_LEN_IN_SOCKADDR_STORAGE
2510 SQUID_CHECK_SIN_LEN_IN_SOCKADDR_IN
2511
2512 dnl System-specific library modifications
2513 AH_TEMPLATE(GETTIMEOFDAY_NO_TZP,[Whether gettimeofday takes only one argument])
2514 AS_CASE(["$host"],
2515 [*-pc-sco3.2*],[
2516 # -lintl is needed on SCO version 3.2v4.2 for strftime()
2517 # Robert Side <rside@aiinc.bc.ca>
2518 # Mon, 18 Jan 1999 17:48:00 GMT
2519 AC_CHECK_LIB(intl, strftime)
2520 ],
2521
2522 [i386-*-solaris2.*],[
2523 AS_IF([test "x$GCC" = "xyes"],[
2524 AC_MSG_NOTICE([Removing -O for gcc on $host])
2525 CFLAGS="`echo $CFLAGS | sed -e 's/-O[[0-9g]]*//'`"
2526 ])
2527 ],
2528
2529 [*-sgi-irix*],[
2530 AC_MSG_NOTICE([Removing -lsocket for IRIX...])
2531 LIBS=`echo $LIBS | sed -e s/-lsocket//`
2532 AC_MSG_NOTICE([Removing -lnsl for IRIX...])
2533 LIBS=`echo $LIBS | sed -e s/-lnsl//`
2534 ac_cv_lib_nsl_main=no
2535 ],
2536
2537 [*-ibm-aix*],[
2538 SQUID_CC_REQUIRE_ARGUMENT([ac_cv_require_rtti],[-rtti],[[
2539 #include <assert.h>
2540 #ifndef NULL
2541 #define NULL 0
2542 #endif
2543 class Foo{
2544 public:virtual ~Foo(){}
2545 };
2546 class Bar:public Foo{
2547 public:Bar():Foo(){}
2548 };
2549 ]],[[
2550 Foo * myFoo=new Bar();
2551 Bar * myBar=dynamic_cast<Bar *>(myFoo);
2552 assert(myBar != NULL);
2553 ]])
2554 AS_IF([test "$ac_cv_require_rtti" = "yes"],[
2555 SQUID_CFLAGS="-rtti $SQUID_CFLAGS"
2556 SQUID_CXXFLAGS="-rtti $SQUID_CXXFLAGS"
2557 ])
2558
2559 AC_LANG_PUSH([C])
2560 SQUID_CC_REQUIRE_ARGUMENT([ac_cv_require_qcpluscmt],[-qcpluscmt],[[]],[[//c++ cmt]])
2561 AC_LANG_POP([C])
2562 AS_IF([test "$ac_cv_require_qcpluscmt" = "yes"],[
2563 SQUID_CFLAGS="-qcpluscmt $SQUID_CFLAGS"
2564 ])
2565 ],
2566
2567 [*-*-solaris2.[[0-4]]],[AC_DEFINE(GETTIMEOFDAY_NO_TZP,1)],
2568
2569 [*-sony-newsos[[56]]*],[AC_DEFINE(GETTIMEOFDAY_NO_TZP,1)]
2570 )
2571
2572 dnl This has to be before AC_CHECK_FUNCS
2573 # Disable poll() on certain platforms. Override by setting ac_cv_func_poll
2574 # when running configure.
2575 AS_IF([test "x$ac_cv_func_poll" = "x"],[
2576 AS_CASE(["$host"],
2577 [*-hp-hpux*.*],[
2578 # Duane Wessels
2579 AC_MSG_NOTICE([disabling poll for $host...])
2580 ac_cv_func_poll='no'
2581 ],
2582
2583 [*-linux-*],[
2584 # Henrik Nordstrom (hno@squid-cache.org) 19980817
2585 # poll is problematic on Linux. We disable it
2586 # by default until Linux gets it right.
2587 rev=`uname -r | awk -F. '{printf "%03d%03d",$1,$2}'`
2588 AS_IF([test $rev -lt 002002],[
2589 AC_MSG_NOTICE([disabling poll for $host < 2.2...])
2590 ac_cv_func_poll='no'
2591 ])
2592 ],
2593
2594 [powerpc-ibm-aix4.1.*],[
2595 # Mike Laster (mlaster@metavillage.com) 19981021
2596 AC_MSG_NOTICE([disabling poll for $host...])
2597 ac_cv_func_poll='no'
2598 ]
2599 )
2600 ])
2601
2602 dnl Check for library functions
2603 AC_CHECK_FUNCS(\
2604 backtrace_symbols_fd \
2605 bcopy \
2606 eui64_aton \
2607 fchmod \
2608 getdtablesize \
2609 getpagesize \
2610 getpass \
2611 getrusage \
2612 getspnam \
2613 gettimeofday \
2614 glob \
2615 mallocblksize \
2616 mallopt \
2617 memcpy \
2618 memmove \
2619 memrchr \
2620 memset \
2621 mkstemp \
2622 mktime \
2623 mstats \
2624 poll \
2625 prctl \
2626 procctl \
2627 pthread_attr_setschedparam \
2628 pthread_attr_setscope \
2629 pthread_setschedparam \
2630 pthread_sigmask \
2631 putenv \
2632 regcomp \
2633 regexec \
2634 regfree \
2635 res_init \
2636 __res_init \
2637 rint \
2638 sched_getaffinity \
2639 sched_setaffinity \
2640 select \
2641 seteuid \
2642 setgroups \
2643 setpflags \
2644 setpgrp \
2645 setsid \
2646 sigaction \
2647 snprintf \
2648 socketpair \
2649 sysconf \
2650 syslog \
2651 timegm \
2652 vsnprintf \
2653 )
2654 dnl ... and some we provide local replacements for
2655 AC_REPLACE_FUNCS(\
2656 initgroups \
2657 psignal \
2658 strerror \
2659 strtoll \
2660 tempnam \
2661 )
2662
2663 # Magic which checks whether we are forcing a type of comm loop we
2664 # are actually going to (ab)use.
2665 # Mostly ripped from squid-commloops, thanks to adrian and benno
2666
2667 AS_IF([test "x$squid_opt_io_loop_engine" != "x"],
2668 AC_MSG_NOTICE([choosing user-specified net I/O API $squid_opt_io_loop_engine]),
2669 [test "x$enable_epoll" != "xno" -a "x$squid_cv_epoll_works" = "xyes"],
2670 squid_opt_io_loop_engine="epoll",
2671 [test "x$enable_kqueue" != "xno"],
2672 squid_opt_io_loop_engine="kqueue",
2673 [test "x$enable_devpoll" != "xno"],
2674 squid_opt_io_loop_engine="devpoll",
2675 [test "x$enable_poll" != "xno" -a "x$ac_cv_func_poll" = "xyes"],
2676 squid_opt_io_loop_engine="poll",
2677 [test "x$enable_select" != "xno" -a "x$ac_cv_func_select" = "xyes"],
2678 squid_opt_io_loop_engine="select",
2679 [
2680 AC_MSG_WARN([Eep! Cannot find epoll, kqueue, /dev/poll, poll or select!])
2681 AC_MSG_WARN([Will try select and hope for the best.])
2682 squid_opt_io_loop_engine="select"
2683 ]
2684 )
2685
2686 AC_MSG_NOTICE([Using ${squid_opt_io_loop_engine} for the IO loop.])
2687
2688 AM_CONDITIONAL(ENABLE_POLL, test "x$squid_opt_io_loop_engine" = "xpoll")
2689 AM_CONDITIONAL(ENABLE_EPOLL, test "x$squid_opt_io_loop_engine" = "xepoll")
2690 AM_CONDITIONAL(ENABLE_SELECT, test "x$squid_opt_io_loop_engine" = "xselect")
2691 AM_CONDITIONAL(ENABLE_KQUEUE, test "x$squid_opt_io_loop_engine" = "xkqueue")
2692 AM_CONDITIONAL(ENABLE_DEVPOLL, test "x$squid_opt_io_loop_engine" = "xdevpoll")
2693
2694 AS_CASE([$squid_opt_io_loop_engine],
2695 [epoll],[AC_DEFINE(USE_EPOLL,1,[Use epoll() for the IO loop])],
2696 [devpoll],[AC_DEFINE(USE_DEVPOLL,1,[Use /dev/poll for the IO loop])],
2697 [poll],[AC_DEFINE(USE_POLL,1,[Use poll() for the IO loop])],
2698 [kqueue],[AC_DEFINE(USE_KQUEUE,1,[Use kqueue() for the IO loop])],
2699 [select],[AC_DEFINE(USE_SELECT,1,[Use select() for the IO loop])],
2700 )
2701
2702 AS_IF([test "x$ac_cv_func_sched_getaffinity" = "xyes" -a "x$ac_cv_func_sched_setaffinity" = "xyes"],[
2703 AC_DEFINE(HAVE_CPU_AFFINITY,1,[Support setting CPU affinity for workers])
2704 ])
2705
2706 SQUID_CHECK_SETRESUID_WORKS
2707 AS_IF([test "x$squid_cv_resuid_works" = "xyes"],[
2708 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.])
2709 ])
2710
2711 AC_CHECK_HEADERS(mswsock.h)
2712 AC_MSG_CHECKING([for constant CMSG_SPACE])
2713 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
2714 #if HAVE_SYS_SOCKET_H
2715 #include <sys/socket.h>
2716 #endif
2717 #if HAVE_MSWSOCK_H
2718 #include <mswsock.h>
2719 #endif
2720
2721 int a[CMSG_SPACE(int)];
2722 ]])], [
2723 AC_MSG_RESULT(yes)
2724 AC_DEFINE(HAVE_CONSTANT_CMSG_SPACE, 1, [Define to 1 if CMSG_SPACE is constant])
2725 ], [
2726 AC_MSG_RESULT(no)
2727 ])
2728
2729 AC_CHECK_TYPE(struct cmsghdr,AC_DEFINE(HAVE_CMSGHDR,1,[The system provides struct cmsghdr]),,[
2730 #if HAVE_SYS_SOCKET_H
2731 #include <sys/socket.h>
2732 #endif
2733 #if HAVE_MSWSOCK_H
2734 #include <mswsock.h>
2735 #endif
2736 #if HAVE_WINSOCK2_H
2737 #include <winsock2.h>
2738 #endif
2739 ])
2740
2741 AC_CHECK_TYPE(struct iovec,AC_DEFINE(HAVE_IOVEC,1,[The system provides struct iovec]),,[
2742 #if HAVE_SYS_SOCKET_H
2743 #include <sys/socket.h>
2744 #endif
2745 #if HAVE_WINSOCK2_H
2746 #include <winsock2.h>
2747 #endif
2748 #if HAVE_SYS_UIO_H
2749 #include <sys/uio.h>
2750 #endif
2751 ])
2752
2753 AC_CHECK_TYPE(struct msghdr,AC_DEFINE(HAVE_MSGHDR,1,[The system provides struct msghdr]),,[
2754 #if HAVE_SYS_SOCKET_H
2755 #include <sys/socket.h>
2756 #endif
2757 #if HAVE_MSWSOCK_H
2758 #include <mswsock.h>
2759 #endif
2760 #if HAVE_WINSOCK2_H
2761 #include <winsock2.h>
2762 #endif
2763 ])
2764
2765 AC_CHECK_TYPE(struct sockaddr_un,AC_DEFINE(HAVE_SOCKADDR_UN,1,[The system provides sockaddr_un]),,[
2766 #if HAVE_SYS_UN_H
2767 #include <sys/un.h>
2768 #endif
2769 #if HAVE_SYS_SOCKET_H
2770 #include <sys/socket.h>
2771 #endif
2772 #if HAVE_WINSOCK2_H
2773 #include <winsock2.h>
2774 #endif
2775 ])
2776
2777 SQUID_CHECK_FUNC_STRNSTR
2778
2779 dnl IP-Filter support requires ipf header files. These aren't
2780 dnl installed by default, so we need to check for them
2781 AS_IF([test "x$enable_ipf_transparent" != "xno"],[
2782 SQUID_CHECK_BROKEN_SOLARIS_IPFILTER
2783 AC_MSG_CHECKING(for availability of IP-Filter header files)
2784 # hold on to your hats...
2785 AS_IF(
2786 [test "x$ac_cv_header_ip_compat_h" = "xyes" -o \
2787 "x$ac_cv_header_ip_fil_compat_h" = "xyes" -o \
2788 "x$ac_cv_header_netinet_ip_compat_h" = "xyes" -o \
2789 "x$ac_cv_header_netinet_ip_fil_compat_h" = "xyes"],
2790 [have_ipfilter_compat_header="yes"])
2791
2792 AS_IF(
2793 [test "x$have_ipfilter_compat_header" = "xyes" -a \
2794 "x$ac_cv_header_ip_fil_h" = "xyes" -a \
2795 "x$ac_cv_header_ip_nat_h" = "xyes"],[enable_ipf_transparent="yes"],
2796
2797 [test "x$have_ipfilter_compat_header" = "xyes" -a \
2798 "x$ac_cv_header_netinet_ip_fil_h" = "xyes" -a \
2799 "x$ac_cv_header_netinet_ip_nat_h" = "xyes"],[enable_ipf_transparent="yes"],
2800 [enable_ipf_transparent="no"])
2801
2802 AC_MSG_RESULT($IPF_TRANSPARENT)
2803
2804 ## On Solaris Ipfilter includes expect that SOLARIS2 is defined with the
2805 ## Solaris minor version (8, 9, 10, ...)
2806 AS_IF([test "x$enable_ipf_transparent" = "xyes" -a "x$squid_host_os" = "xsolaris"],[
2807 solrev=`uname -r | sh -c 'IFS=. read j n x; echo $n'`
2808 CFLAGS="-DSOLARIS2=$solrev $CFLAGS"
2809 CXXFLAGS="-DSOLARIS2=$solrev $CXXFLAGS"
2810 ])
2811 ])
2812 AC_MSG_NOTICE([IPF-based transparent proxying enabled: $enable_ipf_transparent])
2813 SQUID_DEFINE_BOOL(IPF_TRANSPARENT,$enable_ipf_transparent,
2814 [Enable support for IPF-style transparent proxying])
2815
2816 dnl PF /dev/pf support requires a header file.
2817 AS_IF([test "x$with_nat_devpf" != "xno"],[
2818 AS_IF([test "x$ac_cv_header_net_pfvar_h" = "xyes" -o \
2819 "x$ac_cv_header_net_pf_pfvar_h" = "xyes"],[
2820 AS_IF([test "x$with_nat_devpf" = "xauto"],[with_nat_devpf="no"])
2821 ],[
2822 AS_IF([test "x$with_nat_devpf" = "xyes"],[
2823 AC_MSG_ERROR([PF /dev/pf based NAT requested but needed header not found])
2824 ])
2825 with_nat_devpf="no"
2826 ])
2827 ])
2828 SQUID_DEFINE_BOOL(PF_TRANSPARENT,${enable_pf_transparent:=no},
2829 [Enable support for PF-style transparent proxying])
2830 SQUID_DEFINE_BOOL(USE_NAT_DEVPF,${with_nat_devpf:=no},
2831 [Enable support for /dev/pf NAT lookups])
2832
2833 AS_IF([test "x$enable_linux_netfilter" != "xno"],[
2834 AS_IF([test "x$ac_cv_header_linux_netfilter_ipv4_h" = "xyes"],[
2835 AS_IF([test "x$enable_linux_netfilter" = "xauto"],[enable_linux_netfilter=yes])
2836 ],[
2837 AS_IF([test "x$enable_linux_netfilter" = "xauto"],[
2838 enable_linux_netfilter=no
2839 ],[
2840 AC_MSG_ERROR([Linux Netfilter support requested but needed headers not found])
2841 ])
2842 ])
2843 ])
2844 SQUID_DEFINE_BOOL(LINUX_NETFILTER,$enable_linux_netfilter,
2845 [Enable support for Transparent Proxy on Linux via Netfilter])
2846
2847 dnl Netfilter TPROXY depends on libcap but the NAT parts can still work.
2848 AC_MSG_NOTICE([Support for Netfilter-based interception proxy requested: $enable_linux_netfilter])
2849 AS_IF([test "x$enable_linux_netfilter" = "xyes" -a "x$with_cap" != "xyes"],[
2850 AC_MSG_WARN([Missing needed capabilities (libcap 2.09+) for TPROXY])
2851 AC_MSG_WARN([Linux Transparent Proxy (version 4+) support WILL NOT be enabled])
2852 AC_MSG_WARN([Reduced support to NAT Interception Proxy])
2853 # AC_DEFINEd later
2854 ])
2855 AS_IF([test "x$with_netfilter_conntrack" = "xyes" -a "x$with_cap" != "xyes"],[
2856 AC_MSG_WARN([Missing needed capabilities (libcap 2.09+) for netfilter mark support])
2857 AC_MSG_WARN([Linux netfilter marking support WILL NOT be enabled])
2858 with_netfilter_conntrack=no
2859 ])
2860 AC_MSG_NOTICE([Linux Netfilter Conntrack support enabled: ${with_netfilter_conntrack}])
2861
2862
2863 AC_ARG_ENABLE(zph-qos,
2864 AS_HELP_STRING([--disable-zph-qos],[Disable ZPH QOS support]), [
2865 SQUID_YESNO([$enableval],[--enable-zph-qos])
2866 ])
2867 SQUID_DEFINE_BOOL(USE_QOS_TOS,${enable_zph_qos:=yes},
2868 [Enable Zero Penalty Hit QOS. When set, Squid will alter the
2869 TOS field of HIT responses to help policing network traffic])
2870 AC_MSG_NOTICE([ZPH QOS enabled: $enable_zph_qos])
2871 AS_IF(test "x$enable_zph_qos" = "xyes"],[
2872 AC_MSG_NOTICE([QOS netfilter mark preservation enabled: $with_netfilter_conntrack])
2873 SQUID_DEFINE_BOOL(USE_LIBNETFILTERCONNTRACK,${with_netfilter_conntrack:=no},
2874 [Enable support for QOS netfilter mark preservation])
2875 ])
2876
2877 AC_CHECK_LIB(regex, regexec, [REGEXLIB="-lregex"],[REGEXLIB=''])
2878 AC_SUBST(REGEXLIB)
2879
2880 SQUID_DETECT_UDP_SND_BUFSIZE
2881 SQUID_DETECT_UDP_RECV_BUFSIZE
2882 SQUID_DETECT_TCP_SND_BUFSIZE
2883 SQUID_DETECT_TCP_RECV_BUFSIZE
2884
2885 SQUID_CHECK_NEED_SYS_ERRLIST
2886 SQUID_CHECK_MAXPATHLEN
2887
2888 SQUID_CHECK_LIBRESOLV_DNS_TTL_HACK
2889 SQUID_CHECK_RESOLVER_FIELDS
2890
2891 AC_CHECK_HEADERS(sys/statvfs.h)
2892 AS_IF([test "x$ac_cv_header_sys_statvfs_h" = "xyes"],[SQUID_CHECK_WORKING_STATVFS])
2893 AS_IF([test "x$ac_cv_func_statvfs" != "xyes"],[
2894 AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/vfs.h sys/statfs.h)
2895 AC_CHECK_FUNCS(statfs)
2896 SQUID_CHECK_F_FRSIZE_IN_STATFS
2897 ])
2898
2899 dnl Squid will not usually attempt to translate templates when building
2900 AC_ARG_ENABLE(translation,
2901 AS_HELP_STRING([--enable-translation],[Generate the localized error page templates and manuals.
2902 Which can also be downloaded from http://www.squid-cache.org/Versions/langpack/.]), [
2903 SQUID_YESNO([$enableval],[--enable-translation])
2904 ])
2905 AS_IF([test "x${enable_translation:=no}" = "xyes"],[
2906 AX_WITH_PROG([PO2HTML],[po2html])
2907 AX_WITH_PROG([PO2TEXT],[po2txt])
2908 ],[
2909 PO2HTML="off"
2910 PO2TEXT="off"
2911 ])
2912 AC_SUBST(PO2HTML)
2913 AC_SUBST(PO2TEXT)
2914 AM_CONDITIONAL(ENABLE_TRANSLATION, test "x${enable_translation:=no}" = "xyes")
2915
2916 dnl Squid now has limited locale handling ...
2917 dnl on error pages
2918 AC_ARG_ENABLE(auto-locale,
2919 AS_HELP_STRING([--disable-auto-locale],[This prevents Squid providing localized error pages based on the
2920 clients request headers.
2921 When disabled Squid requires explicit language configuration.]), [
2922 SQUID_YESNO([$enableval],[--enable-auto-locale])
2923 ])
2924 AC_MSG_NOTICE([Multi-Language support enabled: ${enable_auto_locale:=yes}])
2925 SQUID_DEFINE_BOOL(USE_ERR_LOCALES,$enable_auto_locale,
2926 [Use multi-language support on error pages])
2927
2928
2929 dnl Need the debugging version of malloc if available
2930 XTRA_OBJS=''
2931 AS_IF([test "x$ac_cv_lib_malloc_main" = "xyes"],[
2932 AS_IF([test -r /usr/lib/debug/malloc.o],[XTRA_OBJS="$XTRA_OBJS /usr/lib/debug/malloc.o"])
2933 AS_IF([test -r /usr/lib/debug/mallocmap.o],[XTRA_OBJS="$XTRA_OBJS /usr/lib/debug/mallocmap.o"]);
2934 ])
2935 AC_SUBST(XTRA_OBJS)
2936
2937 AS_IF([test "x$XTRA_LIBS" = "x"],[
2938 XTRA_LIBS="$LIBS"
2939 dnl minor cleanup
2940 XTRA_LIBS=`echo $XTRA_LIBS | sed -e "s/ */ /g"`
2941 LIBS=''
2942 ])
2943 AC_SUBST(XTRA_LIBS)
2944
2945 AC_SUBST(SQUID_CFLAGS)
2946 AC_SUBST(SQUID_CXXFLAGS)
2947
2948 # Prerequisite: CXXFLAGS have been finalized.
2949 AC_ARG_VAR([BUILDCXXFLAGS],[C++ compiler flags for building compile-time tools. e.g. cf_gen])
2950 AS_IF([test "x$BUILDCXXFLAGS" = "x"],[
2951 # if we are NOT cross-compiling, use the default build flags for cf_gen and friends
2952 # otherwise rely on the user-provided value
2953 AS_IF([test "x$squid_cv_check_marchnative" = "xyes"],[
2954 # always valid for the Build compiler.
2955 BUILDCXXFLAGS="-march=native"
2956 ])
2957 BUILDCXXFLAGS="$BUILDCXXFLAGS $CXXFLAGS"
2958 ])
2959 AC_SUBST(BUILDCXXFLAGS)
2960
2961 AC_MSG_NOTICE([BUILD LIBRARIES: $LIBS])
2962 AC_MSG_NOTICE([BUILD EXTRA LIBRARIES: $XTRA_LIBS])
2963 AC_MSG_NOTICE([BUILD OBJECTS: $OBJS])
2964 AC_MSG_NOTICE([BUILD EXTRA OBJECTS: $XTRA_OBJS])
2965 AC_MSG_NOTICE([BUILD C FLAGS: $CFLAGS])
2966 AC_MSG_NOTICE([BUILD EXTRA C FLAGS: $SQUID_CFLAGS])
2967 AC_MSG_NOTICE([BUILD C++ FLAGS: $CXXFLAGS])
2968 AC_MSG_NOTICE([BUILD EXTRA C++ FLAGS: $SQUID_CXXFLAGS])
2969 AC_MSG_NOTICE([BUILD Tools C++ FLAGS: $BUILDCXXFLAGS])
2970
2971 dnl Clean up after OSF/1 core dump bug
2972 rm -f core
2973
2974 AC_CONFIG_FILES([
2975 Makefile
2976 compat/Makefile
2977 contrib/Makefile
2978 doc/Makefile
2979 doc/manuals/Makefile
2980 doc/release-notes/Makefile
2981 errors/Makefile
2982 icons/Makefile
2983 lib/Makefile
2984 lib/libTrie/Makefile
2985 lib/libTrie/test/Makefile
2986 lib/ntlmauth/Makefile
2987 lib/rfcnb/Makefile
2988 lib/smblib/Makefile
2989 lib/snmplib/Makefile
2990 lib/sspi/Makefile
2991 scripts/Makefile
2992 src/Makefile
2993 src/acl/Makefile
2994 src/acl/external/Makefile
2995 src/acl/external/AD_group/Makefile
2996 src/acl/external/delayer/Makefile
2997 src/acl/external/eDirectory_userip/Makefile
2998 src/acl/external/file_userip/Makefile
2999 src/acl/external/kerberos_ldap_group/Makefile
3000 src/acl/external/kerberos_sid_group/Makefile
3001 src/acl/external/LDAP_group/Makefile
3002 src/acl/external/LM_group/Makefile
3003 src/acl/external/session/Makefile
3004 src/acl/external/SQL_session/Makefile
3005 src/acl/external/unix_group/Makefile
3006 src/acl/external/wbinfo_group/Makefile
3007 src/acl/external/time_quota/Makefile
3008 src/adaptation/Makefile
3009 src/adaptation/icap/Makefile
3010 src/adaptation/ecap/Makefile
3011 src/anyp/Makefile
3012 src/auth/Makefile
3013 src/auth/basic/Makefile
3014 src/auth/basic/DB/Makefile
3015 src/auth/basic/fake/Makefile
3016 src/auth/basic/getpwnam/Makefile
3017 src/auth/basic/LDAP/Makefile
3018 src/auth/basic/NCSA/Makefile
3019 src/auth/basic/NIS/Makefile
3020 src/auth/basic/PAM/Makefile
3021 src/auth/basic/POP3/Makefile
3022 src/auth/basic/RADIUS/Makefile
3023 src/auth/basic/SASL/Makefile
3024 src/auth/basic/SMB/Makefile
3025 src/auth/basic/SMB_LM/Makefile
3026 src/auth/basic/SSPI/Makefile
3027 src/auth/digest/Makefile
3028 src/auth/digest/eDirectory/Makefile
3029 src/auth/digest/file/Makefile
3030 src/auth/digest/LDAP/Makefile
3031 src/auth/negotiate/Makefile
3032 src/auth/negotiate/kerberos/Makefile
3033 src/auth/negotiate/SSPI/Makefile
3034 src/auth/negotiate/wrapper/Makefile
3035 src/auth/ntlm/Makefile
3036 src/auth/ntlm/fake/Makefile
3037 src/auth/ntlm/SMB_LM/Makefile
3038 src/auth/ntlm/SSPI/Makefile
3039 src/base/Makefile
3040 src/clients/Makefile
3041 src/comm/Makefile
3042 src/debug/Makefile
3043 src/dns/Makefile
3044 src/DiskIO/Makefile
3045 src/DiskIO/AIO/Makefile
3046 src/DiskIO/Blocking/Makefile
3047 src/DiskIO/DiskDaemon/Makefile
3048 src/DiskIO/DiskThreads/Makefile
3049 src/DiskIO/IpcIo/Makefile
3050 src/DiskIO/Mmapped/Makefile
3051 src/error/Makefile
3052 src/esi/Makefile
3053 src/eui/Makefile
3054 src/format/Makefile
3055 src/fs/Makefile
3056 src/ftp/Makefile
3057 src/helper/Makefile
3058 src/http/Makefile
3059 src/http/one/Makefile
3060 src/http/url_rewriters/Makefile
3061 src/http/url_rewriters/fake/Makefile
3062 src/http/url_rewriters/LFS/Makefile
3063 src/icmp/Makefile
3064 src/ident/Makefile
3065 src/ip/Makefile
3066 src/ipc/Makefile
3067 src/log/Makefile
3068 src/log/DB/Makefile
3069 src/log/file/Makefile
3070 src/mem/Makefile
3071 src/mgr/Makefile
3072 src/parser/Makefile
3073 src/proxyp/Makefile
3074 src/repl/Makefile
3075 src/sbuf/Makefile
3076 src/security/Makefile
3077 src/security/cert_generators/Makefile
3078 src/security/cert_generators/file/Makefile
3079 src/security/cert_validators/Makefile
3080 src/security/cert_validators/fake/Makefile
3081 src/servers/Makefile
3082 src/snmp/Makefile
3083 src/ssl/Makefile
3084 src/store/Makefile
3085 src/store/id_rewriters/Makefile
3086 src/store/id_rewriters/file/Makefile
3087 src/time/Makefile
3088 test-suite/Makefile
3089 tools/Makefile
3090 tools/apparmor/Makefile
3091 tools/helper-mux/Makefile
3092 tools/purge/Makefile
3093 tools/squidclient/Makefile
3094 tools/systemd/Makefile
3095 tools/sysvinit/Makefile
3096 ])
3097
3098 # must configure libltdl subdir unconditionally for "make distcheck" to work
3099 #AC_CONFIG_SUBDIRS(libltdl)
3100
3101 AC_OUTPUT