]> granicus.if.org Git - apache/blob - acinclude.m4
Merge the AP_OPENSSL_USE_ERRNO_THREADID check to trunk for wider testing
[apache] / acinclude.m4
1
2 dnl APACHE_HELP_STRING(LHS, RHS)
3 dnl Autoconf 2.50 can not handle substr correctly.  It does have 
4 dnl AC_HELP_STRING, so let's try to call it if we can.
5 dnl Note: this define must be on one line so that it can be properly returned
6 dnl as the help string.
7 AC_DEFUN([APACHE_HELP_STRING],[ifelse(regexp(AC_ACVERSION, 2\.1), -1, AC_HELP_STRING($1,$2),[  ]$1 substr([                       ],len($1))$2)])dnl
8
9 dnl APACHE_SUBST(VARIABLE)
10 dnl Makes VARIABLE available in generated files
11 dnl (do not use @variable@ in Makefiles, but $(variable))
12 AC_DEFUN([APACHE_SUBST],[
13   APACHE_VAR_SUBST="$APACHE_VAR_SUBST $1"
14   AC_SUBST($1)
15 ])
16
17 dnl APACHE_FAST_OUTPUT(FILENAME)
18 dnl Perform substitutions on FILENAME (Makefiles only)
19 AC_DEFUN([APACHE_FAST_OUTPUT],[
20   APACHE_FAST_OUTPUT_FILES="$APACHE_FAST_OUTPUT_FILES $1"
21 ])
22
23 dnl APACHE_GEN_CONFIG_VARS
24 dnl Creates config_vars.mk
25 AC_DEFUN([APACHE_GEN_CONFIG_VARS],[
26   APACHE_SUBST(HTTPD_VERSION)
27   APACHE_SUBST(HTTPD_MMN)
28   APACHE_SUBST(abs_srcdir)
29   APACHE_SUBST(bindir)
30   APACHE_SUBST(sbindir)
31   APACHE_SUBST(cgidir)
32   APACHE_SUBST(logfiledir)
33   APACHE_SUBST(exec_prefix)
34   APACHE_SUBST(datadir)
35   APACHE_SUBST(localstatedir)
36   APACHE_SUBST(mandir)
37   APACHE_SUBST(libdir)
38   APACHE_SUBST(libexecdir)
39   APACHE_SUBST(htdocsdir)
40   APACHE_SUBST(manualdir)
41   APACHE_SUBST(includedir)
42   APACHE_SUBST(errordir)
43   APACHE_SUBST(iconsdir)
44   APACHE_SUBST(sysconfdir)
45   APACHE_SUBST(installbuilddir)
46   APACHE_SUBST(runtimedir)
47   APACHE_SUBST(proxycachedir)
48   APACHE_SUBST(davlockdb)
49   APACHE_SUBST(other_targets)
50   APACHE_SUBST(progname)
51   APACHE_SUBST(prefix)
52   APACHE_SUBST(AWK)
53   APACHE_SUBST(CC)
54   APACHE_SUBST(CPP)
55   APACHE_SUBST(CXX)
56   APACHE_SUBST(CPPFLAGS)
57   APACHE_SUBST(CFLAGS)
58   APACHE_SUBST(CXXFLAGS)
59   APACHE_SUBST(CC_FOR_BUILD)
60   APACHE_SUBST(CFLAGS_FOR_BUILD)
61   APACHE_SUBST(LTFLAGS)
62   APACHE_SUBST(LDFLAGS)
63   APACHE_SUBST(LT_LDFLAGS)
64   APACHE_SUBST(SH_LDFLAGS)
65   APACHE_SUBST(HTTPD_LDFLAGS)
66   APACHE_SUBST(UTIL_LDFLAGS)
67   APACHE_SUBST(LIBS)
68   APACHE_SUBST(DEFS)
69   APACHE_SUBST(INCLUDES)
70   APACHE_SUBST(NOTEST_CPPFLAGS)
71   APACHE_SUBST(NOTEST_CFLAGS)
72   APACHE_SUBST(NOTEST_CXXFLAGS)
73   APACHE_SUBST(NOTEST_LDFLAGS)
74   APACHE_SUBST(NOTEST_LIBS)
75   APACHE_SUBST(EXTRA_CPPFLAGS)
76   APACHE_SUBST(EXTRA_CFLAGS)
77   APACHE_SUBST(EXTRA_CXXFLAGS)
78   APACHE_SUBST(EXTRA_LDFLAGS)
79   APACHE_SUBST(EXTRA_LIBS)
80   APACHE_SUBST(EXTRA_INCLUDES)
81   APACHE_SUBST(INTERNAL_CPPFLAGS)
82   APACHE_SUBST(LIBTOOL)
83   APACHE_SUBST(SHELL)
84   APACHE_SUBST(RSYNC)
85   APACHE_SUBST(MODULE_DIRS)
86   APACHE_SUBST(MODULE_CLEANDIRS)
87   APACHE_SUBST(PORT)
88   APACHE_SUBST(SSLPORT)
89   APACHE_SUBST(CORE_IMPLIB_FILE)
90   APACHE_SUBST(CORE_IMPLIB)
91   APACHE_SUBST(SH_LIBS)
92   APACHE_SUBST(SH_LIBTOOL)
93   APACHE_SUBST(MK_IMPLIB)
94   APACHE_SUBST(MKDEP)
95   APACHE_SUBST(INSTALL_PROG_FLAGS)
96   APACHE_SUBST(MPM_MODULES)
97   APACHE_SUBST(ENABLED_MPM_MODULE)
98   APACHE_SUBST(DSO_MODULES)
99   APACHE_SUBST(ENABLED_DSO_MODULES)
100   APACHE_SUBST(LOAD_ALL_MODULES)
101   APACHE_SUBST(APR_BINDIR)
102   APACHE_SUBST(APR_INCLUDEDIR)
103   APACHE_SUBST(APR_VERSION)
104   APACHE_SUBST(APR_CONFIG)
105   APACHE_SUBST(APU_BINDIR)
106   APACHE_SUBST(APU_INCLUDEDIR)
107   APACHE_SUBST(APU_VERSION)
108   APACHE_SUBST(APU_CONFIG)
109   APACHE_SUBST(APREQ_MAJOR_VERSION)
110   APACHE_SUBST(APREQ_LIBTOOL_VERSION)
111
112   abs_srcdir="`(cd $srcdir && pwd)`"
113
114   AC_MSG_NOTICE([creating config_vars.mk])
115   test -d build || $mkdir_p build
116   > build/config_vars.mk
117   for i in $APACHE_VAR_SUBST; do
118     eval echo "$i = \$$i" >> build/config_vars.mk
119   done
120 ])
121
122 dnl APACHE_GEN_MAKEFILES
123 dnl Creates Makefiles
124 AC_DEFUN([APACHE_GEN_MAKEFILES],[
125   $SHELL $srcdir/build/fastgen.sh $srcdir $ac_cv_mkdir_p $BSD_MAKEFILE $APACHE_FAST_OUTPUT_FILES
126 ])
127
128 dnl
129 dnl APACHE_TYPE_RLIM_T
130 dnl
131 dnl If rlim_t is not defined, define it to int
132 dnl
133 AC_DEFUN([APACHE_TYPE_RLIM_T], [
134   AC_CACHE_CHECK([for rlim_t], ac_cv_type_rlim_t, [
135     AC_TRY_COMPILE([
136 #include <sys/types.h>
137 #include <sys/time.h>
138 #include <sys/resource.h>
139 ], [rlim_t spoon;], [
140       ac_cv_type_rlim_t=yes
141     ],[ac_cv_type_rlim_t=no
142     ])
143   ])
144   if test "$ac_cv_type_rlim_t" = "no" ; then
145       AC_DEFINE(rlim_t, int,
146           [Define to 'int' if <sys/resource.h> doesn't define it for us])
147   fi
148 ])
149
150 dnl the list of build variables which are available for customization on a
151 dnl per module subdir basis (to be inserted into modules.mk with a "MOD_"
152 dnl prefix, i.e. MOD_CFLAGS etc.). Used in APACHE_MODPATH_{INIT,FINISH}.
153 define(mod_buildvars, [CFLAGS CXXFLAGS CPPFLAGS LDFLAGS LIBS INCLUDES])
154 dnl
155 dnl APACHE_MODPATH_INIT(modpath)
156 AC_DEFUN([APACHE_MODPATH_INIT],[
157   current_dir=$1
158   modpath_current=modules/$1
159   modpath_static=
160   modpath_shared=
161   for var in mod_buildvars; do
162     eval MOD_$var=
163   done
164   test -d $1 || $srcdir/build/mkdir.sh $modpath_current
165   > $modpath_current/modules.mk
166 ])dnl
167 dnl
168 AC_DEFUN([APACHE_MODPATH_FINISH],[
169   echo "DISTCLEAN_TARGETS = modules.mk" >> $modpath_current/modules.mk
170   echo "static = $modpath_static" >> $modpath_current/modules.mk
171   echo "shared = $modpath_shared" >> $modpath_current/modules.mk
172   for var in mod_buildvars; do
173     if eval val=\"\$MOD_$var\"; test -n "$val"; then
174       echo "MOD_$var = $val" >> $modpath_current/modules.mk
175     fi
176   done
177   if test ! -z "$modpath_static" -o ! -z "$modpath_shared"; then
178     MODULE_DIRS="$MODULE_DIRS $current_dir"
179   else
180     MODULE_CLEANDIRS="$MODULE_CLEANDIRS $current_dir"
181   fi
182   APACHE_FAST_OUTPUT($modpath_current/Makefile)
183 ])dnl
184 dnl
185 dnl APACHE_MODPATH_ADD(name[, shared[, objects [, ldflags[, libs]]]])
186 AC_DEFUN([APACHE_MODPATH_ADD],[
187   if test -z "$3"; then
188     objects="mod_$1.lo"
189   else
190     objects="$3"
191   fi
192
193   if test -z "$module_standalone"; then
194     if test -z "$2"; then
195       # The filename of a convenience library must have a "lib" prefix:
196       libname="libmod_$1.la"
197       BUILTIN_LIBS="$BUILTIN_LIBS $modpath_current/$libname"
198       modpath_static="$modpath_static $libname"
199       cat >>$modpath_current/modules.mk<<EOF
200 $libname: $objects
201         \$(MOD_LINK) $objects $5
202 EOF
203       if test ! -z "$5"; then
204         APR_ADDTO(AP_LIBS, [$5])
205       fi
206     else
207       apache_need_shared=yes
208       libname="mod_$1.la"
209       shobjects=`echo $objects | sed 's/\.lo/.slo/g'`
210       modpath_shared="$modpath_shared $libname"
211       cat >>$modpath_current/modules.mk<<EOF
212 $libname: $shobjects
213         \$(SH_LINK) -rpath \$(libexecdir) -module -avoid-version $4 $objects $5
214 EOF
215     fi
216   fi
217 ])dnl
218 dnl Same as APACHE_MODPATH_INIT/FINISH but for MPMs
219 dnl APACHE_MPMPATH_INIT(mpmpath)
220 AC_DEFUN([APACHE_MPMPATH_INIT],[
221   current_dir=$1
222   modpath_current=server/mpm/$1
223   modpath_static=
224   modpath_shared=
225   for var in mod_buildvars; do
226     eval MOD_$var=
227   done
228   test -d $1 || $srcdir/build/mkdir.sh $modpath_current
229   > $modpath_current/modules.mk
230 ])dnl
231 dnl
232 AC_DEFUN([APACHE_MPMPATH_FINISH],[
233   for var in mod_buildvars; do
234     if eval val=\"\$MOD_$var\"; test -n "$val"; then
235       echo "MOD_$var = $val" >> $modpath_current/modules.mk
236     fi
237   done
238 ])dnl
239
240 dnl
241 dnl APACHE_MPM_MODULE(name[, shared[, objects[, config[, path[, libs]]]]])
242 dnl
243 dnl Provide information for building the MPM.  (Enablement is handled using
244 dnl --with-mpm/--enable-mpms-shared.)
245 dnl
246 dnl name     -- name of MPM, same as MPM directory name
247 dnl shared   -- "shared" to indicate shared module build, empty string otherwise
248 dnl objects  -- one or more .lo files to link into the MPM module (default: mpmname.lo)
249 dnl config   -- configuration logic to run if the MPM is enabled
250 dnl path     -- relative path to MPM (default: server/mpm/mpmname)
251 dnl libs     -- libs needed by this MPM
252 dnl
253 AC_DEFUN([APACHE_MPM_MODULE],[
254     if ap_mpm_is_enabled $1; then
255         if test -z "$3"; then
256             objects="$1.lo"
257         else
258             objects="$3"
259         fi
260
261         if test -z "$5"; then
262             mpmpath="server/mpm/$1"
263         else
264             mpmpath=$5
265         fi
266
267         dnl VPATH support
268         test -d $mpmpath || $srcdir/build/mkdir.sh $mpmpath
269
270         APACHE_FAST_OUTPUT($mpmpath/Makefile)
271
272         if test -z "$2"; then
273             APR_ADDTO(AP_LIBS, [$6])
274             libname="lib$1.la"
275             cat >>$mpmpath/modules.mk<<EOF
276 $libname: $objects
277         \$(MOD_LINK) $objects
278 DISTCLEAN_TARGETS = modules.mk
279 static = $libname
280 shared =
281 EOF
282         else
283             apache_need_shared=yes
284             libname="mod_mpm_$1.la"
285             shobjects=`echo $objects | sed 's/\.lo/.slo/g'`
286             cat >>$mpmpath/modules.mk<<EOF
287 $libname: $shobjects
288         \$(SH_LINK) -rpath \$(libexecdir) -module -avoid-version $objects $6
289 DISTCLEAN_TARGETS = modules.mk
290 static =
291 shared = $libname
292 EOF
293             MPM_MODULES="$MPM_MODULES mpm_$1"
294             # add default MPM to LoadModule list
295             if test $1 = $default_mpm; then
296                 ENABLED_MPM_MODULE="mpm_$1"
297             fi
298         fi
299         $4
300     fi
301 ])dnl
302
303 dnl
304 dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config[, prereq_module]]]]])
305 dnl
306 dnl default is one of:
307 dnl   yes    -- enabled by default. user must explicitly disable.
308 dnl   no     -- disabled under default, most, all. user must explicitly enable.
309 dnl   most   -- disabled by default. enabled explicitly or with most or all.
310 dnl   static -- enabled as static by default, must be explicitly changed.
311 dnl   ""     -- disabled under default, most. enabled explicitly or with all.
312 dnl             XXX: The arg must really be empty here. Passing an empty shell
313 dnl             XXX: variable doesn't work for some reason. This should be
314 dnl             XXX: fixed.
315 dnl
316 dnl basically: yes/no is a hard setting. "most" means follow the "most"
317 dnl            setting. otherwise, fall under the "all" setting.
318 dnl            explicit yes/no always overrides, except if the user selects
319 dnl            "reallyall".
320 dnl
321 dnl prereq_module is a module (without the "mod_" prefix) that must be enabled
322 dnl   if the current module is enabled.  If the current module is built
323 dnl   statically, prereq_module must be built statically, too.  If these
324 dnl   conditions are not fulfilled, configure will abort if the current module
325 dnl   has been enabled explicitly. Otherwise, configure will disable the
326 dnl   current module.
327 dnl   prereq_module's APACHE_MODULE() statement must have been processed
328 dnl   before the current APACHE_MODULE() statement.
329 dnl
330 AC_DEFUN([APACHE_MODULE],[
331   AC_MSG_CHECKING(whether to enable mod_$1)
332   define([optname],[--]ifelse($5,yes,disable,enable)[-]translit($1,_,-))dnl
333   AC_ARG_ENABLE(translit($1,_,-),APACHE_HELP_STRING(optname(),$2),force_$1=$enableval,enable_$1=ifelse($5,,maybe-all,$5))
334   undefine([optname])dnl
335   _apmod_extra_msg=""
336   dnl If the module was not explicitly requested, allow it to disable itself if
337   dnl its pre-reqs fail.
338   case "$enable_$1" in
339     yes|static|shared)
340       _apmod_required="yes"
341       ;;
342     *)
343       _apmod_required="no"
344       ;;
345   esac
346   if test "$enable_$1" = "static" -o "$enable_$1" = "shared"; then
347     :
348   elif test "$enable_$1" = "yes"; then
349     enable_$1=$module_default
350   elif test "$enable_$1" = "few"; then
351     if test "$module_selection" = "few" -o "$module_selection" = "most" -o \
352             "$module_selection" = "all" -o "$module_selection" = "reallyall"
353     then
354       enable_$1=$module_default
355     else
356       enable_$1=no
357     fi
358     _apmod_extra_msg=" ($module_selection)"
359   elif test "$enable_$1" = "most"; then
360     if test "$module_selection" = "most" -o "$module_selection" = "all" -o \
361             "$module_selection" = "reallyall"
362     then
363       enable_$1=$module_default
364     else
365       enable_$1=no
366     fi
367     _apmod_extra_msg=" ($module_selection)"
368   elif test "$enable_$1" = "all" -o "$enable_$1" = "maybe-all"; then
369     if test "$module_selection" = "all" -o "$module_selection" = "reallyall"
370     then
371       enable_$1=$module_default
372       _apmod_extra_msg=" ($module_selection)"
373     else
374       enable_$1=no
375     fi
376   elif test "$enable_$1" = "reallyall" -o "$enable_$1" = "no" ; then
377     if test "$module_selection" = "reallyall" -a "$force_$1" != "no" ; then
378       enable_$1=$module_default
379       _apmod_extra_msg=" ($module_selection)"
380     else
381       enable_$1=no
382     fi
383   else
384     enable_$1=no
385   fi
386   if test "$enable_$1" != "no"; then
387     dnl If we plan to enable it, allow the module to run some autoconf magic
388     dnl that may disable it because of missing dependencies.
389     ifelse([$6$7],,:,
390            [AC_MSG_RESULT([checking dependencies])
391             ifelse([$7],,:,[m4_foreach([prereq],[$7],
392                            [if test "$enable_[]prereq" = "no" ; then
393                               enable_$1=no
394                               AC_MSG_WARN("mod_[]prereq is disabled but required for mod_$1")
395                             elif test "$enable_$1" = "static" && test "$enable_[]prereq" != "static" ; then
396                               enable_$1=$enable_[]prereq
397                               AC_MSG_WARN("building mod_$1 shared because mod_[]prereq is built shared")
398                             el])se])
399             ifelse([$6],,:,[  $6])
400             ifelse([$7],,:,[fi])
401             AC_MSG_CHECKING(whether to enable mod_$1)
402             if test "$enable_$1" = "no"; then
403               if test "$_apmod_required" = "no"; then
404                 _apmod_extra_msg=" (disabled)"
405               else
406                 AC_MSG_ERROR([mod_$1 has been requested but can not be built due to prerequisite failures])
407               fi
408             fi])
409   fi
410   AC_MSG_RESULT($enable_$1$_apmod_extra_msg)
411   if test "$enable_$1" != "no"; then
412     case "$enable_$1" in
413     static*)
414       MODLIST="$MODLIST ifelse($4,,$1,$4)"
415       if test "$1" = "so"; then
416           sharedobjs=yes
417       fi
418       shared="";;
419     *)
420       sharedobjs=yes
421       shared=yes
422       DSO_MODULES="$DSO_MODULES $1"
423       if test "$5" = "yes" ; then
424         ENABLED_DSO_MODULES="${ENABLED_DSO_MODULES},$1"
425       fi
426       ;;
427     esac
428     define([modprefix], [MOD_]translit($1, [a-z-], [A-Z_]))
429     APACHE_MODPATH_ADD($1, $shared, $3,, [\$(]modprefix[_LDADD)])
430     APACHE_SUBST(modprefix[_LDADD])
431     undefine([modprefix])
432   fi
433 ])dnl
434
435 dnl
436 dnl APACHE_ENABLE_MODULES
437 dnl
438 AC_DEFUN([APACHE_ENABLE_MODULES],[
439   module_selection=most
440   module_default=shared
441
442   dnl Check whether we have DSO support.
443   dnl If "yes", we build shared modules by default.
444   APR_CHECK_APR_DEFINE(APR_HAS_DSO)
445
446   if test $ac_cv_define_APR_HAS_DSO = "no"; then
447     AC_MSG_WARN([Missing DSO support - building static modules by default.])
448     module_default=static
449   fi
450
451
452   AC_ARG_ENABLE(modules,
453   APACHE_HELP_STRING(--enable-modules=MODULE-LIST,Space-separated list of modules to enable | "all" | "most" | "few" | "none" | "reallyall"),[
454     if test "$enableval" = "none"; then
455        module_default=no
456        module_selection=none
457     else
458       for i in $enableval; do
459         if test "$i" = "all" -o "$i" = "most" -o "$i" = "few" -o "$i" = "reallyall"
460         then
461           module_selection=$i
462         else
463           i=`echo $i | sed 's/-/_/g'`
464           eval "enable_$i=shared"
465         fi
466       done
467     fi
468   ])
469   
470   AC_ARG_ENABLE(mods-shared,
471   APACHE_HELP_STRING(--enable-mods-shared=MODULE-LIST,Space-separated list of shared modules to enable | "all" | "most" | "few" | "reallyall"),[
472     for i in $enableval; do
473       if test "$i" = "all" -o "$i" = "most" -o "$i" = "few" -o "$i" = "reallyall"
474       then
475         module_selection=$i
476         module_default=shared
477       else
478         i=`echo $i | sed 's/-/_/g'`
479         eval "enable_$i=shared"
480       fi
481     done
482   ])
483   
484   AC_ARG_ENABLE(mods-static,
485   APACHE_HELP_STRING(--enable-mods-static=MODULE-LIST,Space-separated list of static modules to enable | "all" | "most" | "few" | "reallyall"),[
486     for i in $enableval; do
487       if test "$i" = "all" -o "$i" = "most" -o "$i" = "few" -o "$i" = "reallyall"; then
488         module_selection=$i
489         module_default=static
490       else
491         i=`echo $i | sed 's/-/_/g'`
492         eval "enable_$i=static"
493       fi
494     done
495   ])
496 ])
497
498 AC_DEFUN([APACHE_REQUIRE_CXX],[
499   if test -z "$apache_cxx_done"; then
500     AC_PROG_CXX
501     AC_PROG_CXXCPP
502     apache_cxx_done=yes
503   fi
504 ])
505
506 dnl
507 dnl APACHE_CHECK_OPENSSL
508 dnl
509 dnl Configure for OpenSSL, giving preference to
510 dnl "--with-ssl=<path>" if it was specified.
511 dnl
512 AC_DEFUN([APACHE_CHECK_OPENSSL],[
513   AC_CACHE_CHECK([for OpenSSL], [ac_cv_openssl], [
514     dnl initialise the variables we use
515     ac_cv_openssl=no
516     ap_openssl_found=""
517     ap_openssl_base=""
518     ap_openssl_libs=""
519     ap_openssl_mod_cflags=""
520     ap_openssl_mod_ldflags=""
521
522     dnl Determine the OpenSSL base directory, if any
523     AC_MSG_CHECKING([for user-provided OpenSSL base directory])
524     AC_ARG_WITH(ssl, APACHE_HELP_STRING(--with-ssl=PATH,OpenSSL installation directory), [
525       dnl If --with-ssl specifies a directory, we use that directory
526       if test "x$withval" != "xyes" -a "x$withval" != "x"; then
527         dnl This ensures $withval is actually a directory and that it is absolute
528         ap_openssl_base="`cd $withval ; pwd`"
529       fi
530     ])
531     if test "x$ap_openssl_base" = "x"; then
532       AC_MSG_RESULT(none)
533     else
534       AC_MSG_RESULT($ap_openssl_base)
535     fi
536
537     dnl Run header and version checks
538     saved_CPPFLAGS="$CPPFLAGS"
539     saved_LIBS="$LIBS"
540     saved_LDFLAGS="$LDFLAGS"
541
542     dnl Before doing anything else, load in pkg-config variables
543     if test -n "$PKGCONFIG"; then
544       saved_PKG_CONFIG_PATH="$PKG_CONFIG_PATH"
545       if test "x$ap_openssl_base" != "x" -a \
546               -f "${ap_openssl_base}/lib/pkgconfig/openssl.pc"; then
547         dnl Ensure that the given path is used by pkg-config too, otherwise
548         dnl the system openssl.pc might be picked up instead.
549         PKG_CONFIG_PATH="${ap_openssl_base}/lib/pkgconfig${PKG_CONFIG_PATH+:}${PKG_CONFIG_PATH}"
550         export PKG_CONFIG_PATH
551       fi
552       AC_ARG_ENABLE(ssl-staticlib-deps,APACHE_HELP_STRING(--enable-ssl-staticlib-deps,[link mod_ssl with dependencies of OpenSSL's static libraries (as indicated by "pkg-config --static"). Must be specified in addition to --enable-ssl.]), [
553         if test "$enableval" = "yes"; then
554           PKGCONFIG_LIBOPTS="--static"
555         fi
556       ])
557       ap_openssl_libs="`$PKGCONFIG $PKGCONFIG_LIBOPTS --libs-only-l --silence-errors openssl`"
558       if test $? -eq 0; then
559         ap_openssl_found="yes"
560         pkglookup="`$PKGCONFIG --cflags-only-I openssl`"
561         APR_ADDTO(CPPFLAGS, [$pkglookup])
562         APR_ADDTO(MOD_CFLAGS, [$pkglookup])
563         APR_ADDTO(ab_CFLAGS, [$pkglookup])
564         pkglookup="`$PKGCONFIG $PKGCONFIG_LIBOPTS --libs-only-L openssl`"
565         APR_ADDTO(LDFLAGS, [$pkglookup])
566         APR_ADDTO(MOD_LDFLAGS, [$pkglookup])
567         pkglookup="`$PKGCONFIG $PKGCONFIG_LIBOPTS --libs-only-other openssl`"
568         APR_ADDTO(LDFLAGS, [$pkglookup])
569         APR_ADDTO(MOD_LDFLAGS, [$pkglookup])
570       fi
571       PKG_CONFIG_PATH="$saved_PKG_CONFIG_PATH"
572     fi
573
574     dnl fall back to the user-supplied directory if not found via pkg-config
575     if test "x$ap_openssl_base" != "x" -a "x$ap_openssl_found" = "x"; then
576       APR_ADDTO(CPPFLAGS, [-I$ap_openssl_base/include])
577       APR_ADDTO(MOD_CFLAGS, [-I$ap_openssl_base/include])
578       APR_ADDTO(ab_CFLAGS, [-I$ap_openssl_base/include])
579       APR_ADDTO(LDFLAGS, [-L$ap_openssl_base/lib])
580       APR_ADDTO(MOD_LDFLAGS, [-L$ap_openssl_base/lib])
581       if test "x$ap_platform_runtime_link_flag" != "x"; then
582         APR_ADDTO(LDFLAGS, [$ap_platform_runtime_link_flag$ap_openssl_base/lib])
583         APR_ADDTO(MOD_LDFLAGS, [$ap_platform_runtime_link_flag$ap_openssl_base/lib])
584       fi
585     fi
586
587     AC_MSG_CHECKING([for OpenSSL version >= 0.9.8a])
588     AC_TRY_COMPILE([#include <openssl/opensslv.h>],[
589 #if !defined(OPENSSL_VERSION_NUMBER)
590 #error "Missing OpenSSL version"
591 #endif
592 #if OPENSSL_VERSION_NUMBER < 0x0090801f
593 #error "Unsupported OpenSSL version " OPENSSL_VERSION_TEXT
594 #endif],
595       [AC_MSG_RESULT(OK)
596        ac_cv_openssl=yes],
597       [AC_MSG_RESULT(FAILED)])
598
599     if test "x$ac_cv_openssl" = "xyes"; then
600       ap_openssl_libs="${ap_openssl_libs:--lssl -lcrypto} `$apr_config --libs`"
601       APR_ADDTO(MOD_LDFLAGS, [$ap_openssl_libs])
602       APR_ADDTO(LIBS, [$ap_openssl_libs])
603       APR_SETVAR(ab_LDFLAGS, [$MOD_LDFLAGS])
604       APACHE_SUBST(ab_CFLAGS)
605       APACHE_SUBST(ab_LDFLAGS)
606
607       dnl Run library and function checks
608       liberrors=""
609       AC_CHECK_HEADERS([openssl/engine.h])
610       AC_CHECK_FUNCS([SSL_CTX_new], [], [liberrors="yes"])
611       AC_CHECK_FUNCS([ENGINE_init ENGINE_load_builtin_engines RAND_egd])
612       if test "x$liberrors" != "x"; then
613         AC_MSG_WARN([OpenSSL libraries are unusable])
614       fi
615     else
616       AC_MSG_WARN([OpenSSL version is too old])
617     fi
618
619     dnl restore
620     CPPFLAGS="$saved_CPPFLAGS"
621     LIBS="$saved_LIBS"
622     LDFLAGS="$saved_LDFLAGS"
623
624     dnl cache MOD_LDFLAGS, MOD_CFLAGS
625     ap_openssl_mod_cflags=$MOD_CFLAGS
626     ap_openssl_mod_ldflags=$MOD_LDFLAGS
627   ])
628   if test "x$ac_cv_openssl" = "xyes"; then
629     AC_DEFINE(HAVE_OPENSSL, 1, [Define if OpenSSL is available])
630     APR_ADDTO(MOD_LDFLAGS, [$ap_openssl_mod_ldflags])
631     APR_ADDTO(MOD_CFLAGS, [$ap_openssl_mod_cflags])
632   fi
633
634   dnl On most platforms, the default multithreading logic in OpenSSL 1.0.x uses
635   dnl a threadid that is based on the address of errno. We need to double-check
636   dnl that &errno is, in fact, different for each thread before using that
637   dnl default.
638   AC_CACHE_CHECK([if OpenSSL can use &errno as a THREADID],
639                  [ac_cv_openssl_use_errno_threadid], [
640     ac_cv_openssl_use_errno_threadid=no
641
642     save_CFLAGS=$CFLAGS
643     save_LIBS=$LIBS
644
645     CFLAGS=`$apr_config --cflags --cppflags --includes`
646     LIBS=`$apr_config --link-ld`
647
648     AC_RUN_IFELSE([
649       AC_LANG_PROGRAM([[
650           #include <stdlib.h>
651
652           #include "apr_pools.h"
653           #include "apr_thread_cond.h"
654           #include "apr_thread_proc.h"
655
656           #define NUM_THREADS 3
657
658           struct thread_data {
659               apr_thread_mutex_t *mutex;
660               apr_thread_cond_t  *cv;
661               int                *init_count;
662               void               *errno_addr;
663           };
664
665           /**
666            * Thread entry point. Waits for all the threads to be started, then
667            * records the address of errno into the thread_data.
668            */
669           void * APR_THREAD_FUNC tmain(apr_thread_t *thread, void *data)
670           {
671               struct thread_data *tdata = data;
672
673               /* The only point of this barrier is to make sure that all threads
674                * are started before we record &errno, hopefully preventing any
675                * false negatives in case a platform "recycles" threads. */
676               apr_thread_mutex_lock(tdata->mutex);
677               ++(*tdata->init_count);
678
679               if (*tdata->init_count == NUM_THREADS) {
680                   apr_thread_cond_broadcast(tdata->cv);
681               } else {
682                   while (*tdata->init_count != NUM_THREADS) {
683                       apr_thread_cond_wait(tdata->cv, tdata->mutex);
684                   }
685               }
686               apr_thread_mutex_unlock(tdata->mutex);
687
688               tdata->errno_addr = &errno;
689               return NULL;
690           }
691       ]], [[
692           int ret = 0;
693           apr_status_t status;
694           int i;
695
696           apr_pool_t         *pool;
697           apr_thread_mutex_t *mutex;
698           apr_thread_cond_t  *cv;
699           int                init_count = 0;
700
701           struct thread_data tdata[NUM_THREADS] = { 0 };
702           apr_thread_t *threads[NUM_THREADS] = { 0 };
703
704           if (apr_initialize() != APR_SUCCESS) {
705               exit(1);
706           }
707
708           /* Set up the shared APR primitives. */
709           if ((apr_pool_create(&pool, NULL) != APR_SUCCESS)
710               || (apr_thread_mutex_create(&mutex, 0, pool) != APR_SUCCESS)
711               || (apr_thread_cond_create(&cv, pool) != APR_SUCCESS)) {
712               ret = 2;
713               goto out;
714           }
715
716           /* Start every thread. */
717           for (i = 0; i < NUM_THREADS; ++i) {
718               tdata[i].mutex = mutex;
719               tdata[i].cv = cv;
720               tdata[i].init_count = &init_count;
721
722               status = apr_thread_create(&threads[i], NULL, tmain, &tdata[i],
723                                          pool);
724               if (status != APR_SUCCESS) {
725                   ret = 3;
726                   goto out;
727               }
728           }
729
730           /* Wait for them to finish (they'll record and exit after every one
731            * has been started). */
732           for (i = 0; i < NUM_THREADS; ++i) {
733               apr_thread_join(&status, threads[i]);
734               if (status != APR_SUCCESS) {
735                   ret = 4;
736                   goto out;
737               }
738           }
739
740           /* Check that no addresses were duplicated. */
741           if ((tdata[0].errno_addr == tdata[1].errno_addr)
742               || (tdata[1].errno_addr == tdata[2].errno_addr)
743               || (tdata[0].errno_addr == tdata[2].errno_addr)) {
744               ret = 5;
745           }
746
747       out:
748           apr_terminate();
749           exit(ret);
750       ]])
751     ], [
752       ac_cv_openssl_use_errno_threadid=yes
753     ], [
754       ac_cv_openssl_use_errno_threadid=no
755     ], [
756       dnl Assume the worst when cross-compiling; users can override via either
757       dnl cachevars or the config header if necessary.
758       ac_cv_openssl_use_errno_threadid=no
759     ])
760
761     CFLAGS=$save_CFLAGS
762     LIBS=$save_LIBS
763   ])
764   if test "x$ac_cv_openssl_use_errno_threadid" = "xyes"; then
765     AC_DEFINE(AP_OPENSSL_USE_ERRNO_THREADID, 1,
766               [Define if OpenSSL can use an errno-based threadid callback on this platform])
767   fi
768 ])
769
770 dnl
771 dnl APACHE_CHECK_SERF
772 dnl
773 dnl Configure for the detected libserf, giving preference to
774 dnl "--with-serf=<path>" if it was specified.
775 dnl
776 AC_DEFUN([APACHE_CHECK_SERF], [
777   AC_CACHE_CHECK([for libserf], [ac_cv_serf], [
778     ac_cv_serf=no
779     serf_prefix=/usr
780     SERF_LIBS=""
781     AC_ARG_WITH(serf, APACHE_HELP_STRING([--with-serf=PATH],
782                                     [Serf client library]),
783     [
784         if test "$withval" = "yes" ; then
785           serf_prefix=/usr
786         else
787           serf_prefix=$withval
788         fi
789     ])
790
791     if test "$serf_prefix" != "no" ; then
792       save_cppflags="$CPPFLAGS"
793       CPPFLAGS="$CPPFLAGS $APR_INCLUDES $APU_INCLUDES -I$serf_prefix/include/serf-0"
794       AC_CHECK_HEADERS(serf.h,[
795         save_ldflags="$LDFLAGS"
796         LDFLAGS="$LDFLAGS -L$serf_prefix/lib"
797         AC_CHECK_LIB(serf-0, serf_context_create,[ac_cv_serf="yes"])
798         LDFLAGS="$save_ldflags"])
799       CPPFLAGS="$save_cppflags"
800     fi
801   ])
802
803   APACHE_SUBST(SERF_LIBS)
804   if test "$ac_cv_serf" = "yes"; then
805     AC_DEFINE(HAVE_SERF, 1, [Define if libserf is available])
806     APR_SETVAR(SERF_LIBS, [-L$serf_prefix/lib -lserf-0])
807     APR_ADDTO(MOD_INCLUDES, [-I$serf_prefix/include/serf-0])
808   fi
809 ])
810
811 AC_DEFUN([APACHE_CHECK_SYSTEMD], [
812 dnl Check for systemd support for listen.c's socket activation.
813 case $host in
814 *-linux-*)
815    if test -n "$PKGCONFIG" && $PKGCONFIG --exists libsystemd; then
816       SYSTEMD_LIBS=`$PKGCONFIG --libs libsystemd`
817    elif test -n "$PKGCONFIG" && $PKGCONFIG --exists libsystemd-daemon; then
818       SYSTEMD_LIBS=`$PKGCONFIG --libs libsystemd-daemon`
819    else
820       AC_CHECK_LIB(systemd-daemon, sd_notify, SYSTEMD_LIBS="-lsystemd-daemon")
821    fi
822    if test -n "$SYSTEMD_LIBS"; then
823       AC_CHECK_HEADERS(systemd/sd-daemon.h)
824       if test "${ac_cv_header_systemd_sd_daemon_h}" = "no" || test -z "${SYSTEMD_LIBS}"; then
825         AC_MSG_WARN([Your system does not support systemd.])
826       else
827         APR_ADDTO(HTTPD_LIBS, [$SYSTEMD_LIBS])
828         AC_DEFINE(HAVE_SYSTEMD, 1, [Define if systemd is supported])
829       fi
830    fi
831    ;;
832 esac
833 ])
834
835 dnl
836 dnl APACHE_EXPORT_ARGUMENTS
837 dnl Export (via APACHE_SUBST) the various path-related variables that
838 dnl apache will use while generating scripts like autoconf and apxs and
839 dnl the default config file.
840
841 AC_DEFUN([APACHE_SUBST_EXPANDED_ARG],[
842   APR_EXPAND_VAR(exp_$1, [$]$1)
843   APACHE_SUBST(exp_$1)
844   APR_PATH_RELATIVE(rel_$1, [$]exp_$1, ${prefix})
845   APACHE_SUBST(rel_$1)
846 ])
847
848 AC_DEFUN([APACHE_EXPORT_ARGUMENTS],[
849   APACHE_SUBST_EXPANDED_ARG(exec_prefix)
850   APACHE_SUBST_EXPANDED_ARG(bindir)
851   APACHE_SUBST_EXPANDED_ARG(sbindir)
852   APACHE_SUBST_EXPANDED_ARG(libdir)
853   APACHE_SUBST_EXPANDED_ARG(libexecdir)
854   APACHE_SUBST_EXPANDED_ARG(mandir)
855   APACHE_SUBST_EXPANDED_ARG(sysconfdir)
856   APACHE_SUBST_EXPANDED_ARG(datadir)
857   APACHE_SUBST_EXPANDED_ARG(installbuilddir)
858   APACHE_SUBST_EXPANDED_ARG(errordir)
859   APACHE_SUBST_EXPANDED_ARG(iconsdir)
860   APACHE_SUBST_EXPANDED_ARG(htdocsdir)
861   APACHE_SUBST_EXPANDED_ARG(manualdir)
862   APACHE_SUBST_EXPANDED_ARG(cgidir)
863   APACHE_SUBST_EXPANDED_ARG(includedir)
864   APACHE_SUBST_EXPANDED_ARG(localstatedir)
865   APACHE_SUBST_EXPANDED_ARG(runtimedir)
866   APACHE_SUBST_EXPANDED_ARG(logfiledir)
867   APACHE_SUBST_EXPANDED_ARG(proxycachedir)
868   APACHE_SUBST_EXPANDED_ARG(davlockdb)
869 ])
870
871 dnl 
872 dnl APACHE_CHECK_APxVER({apr|apu}, major, minor, 
873 dnl                     [actions-if-ok], [actions-if-not-ok])
874 dnl
875 dnl Checks for APR or APR-util of given major/minor version or later; 
876 dnl if so, runs actions-if-ok; otherwise runs actions-if-not-ok if given.
877 dnl If the version is not satisfactory and actions-if-not-ok is not
878 dnl given, then an error is printed and the configure script is aborted.
879 dnl
880 dnl The first argument must be [apr] or [apu].
881 dnl
882 AC_DEFUN([APACHE_CHECK_APxVER], [
883 define(ap_ckver_major, translit($1, [apru], [APRU])[_MAJOR_VERSION])
884 define(ap_ckver_minor, translit($1, [apru], [APRU])[_MINOR_VERSION])
885 define(ap_ckver_cvar, [ap_cv_$1ver$2$3])
886 define(ap_ckver_name, ifelse([$1],[apr],[APR],[APR-util]))
887
888 ap_ckver_CPPFLAGS="$CPPFLAGS"
889 CPPFLAGS="$CPPFLAGS `$[$1]_config --includes`"
890
891 AC_CACHE_CHECK([for ap_ckver_name version $2.$3.0 or later], ap_ckver_cvar, [
892 AC_EGREP_CPP([good], [
893 #include <$1_version.h>
894 #if ]ap_ckver_major[ > $2 || (]ap_ckver_major[ == $2 && ]ap_ckver_minor[ >= $3)
895 good
896 #endif
897 ], [ap_ckver_cvar=yes], [ap_ckver_cvar=no])])
898
899 if test "$ap_ckver_cvar" = "yes"; then
900   ifelse([$4],[],[:],[$4])
901 else
902   ifelse([$5],[],[AC_MSG_ERROR([ap_ckver_name version $2.$3.0 or later is required])], [$5])
903 fi
904
905 CPPFLAGS="$ap_ckver_CPPFLAGS"
906
907 undefine([ap_ckver_major])
908 undefine([ap_ckver_minor])
909 undefine([ap_ckver_cvar])
910 undefine([ap_ckver_name])
911 ])
912
913 dnl
914 dnl APACHE_CHECK_VOID_PTR_LEN
915 dnl
916 dnl Checks if the size of a void pointer is at least as big as a "long" 
917 dnl integer type.
918 dnl
919 AC_DEFUN([APACHE_CHECK_VOID_PTR_LEN], [
920
921 AC_CACHE_CHECK([for void pointer length], [ap_cv_void_ptr_lt_long],
922 [AC_TRY_RUN([
923 int main(void)
924 {
925     return sizeof(void *) < sizeof(long); 
926 }], [ap_cv_void_ptr_lt_long=no], [ap_cv_void_ptr_lt_long=yes], 
927     [ap_cv_void_ptr_lt_long="cross compile - not checked"])])
928
929 if test "$ap_cv_void_ptr_lt_long" = "yes"; then
930     AC_MSG_ERROR([Size of "void *" is less than size of "long"])
931 fi
932 ])
933
934 dnl
935 dnl APACHE_CHECK_APR_HAS_LDAP
936 dnl
937 dnl Check if APR_HAS_LDAP is 1
938 dnl Unfortunately, we can't use APR_CHECK_APR_DEFINE (because it only includes apr.h)
939 dnl or APR_CHECK_DEFINE (because it only checks for defined'ness and not for 0/1).
940 dnl
941 AC_DEFUN([APACHE_CHECK_APR_HAS_LDAP], [
942   AC_CACHE_CHECK([for ldap support in apr/apr-util],ac_cv_APR_HAS_LDAP,[
943     apache_old_cppflags="$CPPFLAGS"
944     CPPFLAGS="$CPPFLAGS $INCLUDES"
945     AC_EGREP_CPP(YES_IS_DEFINED, [
946 #include <apr_ldap.h>
947 #if APR_HAS_LDAP
948 YES_IS_DEFINED
949 #endif
950     ], ac_cv_APR_HAS_LDAP=yes, ac_cv_APR_HAS_LDAP=no)
951     CPPFLAGS="$apache_old_cppflags"
952   ])
953 ])
954
955 dnl
956 dnl APACHE_ADD_GCC_CFLAGS
957 dnl
958 dnl Check if compiler is gcc and supports flag. If yes, add to CFLAGS.
959 dnl
960 AC_DEFUN([APACHE_ADD_GCC_CFLAG], [
961   define([ap_gcc_ckvar], [ac_cv_gcc_]translit($1, [-:.=], [____]))
962   if test "$GCC" = "yes"; then
963     AC_CACHE_CHECK([whether gcc accepts $1], ap_gcc_ckvar, [
964       save_CFLAGS="$CFLAGS"
965       CFLAGS="$CFLAGS $1"
966       AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
967         [ap_gcc_ckvar=yes], [ap_gcc_ckvar=no])
968       CFLAGS="$save_CFLAGS"
969     ])
970     if test "$]ap_gcc_ckvar[" = "yes" ; then
971        APR_ADDTO(CFLAGS,[$1])
972     fi
973   fi
974   undefine([ap_gcc_ckvar])
975 ])