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