]> granicus.if.org Git - apache/blob - acinclude.m4
I must be getting old.
[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(abs_srcdir)
27   APACHE_SUBST(bindir)
28   APACHE_SUBST(sbindir)
29   APACHE_SUBST(cgidir)
30   APACHE_SUBST(logfiledir)
31   APACHE_SUBST(exec_prefix)
32   APACHE_SUBST(datadir)
33   APACHE_SUBST(localstatedir)
34   APACHE_SUBST(mandir)
35   APACHE_SUBST(libdir)
36   APACHE_SUBST(libexecdir)
37   APACHE_SUBST(htdocsdir)
38   APACHE_SUBST(manualdir)
39   APACHE_SUBST(includedir)
40   APACHE_SUBST(errordir)
41   APACHE_SUBST(iconsdir)
42   APACHE_SUBST(sysconfdir)
43   APACHE_SUBST(installbuilddir)
44   APACHE_SUBST(runtimedir)
45   APACHE_SUBST(proxycachedir)
46   APACHE_SUBST(other_targets)
47   APACHE_SUBST(progname)
48   APACHE_SUBST(prefix)
49   APACHE_SUBST(AWK)
50   APACHE_SUBST(CC)
51   APACHE_SUBST(CPP)
52   APACHE_SUBST(CXX)
53   APACHE_SUBST(CPPFLAGS)
54   APACHE_SUBST(CFLAGS)
55   APACHE_SUBST(CXXFLAGS)
56   APACHE_SUBST(LTFLAGS)
57   APACHE_SUBST(LDFLAGS)
58   APACHE_SUBST(LT_LDFLAGS)
59   APACHE_SUBST(SH_LDFLAGS)
60   APACHE_SUBST(HTTPD_LDFLAGS)
61   APACHE_SUBST(UTIL_LDFLAGS)
62   APACHE_SUBST(LIBS)
63   APACHE_SUBST(DEFS)
64   APACHE_SUBST(INCLUDES)
65   APACHE_SUBST(NOTEST_CPPFLAGS)
66   APACHE_SUBST(NOTEST_CFLAGS)
67   APACHE_SUBST(NOTEST_CXXFLAGS)
68   APACHE_SUBST(NOTEST_LDFLAGS)
69   APACHE_SUBST(NOTEST_LIBS)
70   APACHE_SUBST(EXTRA_CPPFLAGS)
71   APACHE_SUBST(EXTRA_CFLAGS)
72   APACHE_SUBST(EXTRA_CXXFLAGS)
73   APACHE_SUBST(EXTRA_LDFLAGS)
74   APACHE_SUBST(EXTRA_LIBS)
75   APACHE_SUBST(EXTRA_INCLUDES)
76   APACHE_SUBST(LIBTOOL)
77   APACHE_SUBST(SHELL)
78   APACHE_SUBST(MODULE_DIRS)
79   APACHE_SUBST(MODULE_CLEANDIRS)
80   APACHE_SUBST(PORT)
81   APACHE_SUBST(nonssl_listen_stmt_1)
82   APACHE_SUBST(nonssl_listen_stmt_2)
83   APACHE_SUBST(CORE_IMPLIB_FILE)
84   APACHE_SUBST(CORE_IMPLIB)
85   APACHE_SUBST(SH_LIBS)
86   APACHE_SUBST(SH_LIBTOOL)
87   APACHE_SUBST(MK_IMPLIB)
88   APACHE_SUBST(INSTALL_PROG_FLAGS)
89   APACHE_SUBST(DSO_MODULES)
90   APACHE_SUBST(APR_BINDIR)
91   APACHE_SUBST(APR_INCLUDEDIR)
92   APACHE_SUBST(APU_BINDIR)
93   APACHE_SUBST(APU_INCLUDEDIR)
94
95   abs_srcdir="`(cd $srcdir && pwd)`"
96
97   echo creating config_vars.mk
98   test -d build || $mkdir_p build
99   > build/config_vars.mk
100   for i in $APACHE_VAR_SUBST; do
101     eval echo "$i = \$$i" >> build/config_vars.mk
102   done
103 ])
104
105 dnl APACHE_GEN_MAKEFILES
106 dnl Creates Makefiles
107 AC_DEFUN(APACHE_GEN_MAKEFILES,[
108   $SHELL $srcdir/build/fastgen.sh $srcdir $ac_cv_mkdir_p $BSD_MAKEFILE $APACHE_FAST_OUTPUT_FILES
109 ])
110
111 dnl ## APACHE_OUTPUT(file)
112 dnl ## adds "file" to the list of files generated by AC_OUTPUT
113 dnl ## This macro can be used several times.
114 AC_DEFUN(APACHE_OUTPUT, [
115   APACHE_OUTPUT_FILES="$APACHE_OUTPUT_FILES $1"
116 ])
117
118 dnl
119 dnl APACHE_TYPE_RLIM_T
120 dnl
121 dnl If rlim_t is not defined, define it to int
122 dnl
123 AC_DEFUN(APACHE_TYPE_RLIM_T, [
124   AC_CACHE_CHECK([for rlim_t], ac_cv_type_rlim_t, [
125     AC_TRY_COMPILE([
126 #include <sys/types.h>
127 #include <sys/time.h>
128 #include <sys/resource.h>
129 ], [rlim_t spoon;], [
130       ac_cv_type_rlim_t=yes
131     ],[ac_cv_type_rlim_t=no
132     ])
133   ])
134   if test "$ac_cv_type_rlim_t" = "no" ; then
135       AC_DEFINE(rlim_t, int,
136           [Define to 'int' if <sys/resource.h> doesn't define it for us])
137   fi
138 ])
139
140 dnl APACHE_MODPATH_INIT(modpath)
141 AC_DEFUN(APACHE_MODPATH_INIT,[
142   current_dir=$1
143   modpath_current=modules/$1
144   modpath_static=
145   modpath_shared=
146   test -d $1 || $srcdir/build/mkdir.sh $modpath_current
147   > $modpath_current/modules.mk
148 ])dnl
149 dnl
150 AC_DEFUN(APACHE_MODPATH_FINISH,[
151   echo "DISTCLEAN_TARGETS = modules.mk" >> $modpath_current/modules.mk
152   echo "static = $modpath_static" >> $modpath_current/modules.mk
153   echo "shared = $modpath_shared" >> $modpath_current/modules.mk
154   if test ! -z "$modpath_static" -o ! -z "$modpath_shared"; then
155     MODULE_DIRS="$MODULE_DIRS $current_dir"
156   else
157     MODULE_CLEANDIRS="$MODULE_CLEANDIRS $current_dir"
158   fi
159   APACHE_FAST_OUTPUT($modpath_current/Makefile)
160 ])dnl
161 dnl
162 dnl APACHE_MODPATH_ADD(name[, shared[, objects [, ldflags[, libs]]]])
163 AC_DEFUN(APACHE_MODPATH_ADD,[
164   if test -z "$3"; then
165     objects="mod_$1.lo"
166   else
167     objects="$3"
168   fi
169
170   if test -z "$module_standalone"; then
171     if test -z "$2"; then
172       libname="mod_$1.la"
173       BUILTIN_LIBS="$BUILTIN_LIBS $modpath_current/$libname"
174       modpath_static="$modpath_static $libname"
175       cat >>$modpath_current/modules.mk<<EOF
176 $libname: $objects
177         \$(MOD_LINK) $objects
178 EOF
179     else
180       apache_need_shared=yes
181       libname="mod_$1.la"
182       shobjects=`echo $objects | sed 's/\.lo/.slo/g'`
183       modpath_shared="$modpath_shared $libname"
184       cat >>$modpath_current/modules.mk<<EOF
185 $libname: $shobjects
186         \$(SH_LINK) -rpath \$(libexecdir) -module -avoid-version $4 $objects $5
187 EOF
188     fi
189   fi
190 ])dnl
191
192 dnl
193 dnl APACHE_MODULE(name, helptext[, objects[, structname[, default[, config]]]])
194 dnl
195 dnl default is one of:
196 dnl   yes    -- enabled by default. user must explicitly disable.
197 dnl   no     -- disabled under default, most, all. user must explicitly enable.
198 dnl   most   -- disabled by default. enabled explicitly or with most or all.
199 dnl   static -- enabled as static by default, must be explicitly changed.
200 dnl   ""     -- disabled under default, most. enabled explicitly or with all.
201 dnl
202 dnl basically: yes/no is a hard setting. "most" means follow the "most"
203 dnl            setting. otherwise, fall under the "all" setting.
204 dnl            explicit yes/no always overrides.
205 dnl
206 AC_DEFUN(APACHE_MODULE,[
207   AC_MSG_CHECKING(whether to enable mod_$1)
208   define([optname],[--]ifelse($5,yes,disable,enable)[-]translit($1,_,-))dnl
209   AC_ARG_ENABLE(translit($1,_,-),APACHE_HELP_STRING(optname(),$2),,enable_$1=ifelse($5,,maybe-all,$5))
210   undefine([optname])dnl
211   _apmod_extra_msg=""
212   dnl When --enable-modules=most is set and the module was not explicitly
213   dnl requested, allow a module to disable itself if its pre-reqs fail.
214   if test "$module_selection" = "most" -a "$enable_$1" = "most"; then
215     _apmod_error_fatal="no"
216   else
217     _apmod_error_fatal="yes"
218   fi
219   if test "$enable_$1" = "static"; then
220     enable_$1=yes
221   elif test "$enable_$1" = "yes"; then
222     enable_$1=$module_default
223     _apmod_extra_msg=" ($module_selection)"
224   elif test "$enable_$1" = "most"; then
225     if test "$module_selection" = "most" -o "$module_selection" = "all"; then
226       enable_$1=$module_default
227       _apmod_extra_msg=" ($module_selection)"
228     elif test "$enable_$1" != "yes"; then
229       enable_$1=no
230     fi
231   elif test "$enable_$1" = "maybe-all"; then
232     if test "$module_selection" = "all"; then
233       enable_$1=$module_default
234       _apmod_extra_msg=" (all)"
235     else
236       enable_$1=no
237     fi
238   fi
239   if test "$enable_$1" != "no"; then
240     dnl If we plan to enable it, allow the module to run some autoconf magic
241     dnl that may disable it because of missing dependencies.
242     ifelse([$6],,:,[AC_MSG_RESULT([checking dependencies])
243                     $6
244                     AC_MSG_CHECKING(whether to enable mod_$1)
245                     if test "$enable_$1" = "no"; then
246                       if test "$_apmod_error_fatal" = "no"; then
247                         _apmod_extra_msg=" (disabled)"
248                       else
249                         AC_MSG_ERROR([mod_$1 has been requested but can not be built due to prerequisite failures])
250                       fi
251                     fi])
252   fi
253   AC_MSG_RESULT($enable_$1$_apmod_extra_msg)
254   if test "$enable_$1" != "no"; then
255     case "$enable_$1" in
256     shared*)
257       enable_$1=`echo $ac_n $enable_$1$ac_c|sed 's/shared,*//'`
258       sharedobjs=yes
259       shared=yes
260       DSO_MODULES="$DSO_MODULES $1"
261       ;;
262     *)
263       MODLIST="$MODLIST ifelse($4,,$1,$4)"
264       if test "$1" = "so"; then
265           sharedobjs=yes
266       fi
267       shared="";;
268     esac
269     APACHE_MODPATH_ADD($1, $shared, $3)
270   fi
271 ])dnl
272
273 dnl
274 dnl APACHE_LAYOUT(configlayout, layoutname)
275 dnl
276 AC_DEFUN(APACHE_LAYOUT,[
277   if test ! -f $srcdir/config.layout; then
278     echo "** Error: Layout file $srcdir/config.layout not found"
279     echo "** Error: Cannot use undefined layout '$LAYOUT'"
280     exit 1
281   fi
282   pldconf=./config.pld
283   changequote({,})
284   sed -e "1,/[  ]*<[lL]ayout[   ]*$2[   ]*>[    ]*/d" \
285       -e '/[    ]*<\/Layout>[   ]*/,$d' \
286       -e "s/^[  ]*//g" \
287       -e "s/:[  ]*/=\'/g" \
288       -e "s/[   ]*$/'/g" \
289       $1 > $pldconf
290   layout_name=$2
291   . $pldconf
292   rm $pldconf
293   for var in prefix exec_prefix bindir sbindir libexecdir mandir \
294              sysconfdir datadir errordir iconsdir htdocsdir cgidir \
295              includedir localstatedir runtimedir logfiledir libdir \
296              manualdir proxycachedir installbuilddir; do
297     eval "val=\"\$$var\""
298     case $val in
299       *+)
300         val=`echo $val | sed -e 's;\+$;;'`
301         eval "$var=\"\$val\""
302         autosuffix=yes
303         ;;
304       *)
305         autosuffix=no
306         ;;
307     esac
308     val=`echo $val | sed -e 's:\(.\)/*$:\1:'`
309     val=`echo $val | sed -e 's:[\$]\([a-z_]*\):${\1}:g'`
310     if test "$autosuffix" = "yes"; then
311       if echo $val | grep apache >/dev/null; then
312         addtarget=no
313       else
314         addtarget=yes
315       fi
316       if test "$addtarget" = "yes"; then
317         val="$val/apache2"
318       fi
319     fi
320     eval "$var='$val'"
321   done
322   changequote([,])
323 ])dnl
324
325 dnl
326 dnl APACHE_ENABLE_LAYOUT
327 dnl
328 AC_DEFUN(APACHE_ENABLE_LAYOUT,[
329 AC_ARG_ENABLE(layout,
330 [  --enable-layout=LAYOUT],[
331   LAYOUT=$enableval
332 ])
333
334 if test -z "$LAYOUT"; then
335   LAYOUT="Apache"
336 fi
337 APACHE_LAYOUT($srcdir/config.layout, $LAYOUT)
338
339 AC_MSG_CHECKING(for chosen layout)
340 AC_MSG_RESULT($layout_name)
341 ])
342
343 dnl
344 dnl APACHE_ENABLE_MODULES
345 dnl
346 AC_DEFUN(APACHE_ENABLE_MODULES,[
347   module_selection=default
348   module_default=yes
349
350   AC_ARG_ENABLE(modules,
351   APACHE_HELP_STRING(--enable-modules=MODULE-LIST,Modules to enable),[
352     for i in $enableval; do
353       if test "$i" = "all" -o "$i" = "most"; then
354         module_selection=$i
355       else
356         eval "enable_$i=yes"
357       fi
358     done
359   ])
360   
361   AC_ARG_ENABLE(mods-shared,
362   APACHE_HELP_STRING(--enable-mods-shared=MODULE-LIST,Shared modules to enable),[
363     for i in $enableval; do
364       if test "$i" = "all" -o "$i" = "most"; then
365         module_selection=$i
366         module_default=shared
367       else
368         i=`echo $i | sed 's/-/_/g'`
369         eval "enable_$i=shared"
370       fi
371     done
372   ])
373 ])
374
375 AC_DEFUN(APACHE_REQUIRE_CXX,[
376   if test -z "$apache_cxx_done"; then
377     AC_PROG_CXX
378     AC_PROG_CXXCPP
379     apache_cxx_done=yes
380   fi
381 ])
382
383 dnl
384 dnl APACHE_CHECK_SSL_TOOLKIT
385 dnl
386 dnl Find the openssl toolkit installation and check it for the right
387 dnl version, then add its flags to INCLUDES and LIBS.  This should
388 dnl really be using a custom AC_TRY_COMPILE function to test the includes
389 dnl and then AC_TRY_LINK to test the libraries directly for the version,
390 dnl but that will require someone who knows how to program openssl.
391 dnl
392 AC_DEFUN(APACHE_CHECK_SSL_TOOLKIT,[
393 if test "x$ap_ssltk_base" = "x"; then
394   AC_MSG_CHECKING(for SSL/TLS toolkit base)
395   ap_ssltk_base=""
396   AC_ARG_WITH(ssl, APACHE_HELP_STRING(--with-ssl=DIR,SSL/TLS toolkit (OpenSSL)), [
397     if test "x$withval" != "xyes" -a "x$withval" != "x"; then
398       ap_ssltk_base="$withval"
399       if test -f "$ap_ssltk_base/bin/openssl"; then
400           ap_ssltk_version="`$ap_ssltk_base/bin/openssl version`"
401       else
402           ap_ssltk_version="unknown"
403       fi
404     fi
405   ])
406   if test "x$ap_ssltk_base" = "x"; then
407     AC_CACHE_VAL(ap_cv_ssltk,[
408       #
409       # shotgun approach: find all occurrences of the openssl program
410       #
411       # The IFS=... trick eliminates the colons from $PATH, without using an external program
412       for p in `IFS=":$IFS"; echo $PATH` /usr/local/openssl/bin /usr/local/ssl/bin; do
413         if test -f "$p/openssl"; then
414           ap_ssltk_version="`$p/openssl version`"
415           if test "x$ap_ssltk_version" != "x"; then
416             ap_cv_ssltk="`(cd $p/.. && pwd)`"
417             break
418           fi
419         fi
420       done
421       if test "x$ap_cv_ssltk" = "x"; then
422         AC_MSG_ERROR([requires OpenSSL 0.9.6e or higher])
423       fi
424     ])
425     ap_ssltk_base="$ap_cv_ssltk"
426   fi
427   if test ! -d $ap_ssltk_base; then
428     AC_MSG_ERROR([invalid SSL/TLS toolkit base directory $ap_ssltk_base])
429   fi
430   AC_MSG_RESULT($ap_ssltk_base)
431     
432   AC_MSG_CHECKING(for SSL/TLS toolkit version)
433   AC_MSG_RESULT($ap_ssltk_version)
434   case "$ap_ssltk_version" in
435     "OpenSSL "[[1-9]]* | \
436     "OpenSSL "0.9.6[[e-z]]* | \
437     "OpenSSL "0.9.[[7-9]]* | \
438     "OpenSSL "0.[[1-9]][[0-9]]* )
439        # okay versions that do not have known security holes
440        ;;
441     "OpenSSL"*)
442        AC_MSG_WARN([OpenSSL versions prior to 0.9.6e have known security holes])
443        ;;
444     *)
445        # unknown version -- assume the user knows what they are doing
446        ;;
447   esac
448     
449   AC_MSG_CHECKING(for SSL/TLS toolkit includes)
450   ap_ssltk_incdir=""
451   for p in $ap_ssltk_base/include /usr/local/openssl/include \
452            /usr/local/ssl/include /usr/local/include /usr/include; do
453     if test -f "$p/openssl/ssl.h"; then
454       ap_ssltk_incdir="$p"
455       break
456     elif test -f "$p/ssl.h"; then
457       ap_ssltk_incdir="$p"
458       break
459     fi
460   done
461   if test "x$ap_ssltk_incdir" = "x"; then
462     AC_MSG_ERROR([OpenSSL headers not found])
463   fi
464   AC_MSG_RESULT($ap_ssltk_incdir)
465
466   AC_MSG_CHECKING(for SSL/TLS toolkit libraries)
467   ap_ssltk_libdir=""
468   for p in $ap_ssltk_base/lib /usr/local/openssl/lib \
469            /usr/local/ssl/lib /usr/local/lib /usr/lib /lib /usr/lib64; do
470     if test -f "$p/libssl.a" -o -f "$p/libssl.so" -o -f "$p/libssl.dylib"; then
471       ap_ssltk_libdir="$p"
472       break
473     fi
474   done
475   if test ".$ap_ssltk_libdir" = .; then
476     AC_MSG_ERROR([OpenSSL libraries not found])
477   fi
478   AC_MSG_RESULT($ap_ssltk_libdir)
479
480   dnl #  annotate the Apache build environment with determined information
481   APR_ADDTO(INCLUDES, [-I$ap_ssltk_incdir/openssl])
482   if test "x$ap_ssltk_incdir" != "x/usr/include"; then
483     APR_ADDTO(INCLUDES, [-I$ap_ssltk_incdir])
484   fi
485   if test "x$ap_ssltk_libdir" != "x/usr/lib"; then
486     APR_ADDTO(LDFLAGS, [-L$ap_ssltk_libdir])
487     if test "x$ap_platform_runtime_link_flag" != "x"; then
488       APR_ADDTO(LDFLAGS, [$ap_platform_runtime_link_flag$ap_ssltk_libdir])
489     fi
490   fi
491   APR_ADDTO(LIBS, [-lssl -lcrypto])
492   ap_cv_ssltk="$ap_ssltk_base"
493 fi
494 ])
495
496 dnl
497 dnl APACHE_EXPORT_ARGUMENTS
498 dnl Export (via APACHE_SUBST) the various path-related variables that
499 dnl apache will use while generating scripts like autoconf and apxs and
500 dnl the default config file.
501
502 AC_DEFUN(APACHE_SUBST_EXPANDED_ARG,[
503   APR_EXPAND_VAR(exp_$1, [$]$1)
504   APACHE_SUBST(exp_$1)
505   APR_PATH_RELATIVE(rel_$1, [$]exp_$1, ${prefix})
506   APACHE_SUBST(rel_$1)
507 ])
508
509 AC_DEFUN(APACHE_EXPORT_ARGUMENTS,[
510   APACHE_SUBST_EXPANDED_ARG(exec_prefix)
511   APACHE_SUBST_EXPANDED_ARG(bindir)
512   APACHE_SUBST_EXPANDED_ARG(sbindir)
513   APACHE_SUBST_EXPANDED_ARG(libdir)
514   APACHE_SUBST_EXPANDED_ARG(libexecdir)
515   APACHE_SUBST_EXPANDED_ARG(mandir)
516   APACHE_SUBST_EXPANDED_ARG(sysconfdir)
517   APACHE_SUBST_EXPANDED_ARG(datadir)
518   APACHE_SUBST_EXPANDED_ARG(installbuilddir)
519   APACHE_SUBST_EXPANDED_ARG(errordir)
520   APACHE_SUBST_EXPANDED_ARG(iconsdir)
521   APACHE_SUBST_EXPANDED_ARG(htdocsdir)
522   APACHE_SUBST_EXPANDED_ARG(manualdir)
523   APACHE_SUBST_EXPANDED_ARG(cgidir)
524   APACHE_SUBST_EXPANDED_ARG(includedir)
525   APACHE_SUBST_EXPANDED_ARG(localstatedir)
526   APACHE_SUBST_EXPANDED_ARG(runtimedir)
527   APACHE_SUBST_EXPANDED_ARG(logfiledir)
528   APACHE_SUBST_EXPANDED_ARG(proxycachedir)
529 ])
530