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