]> granicus.if.org Git - apache/blob - acinclude.m4
PR60947: avoid CRYPTO_THREADID_set_callback() if possible
[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                       CRYPTO_set_id_callback])
613       if test "x$liberrors" != "x"; then
614         AC_MSG_WARN([OpenSSL libraries are unusable])
615       fi
616     else
617       AC_MSG_WARN([OpenSSL version is too old])
618     fi
619
620     dnl restore
621     CPPFLAGS="$saved_CPPFLAGS"
622     LIBS="$saved_LIBS"
623     LDFLAGS="$saved_LDFLAGS"
624
625     dnl cache MOD_LDFLAGS, MOD_CFLAGS
626     ap_openssl_mod_cflags=$MOD_CFLAGS
627     ap_openssl_mod_ldflags=$MOD_LDFLAGS
628   ])
629   if test "x$ac_cv_openssl" = "xyes"; then
630     AC_DEFINE(HAVE_OPENSSL, 1, [Define if OpenSSL is available])
631     APR_ADDTO(MOD_LDFLAGS, [$ap_openssl_mod_ldflags])
632     APR_ADDTO(MOD_CFLAGS, [$ap_openssl_mod_cflags])
633   fi
634
635   dnl On most platforms, the default multithreading logic in OpenSSL 1.0.x uses
636   dnl a threadid that is based on the address of errno. We need to double-check
637   dnl that &errno is, in fact, different for each thread before using that
638   dnl default.
639   AC_CACHE_CHECK([if OpenSSL can use &errno as a THREADID],
640                  [ac_cv_openssl_use_errno_threadid], [
641     ac_cv_openssl_use_errno_threadid=no
642
643     save_CFLAGS=$CFLAGS
644     save_LIBS=$LIBS
645
646     CFLAGS=`$apr_config --cflags --cppflags --includes`
647     LIBS=`$apr_config --link-ld`
648
649     AC_RUN_IFELSE([
650       AC_LANG_PROGRAM([[
651           #include <stdlib.h>
652
653           #include "apr_pools.h"
654           #include "apr_thread_cond.h"
655           #include "apr_thread_proc.h"
656
657           #define NUM_THREADS 10
658
659           struct thread_data {
660               apr_thread_mutex_t *mutex;
661               apr_thread_cond_t  *cv;
662               int                *init_count;
663               void               *errno_addr;
664           };
665
666           /**
667            * Thread entry point. Waits for all the threads to be started, then
668            * records the address of errno into the thread_data.
669            */
670           void * APR_THREAD_FUNC tmain(apr_thread_t *thread, void *data)
671           {
672               struct thread_data *tdata = data;
673
674               /* The only point of this barrier is to make sure that all threads
675                * are started before we record &errno, hopefully preventing any
676                * false negatives in case a platform "recycles" threads. */
677               apr_thread_mutex_lock(tdata->mutex);
678               ++(*tdata->init_count);
679
680               if (*tdata->init_count == NUM_THREADS) {
681                   apr_thread_cond_broadcast(tdata->cv);
682               } else {
683                   while (*tdata->init_count != NUM_THREADS) {
684                       apr_thread_cond_wait(tdata->cv, tdata->mutex);
685                   }
686               }
687               apr_thread_mutex_unlock(tdata->mutex);
688
689               tdata->errno_addr = &errno;
690               return NULL;
691           }
692       ]], [[
693           int ret = 0;
694           apr_status_t status;
695           int i;
696           int j;
697
698           apr_pool_t         *pool;
699           apr_thread_mutex_t *mutex;
700           apr_thread_cond_t  *cv;
701           int                init_count = 0;
702
703           struct thread_data tdata[NUM_THREADS] = { 0 };
704           apr_thread_t *threads[NUM_THREADS] = { 0 };
705
706           if (apr_initialize() != APR_SUCCESS) {
707               exit(1);
708           }
709
710           /* Set up the shared APR primitives. */
711           if ((apr_pool_create(&pool, NULL) != APR_SUCCESS)
712               || (apr_thread_mutex_create(&mutex, 0, pool) != APR_SUCCESS)
713               || (apr_thread_cond_create(&cv, pool) != APR_SUCCESS)) {
714               ret = 2;
715               goto out;
716           }
717
718           /* Start every thread. */
719           for (i = 0; i < NUM_THREADS; ++i) {
720               tdata[i].mutex = mutex;
721               tdata[i].cv = cv;
722               tdata[i].init_count = &init_count;
723
724               status = apr_thread_create(&threads[i], NULL, tmain, &tdata[i],
725                                          pool);
726               if (status != APR_SUCCESS) {
727                   ret = 3;
728                   goto out;
729               }
730           }
731
732           /* Wait for them to finish (they'll record and exit after every one
733            * has been started). */
734           for (i = 0; i < NUM_THREADS; ++i) {
735               apr_thread_join(&status, threads[i]);
736               if (status != APR_SUCCESS) {
737                   ret = 4;
738                   goto out;
739               }
740           }
741
742           /* Check that no addresses were duplicated. */
743           for (i = 0; i < NUM_THREADS - 1; ++i) {
744               for (j = i + 1; j < NUM_THREADS; ++j) {
745                   if (tdata[i].errno_addr == tdata[j].errno_addr) {
746                       ret = 5;
747                       goto out;
748                   }
749               }
750           }
751
752       out:
753           apr_terminate();
754           exit(ret);
755       ]])
756     ], [
757       ac_cv_openssl_use_errno_threadid=yes
758     ], [
759       ac_cv_openssl_use_errno_threadid=no
760     ], [
761       dnl Assume the worst when cross-compiling; users can override via either
762       dnl cachevars or the config header if necessary.
763       ac_cv_openssl_use_errno_threadid=no
764     ])
765
766     CFLAGS=$save_CFLAGS
767     LIBS=$save_LIBS
768   ])
769   if test "x$ac_cv_openssl_use_errno_threadid" = "xyes"; then
770     AC_DEFINE(AP_OPENSSL_USE_ERRNO_THREADID, 1,
771               [Define if OpenSSL can use an errno-based threadid callback on this platform])
772   fi
773 ])
774
775 dnl
776 dnl APACHE_CHECK_SERF
777 dnl
778 dnl Configure for the detected libserf, giving preference to
779 dnl "--with-serf=<path>" if it was specified.
780 dnl
781 AC_DEFUN([APACHE_CHECK_SERF], [
782   AC_CACHE_CHECK([for libserf], [ac_cv_serf], [
783     ac_cv_serf=no
784     serf_prefix=/usr
785     SERF_LIBS=""
786     AC_ARG_WITH(serf, APACHE_HELP_STRING([--with-serf=PATH],
787                                     [Serf client library]),
788     [
789         if test "$withval" = "yes" ; then
790           serf_prefix=/usr
791         else
792           serf_prefix=$withval
793         fi
794     ])
795
796     if test "$serf_prefix" != "no" ; then
797       save_cppflags="$CPPFLAGS"
798       CPPFLAGS="$CPPFLAGS $APR_INCLUDES $APU_INCLUDES -I$serf_prefix/include/serf-0"
799       AC_CHECK_HEADERS(serf.h,[
800         save_ldflags="$LDFLAGS"
801         LDFLAGS="$LDFLAGS -L$serf_prefix/lib"
802         AC_CHECK_LIB(serf-0, serf_context_create,[ac_cv_serf="yes"])
803         LDFLAGS="$save_ldflags"])
804       CPPFLAGS="$save_cppflags"
805     fi
806   ])
807
808   APACHE_SUBST(SERF_LIBS)
809   if test "$ac_cv_serf" = "yes"; then
810     AC_DEFINE(HAVE_SERF, 1, [Define if libserf is available])
811     APR_SETVAR(SERF_LIBS, [-L$serf_prefix/lib -lserf-0])
812     APR_ADDTO(MOD_INCLUDES, [-I$serf_prefix/include/serf-0])
813   fi
814 ])
815
816 AC_DEFUN([APACHE_CHECK_SYSTEMD], [
817 dnl Check for systemd support for listen.c's socket activation.
818 case $host in
819 *-linux-*)
820    if test -n "$PKGCONFIG" && $PKGCONFIG --exists libsystemd; then
821       SYSTEMD_LIBS=`$PKGCONFIG --libs libsystemd`
822    elif test -n "$PKGCONFIG" && $PKGCONFIG --exists libsystemd-daemon; then
823       SYSTEMD_LIBS=`$PKGCONFIG --libs libsystemd-daemon`
824    else
825       AC_CHECK_LIB(systemd-daemon, sd_notify, SYSTEMD_LIBS="-lsystemd-daemon")
826    fi
827    if test -n "$SYSTEMD_LIBS"; then
828       AC_CHECK_HEADERS(systemd/sd-daemon.h)
829       if test "${ac_cv_header_systemd_sd_daemon_h}" = "no" || test -z "${SYSTEMD_LIBS}"; then
830         AC_MSG_WARN([Your system does not support systemd.])
831       else
832         APR_ADDTO(HTTPD_LIBS, [$SYSTEMD_LIBS])
833         AC_DEFINE(HAVE_SYSTEMD, 1, [Define if systemd is supported])
834       fi
835    fi
836    ;;
837 esac
838 ])
839
840 dnl
841 dnl APACHE_EXPORT_ARGUMENTS
842 dnl Export (via APACHE_SUBST) the various path-related variables that
843 dnl apache will use while generating scripts like autoconf and apxs and
844 dnl the default config file.
845
846 AC_DEFUN([APACHE_SUBST_EXPANDED_ARG],[
847   APR_EXPAND_VAR(exp_$1, [$]$1)
848   APACHE_SUBST(exp_$1)
849   APR_PATH_RELATIVE(rel_$1, [$]exp_$1, ${prefix})
850   APACHE_SUBST(rel_$1)
851 ])
852
853 AC_DEFUN([APACHE_EXPORT_ARGUMENTS],[
854   APACHE_SUBST_EXPANDED_ARG(exec_prefix)
855   APACHE_SUBST_EXPANDED_ARG(bindir)
856   APACHE_SUBST_EXPANDED_ARG(sbindir)
857   APACHE_SUBST_EXPANDED_ARG(libdir)
858   APACHE_SUBST_EXPANDED_ARG(libexecdir)
859   APACHE_SUBST_EXPANDED_ARG(mandir)
860   APACHE_SUBST_EXPANDED_ARG(sysconfdir)
861   APACHE_SUBST_EXPANDED_ARG(datadir)
862   APACHE_SUBST_EXPANDED_ARG(installbuilddir)
863   APACHE_SUBST_EXPANDED_ARG(errordir)
864   APACHE_SUBST_EXPANDED_ARG(iconsdir)
865   APACHE_SUBST_EXPANDED_ARG(htdocsdir)
866   APACHE_SUBST_EXPANDED_ARG(manualdir)
867   APACHE_SUBST_EXPANDED_ARG(cgidir)
868   APACHE_SUBST_EXPANDED_ARG(includedir)
869   APACHE_SUBST_EXPANDED_ARG(localstatedir)
870   APACHE_SUBST_EXPANDED_ARG(runtimedir)
871   APACHE_SUBST_EXPANDED_ARG(logfiledir)
872   APACHE_SUBST_EXPANDED_ARG(proxycachedir)
873   APACHE_SUBST_EXPANDED_ARG(davlockdb)
874 ])
875
876 dnl 
877 dnl APACHE_CHECK_APxVER({apr|apu}, major, minor, 
878 dnl                     [actions-if-ok], [actions-if-not-ok])
879 dnl
880 dnl Checks for APR or APR-util of given major/minor version or later; 
881 dnl if so, runs actions-if-ok; otherwise runs actions-if-not-ok if given.
882 dnl If the version is not satisfactory and actions-if-not-ok is not
883 dnl given, then an error is printed and the configure script is aborted.
884 dnl
885 dnl The first argument must be [apr] or [apu].
886 dnl
887 AC_DEFUN([APACHE_CHECK_APxVER], [
888 define(ap_ckver_major, translit($1, [apru], [APRU])[_MAJOR_VERSION])
889 define(ap_ckver_minor, translit($1, [apru], [APRU])[_MINOR_VERSION])
890 define(ap_ckver_cvar, [ap_cv_$1ver$2$3])
891 define(ap_ckver_name, ifelse([$1],[apr],[APR],[APR-util]))
892
893 ap_ckver_CPPFLAGS="$CPPFLAGS"
894 CPPFLAGS="$CPPFLAGS `$[$1]_config --includes`"
895
896 AC_CACHE_CHECK([for ap_ckver_name version $2.$3.0 or later], ap_ckver_cvar, [
897 AC_EGREP_CPP([good], [
898 #include <$1_version.h>
899 #if ]ap_ckver_major[ > $2 || (]ap_ckver_major[ == $2 && ]ap_ckver_minor[ >= $3)
900 good
901 #endif
902 ], [ap_ckver_cvar=yes], [ap_ckver_cvar=no])])
903
904 if test "$ap_ckver_cvar" = "yes"; then
905   ifelse([$4],[],[:],[$4])
906 else
907   ifelse([$5],[],[AC_MSG_ERROR([ap_ckver_name version $2.$3.0 or later is required])], [$5])
908 fi
909
910 CPPFLAGS="$ap_ckver_CPPFLAGS"
911
912 undefine([ap_ckver_major])
913 undefine([ap_ckver_minor])
914 undefine([ap_ckver_cvar])
915 undefine([ap_ckver_name])
916 ])
917
918 dnl
919 dnl APACHE_CHECK_VOID_PTR_LEN
920 dnl
921 dnl Checks if the size of a void pointer is at least as big as a "long" 
922 dnl integer type.
923 dnl
924 AC_DEFUN([APACHE_CHECK_VOID_PTR_LEN], [
925
926 AC_CACHE_CHECK([for void pointer length], [ap_cv_void_ptr_lt_long],
927 [AC_TRY_RUN([
928 int main(void)
929 {
930     return sizeof(void *) < sizeof(long); 
931 }], [ap_cv_void_ptr_lt_long=no], [ap_cv_void_ptr_lt_long=yes], 
932     [ap_cv_void_ptr_lt_long="cross compile - not checked"])])
933
934 if test "$ap_cv_void_ptr_lt_long" = "yes"; then
935     AC_MSG_ERROR([Size of "void *" is less than size of "long"])
936 fi
937 ])
938
939 dnl
940 dnl APACHE_CHECK_APR_HAS_LDAP
941 dnl
942 dnl Check if APR_HAS_LDAP is 1
943 dnl Unfortunately, we can't use APR_CHECK_APR_DEFINE (because it only includes apr.h)
944 dnl or APR_CHECK_DEFINE (because it only checks for defined'ness and not for 0/1).
945 dnl
946 AC_DEFUN([APACHE_CHECK_APR_HAS_LDAP], [
947   AC_CACHE_CHECK([for ldap support in apr/apr-util],ac_cv_APR_HAS_LDAP,[
948     apache_old_cppflags="$CPPFLAGS"
949     CPPFLAGS="$CPPFLAGS $INCLUDES"
950     AC_EGREP_CPP(YES_IS_DEFINED, [
951 #include <apr_ldap.h>
952 #if APR_HAS_LDAP
953 YES_IS_DEFINED
954 #endif
955     ], ac_cv_APR_HAS_LDAP=yes, ac_cv_APR_HAS_LDAP=no)
956     CPPFLAGS="$apache_old_cppflags"
957   ])
958 ])
959
960 dnl
961 dnl APACHE_ADD_GCC_CFLAGS
962 dnl
963 dnl Check if compiler is gcc and supports flag. If yes, add to CFLAGS.
964 dnl
965 AC_DEFUN([APACHE_ADD_GCC_CFLAG], [
966   define([ap_gcc_ckvar], [ac_cv_gcc_]translit($1, [-:.=], [____]))
967   if test "$GCC" = "yes"; then
968     AC_CACHE_CHECK([whether gcc accepts $1], ap_gcc_ckvar, [
969       save_CFLAGS="$CFLAGS"
970       CFLAGS="$CFLAGS $1"
971       AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
972         [ap_gcc_ckvar=yes], [ap_gcc_ckvar=no])
973       CFLAGS="$save_CFLAGS"
974     ])
975     if test "$]ap_gcc_ckvar[" = "yes" ; then
976        APR_ADDTO(CFLAGS,[$1])
977     fi
978   fi
979   undefine([ap_gcc_ckvar])
980 ])