1dnl
2dnl Autoconf configuration for Apache httpd
3dnl
4dnl     Use ./buildconf to produce a configure script
5dnl
6
7AC_PREREQ(2.50)
8AC_INIT(ABOUT_APACHE)
9
10AC_CONFIG_HEADER(include/ap_config_auto.h)
11AC_CONFIG_AUX_DIR(build)
12
13dnl Absolute source/build directory
14abs_srcdir=`(cd $srcdir && pwd)`
15abs_builddir=`pwd`
16
17dnl Ensure that the httpd version is included
18HTTPD_VERSION=`$abs_srcdir/build/get-version.sh all $abs_srcdir/include/ap_release.h AP_SERVER`
19AC_SUBST(HTTPD_VERSION)
20
21dnl #
22dnl # Include our own M4 macros along with those for APR and libtool
23dnl #
24sinclude(build/apr_common.m4)
25sinclude(build/find_apr.m4)
26sinclude(build/find_apu.m4)
27sinclude(acinclude.m4)
28
29dnl Later versions of autoconf (>= 2.62) by default cause the produced
30dnl configure script to emit at least warnings when it comes across unknown
31dnl command line options. These versions also have the macro
32dnl AC_DISABLE_OPTION_CHECKING defined which turns this off by default.
33dnl We want to have this turned off here since our configure calls can
34dnl contain options for APR / APR-UTIL configure that are unknown to us.
35dnl So avoid confusing the user by turning this off. See also PR 45221.
36ifdef([AC_DISABLE_OPTION_CHECKING], [AC_DISABLE_OPTION_CHECKING])
37
38dnl XXX we can't just use AC_PREFIX_DEFAULT because that isn't subbed in
39dnl by configure until it is too late.  Is that how it should be or not?
40dnl Something seems broken here.                                               
41AC_PREFIX_DEFAULT(/usr/local/apache2)
42
43dnl Get the layout here, so we can pass the required variables to apr
44APR_ENABLE_LAYOUT(Apache, [errordir iconsdir htdocsdir cgidir])
45
46dnl reparse the configure arguments.
47APR_PARSE_ARGUMENTS
48
49dnl export expanded and relative configure argument variables
50APACHE_EXPORT_ARGUMENTS
51
52dnl Save user-defined environment settings for later restoration
53dnl
54APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
55APR_SAVE_THE_ENVIRONMENT(CFLAGS)
56APR_SAVE_THE_ENVIRONMENT(CXXFLAGS)
57APR_SAVE_THE_ENVIRONMENT(LDFLAGS)
58APR_SAVE_THE_ENVIRONMENT(LIBS)
59APR_SAVE_THE_ENVIRONMENT(INCLUDES)
60
61dnl Generate ./config.nice for reproducing runs of configure
62dnl
63APR_CONFIG_NICE(config.nice)
64
65nl='
66'
67dnl Check that mkdir -p works
68APR_MKDIR_P_CHECK($top_srcdir/build/mkdir.sh)
69
70dnl get an EGREP to use in the Makefiles
71AC_PROG_EGREP
72APACHE_SUBST(EGREP)
73
74dnl ## Run configure for packages Apache uses
75
76dnl shared library support for these packages doesn't currently
77dnl work on some platforms
78
79AC_CANONICAL_SYSTEM
80
81orig_prefix="$prefix"
82
83AC_MSG_NOTICE([])
84AC_MSG_NOTICE([Configuring Apache Portable Runtime library...])
85AC_MSG_NOTICE([])
86
87AC_ARG_WITH(included-apr,
88APACHE_HELP_STRING(--with-included-apr,Use bundled copies of APR/APR-Util))
89
90if test "x$with_included_apr" = "xyes"; then
91  apr_found=reconfig
92  if test ! -d srclib/apr && test ! -d $srcdir/srclib/apr; then
93    AC_MSG_ERROR([Bundled APR requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/.])
94  fi
95else 
96  APR_FIND_APR("$srcdir/srclib/apr", "./srclib/apr", 1, 1 2, [
97    version=`$apr_config --version`
98    case x${version} in
99    x1.[[0-3]].*) 
100      AC_MSG_WARN([APR version 1.4.0 or later is required, found $version])
101      apr_acceptable=no
102      ;;
103    esac
104    unset version
105   ])
106fi
107
108if test "$apr_found" = "no"; then
109  AC_MSG_ERROR([APR not found.  Please read the documentation.])
110fi
111
112if test "$apr_found" = "reconfig"; then
113  APR_SUBDIR_CONFIG(srclib/apr,
114                    [$apache_apr_flags --prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir --bindir=$bindir --datadir=$datadir --with-installbuilddir=$installbuilddir],
115                    [--enable-layout=*|\'--enable-layout=*])
116  dnl We must be the first to build and the last to be cleaned
117  AP_BUILD_SRCLIB_DIRS="apr $AP_BUILD_SRCLIB_DIRS"
118  AP_CLEAN_SRCLIB_DIRS="$AP_CLEAN_SRCLIB_DIRS apr"
119
120  dnl We have to find apr-N-config when we reconfigure APR.
121  for majorver in 1 2; do
122    test_apr_config="./srclib/apr/apr-${majorver}-config"
123    if test -f "$test_apr_config"; then
124      apr_config="$test_apr_config"
125    fi
126  done
127fi
128
129APR_SETIFNULL(CC, `$apr_config --cc`)
130APR_SETIFNULL(CPP, `$apr_config --cpp`)
131APR_ADDTO(CFLAGS, `$apr_config --cflags`)
132APR_ADDTO(CPPFLAGS, `$apr_config --cppflags`)
133dnl internal-only CPPFLAGS (shouldn't affect third-party module builds)
134INTERNAL_CPPFLAGS=""
135APR_ADDTO(LDFLAGS, `$apr_config --ldflags`)
136SHLIBPATH_VAR=`$apr_config --shlib-path-var`
137APR_BINDIR=`$apr_config --bindir`
138APR_INCLUDEDIR=`$apr_config --includedir`
139APR_INCLUDES=`$apr_config --includes`
140APR_VERSION=`$apr_config --version`
141apr_major_version=`echo ${APR_VERSION} | sed 's,\..*,,'`
142APR_CONFIG="$APR_BINDIR/apr-${apr_major_version}-config"
143
144AC_MSG_NOTICE([])
145AC_MSG_NOTICE([Configuring Apache Portable Runtime Utility library...])
146AC_MSG_NOTICE([])
147
148if test "x${apr_major_version}" = "x2"; then
149  apu_found=obsolete
150elif test "x$with_included_apr" = "xyes"; then
151  apu_found=reconfig
152  if test ! -d srclib/apr-util && test ! -d $srcdir/srclib/apr-util; then
153    AC_MSG_ERROR([Bundled APR-Util requested but not found at ./srclib/. Download and unpack the corresponding apr and apr-util packages to ./srclib/.])
154  fi
155else 
156   dnl If httpd is buildconf'ed against an apr 2.x tree, then 1.x
157   dnl isn't supported. 
158   ifdef([APR_FIND_APU], [
159     APR_FIND_APU("$srcdir/srclib/apr-util", "./srclib/apr-util", 
160                  1, ${apr_major_version})
161   ], [apu_found=no])
162fi
163
164if test "$apu_found" = "no"; then
165  AC_MSG_ERROR([APR-util not found.  Please read the documentation.])
166fi
167
168# Catch some misconfigurations:
169case ${apr_found}.${apu_found} in
170reconfig.yes)
171  AC_MSG_ERROR([Cannot use an external APR-util with the bundled APR])
172  ;;
173yes.reconfig)
174  AC_MSG_ERROR([Cannot use an external APR with the bundled APR-util])
175  ;;
176esac  
177
178if test "$apu_found" = "reconfig"; then
179  APR_SUBDIR_CONFIG(srclib/apr-util,
180                    [--with-apr=../apr --prefix=$prefix --exec-prefix=$exec_prefix --libdir=$libdir --includedir=$includedir --bindir=$bindir],
181                    [--enable-layout=*|\'--enable-layout=*])
182  dnl We must be the last to build and the first to be cleaned
183  AP_BUILD_SRCLIB_DIRS="$AP_BUILD_SRCLIB_DIRS apr-util"
184  AP_CLEAN_SRCLIB_DIRS="apr-util $AP_CLEAN_SRCLIB_DIRS"
185  dnl APR and APR-Util major versions must match
186  apu_config="./srclib/apr-util/apu-${apr_major_version}-config"
187fi
188
189if test "$apu_found" = "obsolete"; then
190  AC_MSG_NOTICE([APR-util obsoleted, woohoo])
191else
192  APR_ADDTO(LDFLAGS, `$apu_config --ldflags`)
193  APU_BINDIR=`$apu_config --bindir`
194  APU_INCLUDEDIR=`$apu_config --includedir`
195  APU_INCLUDES=`$apu_config --includes`
196  APU_VERSION=`$apu_config --version`
197  APU_CONFIG="$APU_BINDIR/apu-`echo ${APU_VERSION} | sed 's,\..*,,'`-config"
198fi
199
200dnl In case we picked up CC and CPP from APR, get that info into the
201dnl config cache so that PCRE uses it.  Otherwise, CC and CPP used for
202dnl PCRE and for our config tests will be whatever PCRE determines.
203AC_PROG_CC
204AC_PROG_CPP
205
206dnl Try to get c99 support for variadic macros
207ifdef([AC_PROG_CC_C99], [AC_PROG_CC_C99])
208
209if test "x${cache_file}" = "x/dev/null"; then
210  # Likewise, ensure that CC and CPP are passed through to the pcre
211  # configure script iff caching is disabled (the autoconf 2.5x default).
212  export CC; export CPP
213fi
214
215AC_ARG_WITH(pcre,
216APACHE_HELP_STRING(--with-pcre=PATH,Use external PCRE library))
217
218AC_PATH_PROG(PCRE_CONFIG, pcre-config, false)
219if test -d "$with_pcre" && test -x "$with_pcre/bin/pcre-config"; then
220   PCRE_CONFIG=$with_pcre/bin/pcre-config
221elif test -x "$with_pcre"; then
222   PCRE_CONFIG=$with_pcre
223fi
224
225if test "$PCRE_CONFIG" != "false"; then
226  if $PCRE_CONFIG --version >/dev/null 2>&1; then :; else
227    AC_MSG_ERROR([Did not find pcre-config script at $PCRE_CONFIG])
228  fi
229  case `$PCRE_CONFIG --version` in
230  [[1-5].*])
231    AC_MSG_ERROR([Need at least pcre version 6.0])
232    ;;
233  esac
234  AC_MSG_NOTICE([Using external PCRE library from $PCRE_CONFIG])
235  APR_ADDTO(PCRE_INCLUDES, [`$PCRE_CONFIG --cflags`])
236  APR_ADDTO(PCRE_LIBS, [`$PCRE_CONFIG --libs`])
237else
238  AC_MSG_ERROR([pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/])
239fi
240APACHE_SUBST(PCRE_LIBS)
241
242AC_MSG_NOTICE([])
243AC_MSG_NOTICE([Configuring Apache httpd...])
244AC_MSG_NOTICE([])
245
246dnl If the source dir is not equal to the build dir, 
247dnl then we are running in VPATH mode.
248
249APR_ADDTO(INCLUDES, [-I.])
250
251if test "$abs_builddir" != "$abs_srcdir"; then
252  APR_ADDTO(INCLUDES, [-I\$(top_builddir)/include])
253fi
254
255APR_ADDTO(INCLUDES, [-I\$(top_srcdir)/os/\$(OS_DIR) -I\$(top_srcdir)/include])
256
257# apr/apr-util --includes may pick up system paths for dependent
258# libraries, so ensure these are later in INCLUDES than local source
259# directories.
260APR_ADDTO(INCLUDES, $APR_INCLUDES)
261APR_ADDTO(INCLUDES, $APU_INCLUDES)
262
263dnl Add in path to PCRE includes
264APR_ADDTO(INCLUDES, $PCRE_INCLUDES)
265
266AC_MSG_NOTICE([])
267AC_MSG_NOTICE([Applying OS-specific hints for httpd...])
268AC_MSG_NOTICE([])
269
270case $host in
271  *os2*)
272      # Use a custom made libtool replacement
273      echo "using aplibtool"
274      LIBTOOL="$abs_srcdir/srclib/apr/build/aplibtool"
275      SH_LIBTOOL="$LIBTOOL --shared --export-all"
276      SH_LIBS="\$(ALL_LIBS)"
277      CORE_IMPLIB_FILE="ApacheCoreOS2.la"
278      CORE_IMPLIB="$abs_srcdir/server/$CORE_IMPLIB_FILE"
279      MK_IMPLIB="emximp"
280      other_targets="$other_targets os2core"
281      INSTALL_PROG_FLAGS="-e .exe"
282      SHLTCFLAGS=""
283      LTCFLAGS=""
284      ;;
285  *)
286      if test "x$LTFLAGS" = "x"; then
287          LTFLAGS='--silent'
288      fi
289      my_libtool=`$apr_config --apr-libtool`
290      LIBTOOL="$my_libtool \$(LTFLAGS)"
291      libtoolversion=`$my_libtool --version`
292      case $libtoolversion in
293          *1.[[45]]* | *[[2-9]].[[0-9]]*)
294              SH_LIBTOOL='$(LIBTOOL)'
295              SHLTCFLAGS="-prefer-pic"
296              LTCFLAGS="-prefer-non-pic -static"
297              ;;
298          *)
299              SH_LIBTOOL='$(SHELL) $(top_builddir)/shlibtool $(LTFLAGS)'
300              SHLTCFLAGS=""
301              LTCFLAGS=""
302              ;;
303      esac
304      ;;
305esac
306APACHE_SUBST(SHLTCFLAGS)
307APACHE_SUBST(LTCFLAGS)
308
309case $host in
310  *-apple-aux3*)
311      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
312      ;;
313  *os2-emx*)
314      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
315      ;;
316  *-linux-*)
317      case `uname -r` in
318        # Unserialized accept() was not recommended until Linux 2.2.
319        [[01]].* | 2.[[01]]* )
320            ;;
321        * )
322            APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
323            ;;
324      esac
325      ;;
326  *486-*-bsdi* | *-netbsd* | *-freebsd* | *-apple-darwin* | *-dec-osf* | *-qnx)
327      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
328      ;;
329  *-solaris2*)
330      dnl This is a hack -- we should be using AC_TRY_RUN instead
331      ap_platform_runtime_link_flag="-R"
332      dnl solaris 8 and above don't have a thundering herd
333      dnl not sure about rev's before this one.
334      case `uname -r` in
335        5.[567]*)
336            ;;
337        * )
338            APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
339            ;;
340      esac
341      ;;
342  *cygwin*)
343      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
344      ;;
345  *mingw32*)
346      APR_ADDTO(INTERNAL_CPPFLAGS, [-DAP_DECLARE_EXPORT])
347      APR_SETIFNULL(ac_cv_func_times, [no])
348      APR_SETIFNULL(ac_cv_func_getpwnam, [no])
349      APR_SETIFNULL(ac_cv_func_getgrnam, [no])
350      ;;
351  *aix*)
352      aixver=`echo $host | sed 's/^[[^0-9]]*//' | sed 's/\.//g'`
353      if test $aixver -ge 4320; then
354        APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
355      fi
356      ;;
357  *os390*)
358      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
359      ;;
360esac
361
362APR_SETVAR(AP_NONBLOCK_WHEN_MULTI_LISTEN, [1])
363
364dnl
365dnl Process command line arguments. This is done early in the process so the
366dnl user can get feedback quickly in case of an error.
367dnl
368dnl ### need to move some of the arguments "up here"
369
370dnl ## Check for programs
371
372AC_PATH_PROG(RM, rm)
373AC_PATH_PROG(PKGCONFIG, pkg-config)
374AC_PATH_PROG(RSYNC, rsync)
375AC_PROG_AWK
376AC_PROG_LN_S
377AC_CHECK_TOOL(RANLIB, ranlib, true)
378dnl AC_PATH_PROG(PERL_PATH, perl)
379AC_CHECK_PROGS(LYNX_PATH,[lynx links elinks], [lynx])
380
381# Hard-coded install programs
382MKINSTALLDIRS="\$(abs_srcdir)/build/mkdir.sh"
383INSTALL="\$(LIBTOOL) --mode=install \$(abs_srcdir)/build/install.sh -c"
384APACHE_SUBST(MKINSTALLDIRS)
385APACHE_SUBST(INSTALL)
386
387dnl Various OS checks that apparently set required flags
388ifdef([AC_USE_SYSTEM_EXTENSIONS], [
389AC_USE_SYSTEM_EXTENSIONS
390], [
391AC_AIX
392AC_MINIX
393])
394
395AC_ISC_POSIX
396
397# Ensure that satisfactory versions of apr and apr-util are 
398# found if external copies are configured.
399if test "${apr_found}" = "yes"; then
400  # Require at least APR 1.3.x otherwise fail
401  APACHE_CHECK_APxVER([apr], 1, 3)
402fi
403
404if test "${apu_found}" = "yes"; then
405  # Require at least APR-util 1.3.x otherwise fail
406  if test "${apr_found}" = "yes"; then
407    # we need to add the APR includes to CPPFLAGS
408    apu_ckver_CPPFLAGS="$CPPFLAGS"
409    CPPFLAGS="$CPPFLAGS `$apr_config --includes`"
410    APACHE_CHECK_APxVER([apu], 1, 3)
411    CPPFLAGS="$apu_ckver_CPPFLAGS"
412  else
413    APACHE_CHECK_APxVER([apu], 1, 3)
414  fi
415fi
416
417dnl Check for what we can generate dependency files with
418APR_CHECK_DEPEND
419
420dnl ## Check for libraries
421
422dnl ## Check for header files
423
424dnl I think these are just used all over the place, so just check for
425dnl them at the base of the tree. If some are specific to a single
426dnl directory, they should be moved (Comment #Spoon)
427
428dnl Regarding standard header files: AC_HEADER_STDC doesn't set symbols
429dnl HAVE_STRING_H, HAVE_STDLIB_H, etc., so those are checked for
430dnl explicitly so that the normal HAVE_xxx_H symbol is defined.
431
432AC_HEADER_STDC
433AC_CHECK_HEADERS( \
434string.h \
435limits.h \
436unistd.h \
437sys/socket.h \
438pwd.h \
439grp.h \
440strings.h \
441sys/prctl.h \
442sys/processor.h \
443sys/sem.h \
444sys/sdt.h \
445sys/loadavg.h
446)
447AC_HEADER_SYS_WAIT
448
449dnl ## Check for typedefs, structures, and compiler characteristics.
450
451AC_C_CONST
452
453dnl ## Check for library functions
454dnl ## sqrt() only needed in support/ab.c
455saved_LIBS="$LIBS"
456LIBS=""
457AC_SEARCH_LIBS(sqrt, m)
458MATH_LIBS="$LIBS"
459APACHE_SUBST(MATH_LIBS)
460LIBS="$saved_LIBS"
461
462saved_LIBS="$LIBS"
463LIBS=""
464AC_SEARCH_LIBS(crypt, crypt)
465CRYPT_LIBS="$LIBS"
466APACHE_SUBST(CRYPT_LIBS)
467LIBS="$saved_LIBS"
468
469dnl See Comment #Spoon
470
471AC_CHECK_FUNCS( \
472getpwnam \
473getgrnam \
474initgroups \
475bindprocessor \
476prctl \
477timegm \
478getpgid \
479fopen64 \
480getloadavg
481)
482
483dnl confirm that a void pointer is large enough to store a long integer
484APACHE_CHECK_VOID_PTR_LEN
485
486AC_CACHE_CHECK([for gettid()], ac_cv_gettid,
487[AC_TRY_RUN(#define _GNU_SOURCE
488#include <unistd.h>
489#include <sys/syscall.h>
490#include <sys/types.h>
491int main(int argc, char **argv) {
492pid_t t = syscall(SYS_gettid); return t == -1 ? 1 : 0; },
493[ac_cv_gettid=yes], [ac_cv_gettid=no], [ac_cv_gettid=no])])
494if test "$ac_cv_gettid" = "yes"; then
495    AC_DEFINE(HAVE_GETTID, 1, [Define if you have gettid()])
496fi
497
498dnl ## Check for the tm_gmtoff field in struct tm to get the timezone diffs
499AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff,
500[AC_TRY_COMPILE([#include <sys/types.h>
501#include <time.h>], [struct tm tm; tm.tm_gmtoff;],
502  ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)])
503if test "$ac_cv_struct_tm_gmtoff" = "yes"; then
504    AC_DEFINE(HAVE_GMTOFF, 1, [Define if struct tm has a tm_gmtoff field])
505fi
506
507dnl ## Set up any appropriate OS-specific environment variables for apachectl
508
509case $host in
510    *aix*)
511        # for 32-bit builds, increase MAXDATA to allow lots of threads
512        if test x$OBJECT_MODE != x64; then
513            OS_SPECIFIC_VARS="LDR_CNTRL=\"MAXDATA=0x80000000\" ; export LDR_CNTRL ;"
514        fi
515        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS AIXTHREAD_SCOPE=S ; export AIXTHREAD_SCOPE"
516        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; AIXTHREAD_MUTEX_DEBUG=OFF ; export AIXTHREAD_MUTEX_DEBUG"
517        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; AIXTHREAD_RWLOCK_DEBUG=OFF ; export AIXTHREAD_RWLOCK_DEBUG"
518        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; AIXTHREAD_COND_DEBUG=OFF ; export AIXTHREAD_COND_DEBUG"
519        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; SPINLOOPTIME=1000 ; export SPINLOOPTIME"
520        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; YIELDLOOPTIME=8 ; export YIELDLOOPTIME"
521        OS_SPECIFIC_VARS="$OS_SPECIFIC_VARS ; MALLOCMULTIHEAP=considersize,heaps:8 ; export MALLOCMULTIHEAP"
522        ;;
523    *os390*)
524        OS_SPECIFIC_VARS="export _CEE_RUNOPTS=\"STACK(,,ANY)\" ; export _EDC_ADD_ERRNO2=1"
525        ;;
526    *)
527        OS_SPECIFIC_VARS=""
528esac
529      
530AC_ARG_WITH(port,APACHE_HELP_STRING(--with-port=PORT,Port on which to listen (default is 80)),
531        [if test "$withval" = "yes"; then AC_MSG_ERROR('option --with-port requires a value (the TCP port number)'); else PORT="$withval"; fi],
532	[PORT=80])
533
534AC_ARG_WITH(sslport,APACHE_HELP_STRING(--with-sslport=SSLPORT,Port on which to securelisten (default is 443)),
535        [if test "$withval" = "yes"; then AC_MSG_ERROR('option --with-sslport requires a value (the SSL TCP port number)'); else SSLPORT="$withval"; fi],
536	[SSLPORT=443])
537
538DTRACE=true
539AC_ARG_ENABLE(dtrace,APACHE_HELP_STRING(--enable-dtrace,Enable DTrace probes),
540[
541  enable_dtrace=$enableval
542  if test "$enableval" = "yes"; then
543    APR_ADDTO(CPPFLAGS, -DAPR_DTRACE_PROVIDER)
544    AC_MSG_ERROR('DTrace Support in the build system is not complete. Patches Welcome!')
545  fi
546],
547[
548  enable_dtrace=no
549])
550
551dnl Disabled dtrace build for now.
552enable_dtrace=no
553
554case $host in
555  *-solaris2*)
556    if test $enable_dtrace = "yes" -a "$ac_cv_header_sys_sdt_h" = "yes"; then
557        AC_DEFINE(AP_ENABLE_DTRACE, 1,
558                  [Enable DTrace probes])
559        DTRACE="/usr/sbin/dtrace $DTRACEFLAGS"
560        test -f include/apache_probes.h || $DTRACE -h -s apache_probes.d -o include/apache_probes.h
561    fi
562    ;;
563esac
564
565APACHE_SUBST(DTRACE)
566
567AC_ARG_ENABLE(hook-probes,APACHE_HELP_STRING(--enable-hook-probes,Enable APR hook probes),
568[
569    if test "$enableval" = "yes"; then
570        AC_DEFINE(AP_HOOK_PROBES_ENABLED, 1,
571                  [Enable the APR hook probes capability, reading from ap_hook_probes.h])
572        APR_ADDTO(INTERNAL_CPPFLAGS, -DAP_HOOK_PROBES_ENABLED)
573    fi
574])dnl
575
576AC_ARG_ENABLE(exception-hook,APACHE_HELP_STRING(--enable-exception-hook,Enable fatal exception hook),
577[
578    if test "$enableval" = "yes"; then
579        AC_DEFINE(AP_ENABLE_EXCEPTION_HOOK, 1,
580                  [Allow modules to run hook after a fatal exception])
581    fi
582])dnl
583
584AC_ARG_ENABLE(load-all-modules,APACHE_HELP_STRING(--enable-load-all-modules,Load all modules),
585[
586  LOAD_ALL_MODULES=$enableval
587  AC_MSG_NOTICE([Setting "LOAD_ALL_MODULES" to $LOAD_ALL_MODULES])
588],
589[
590  LOAD_ALL_MODULES="no"
591])
592
593AC_ARG_ENABLE(maintainer-mode,APACHE_HELP_STRING(--enable-maintainer-mode,Turn on debugging and compile time warnings and load all compiled modules),
594[
595  if test "$enableval" = "yes"; then
596    APR_ADDTO(CPPFLAGS, -DAP_DEBUG)
597    if test "$GCC" = "yes"; then
598      APR_ADDTO(CFLAGS,[-Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Wpointer-arith])
599      APACHE_ADD_GCC_CFLAG([-Wdeclaration-after-statement])
600      APACHE_ADD_GCC_CFLAG([-Werror=declaration-after-statement])
601      APACHE_ADD_GCC_CFLAG([-Wformat])
602      APACHE_ADD_GCC_CFLAG([-Wformat-security])
603      APACHE_ADD_GCC_CFLAG([-Werror=format-security])
604    elif test "$AIX_XLC" = "yes"; then
605      APR_ADDTO(CFLAGS,-qfullpath -qinitauto=FE -qcheck=all -qinfo=pro)
606    fi
607    if test "x$enable_load_all_modules" = "x"; then
608      LOAD_ALL_MODULES=yes
609      AC_MSG_NOTICE([Maintainer mode setting "LOAD_ALL_MODULES" to $LOAD_ALL_MODULES])
610    fi
611    if test "x$enable_bucketeer" = "x"; then
612      enable_bucketeer=yes
613      AC_MSG_NOTICE([Maintainer mode setting "enable_bucketeer" to yes])
614    fi
615  fi
616])dnl
617
618AC_ARG_ENABLE(debugger-mode,APACHE_HELP_STRING(--enable-debugger-mode,Turn on debugging and compile time warnings and turn off optimization),
619[
620  if test "$enableval" = "yes"; then
621    APR_ADDTO(CPPFLAGS, -DAP_DEBUG)
622    if test "$GCC" = "yes"; then
623      APR_ADDTO(CFLAGS,[-Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Wpointer-arith -O0])
624      APACHE_ADD_GCC_CFLAG([-Wdeclaration-after-statement])
625      APACHE_ADD_GCC_CFLAG([-Werror=declaration-after-statement])
626      APACHE_ADD_GCC_CFLAG([-Wformat])
627      APACHE_ADD_GCC_CFLAG([-Wformat-security])
628      APACHE_ADD_GCC_CFLAG([-Werror=format-security])
629    elif test "$AIX_XLC" = "yes"; then
630      APR_ADDTO(CFLAGS,-qfullpath -qinitauto=FE -qcheck=all -qinfo=pro)
631    fi
632  fi
633])dnl
634
635dnl Conditionally enable PIE support for GNU toolchains.
636AC_ARG_ENABLE(pie,APACHE_HELP_STRING(--enable-pie,Build httpd as a Position Independent Executable))
637if test "$enable_pie" = "yes"; then
638   AC_CACHE_CHECK([whether $CC accepts PIE flags], [ap_cv_cc_pie], [
639     save_CFLAGS=$CFLAGS
640     save_LDFLAGS=$LDFLAGS
641     CFLAGS="$CFLAGS -fPIE"
642     LDFLAGS="$LDFLAGS -pie"
643     AC_TRY_RUN([static int foo[30000]; int main () { return 0; }],
644      [ap_cv_cc_pie=yes], [ap_cv_cc_pie=no], [ap_cv_cc_pie=yes])
645     CFLAGS=$save_CFLAGS
646     LDFLAGS=$save_LDFLAGS
647   ])
648   if test "$ap_cv_cc_pie" = "yes"; then
649     PICFLAGS="-fPIE"
650     PILDFLAGS="-pie"
651   else
652     AC_ERROR([--enable-pie requested but $CC failed using PIE flags])
653   fi
654fi
655APACHE_SUBST(PICFLAGS)
656APACHE_SUBST(PILDFLAGS)
657
658prefix="$orig_prefix"
659APACHE_ENABLE_MODULES
660
661dnl reading config stubs
662esyscmd(./build/config-stubs .)
663
664APACHE_SUBST(progname)
665APACHE_SUBST(OS)
666APACHE_SUBST(OS_DIR)
667APACHE_SUBST(BUILTIN_LIBS)
668APACHE_SUBST(SHLIBPATH_VAR)
669APACHE_SUBST(OS_SPECIFIC_VARS)
670
671PRE_SHARED_CMDS='echo ""'
672POST_SHARED_CMDS='echo ""'
673
674dnl apache_need_shared tells us if Apache modules are being built as DSOs
675
676if test "$apache_need_shared" = "yes"; then
677  if test -f $ac_aux_dir/ltconfig; then
678    $SHELL $ac_aux_dir/ltconfig --output=shlibtool --disable-static --srcdir=$ac_aux_dir --cache-file=./config.cache $ac_aux_dir/ltmain.sh
679  fi
680  shared_build="shared-build"
681fi
682
683dnl enable_so tells us if *any* modules can be built as DSOs
684
685if test "$enable_so" = "yes" -o "$enable_so" = "static"; then
686  case $host in
687    *-ibm-aix*)
688      APR_ADDTO(HTTPD_LDFLAGS, [-Wl,-uXML_Parse -Wl,-bE:$abs_builddir/server/httpd.exp])
689      APR_ADDTO(SH_LDFLAGS, [\$(EXTRA_LDFLAGS) \$(EXTRA_LIBS)])
690      APR_ADDTO(UTIL_LDFLAGS, [-Wl,-uXML_Parse])
691      ;;
692    *os390)
693      APR_ADDTO(HTTPD_LDFLAGS, [--main=$abs_srcdir/server/main.o --core-dll=$abs_srcdir/apachecore.dll])
694      APR_ADDTO(SH_LDFLAGS, [--core-dll=$abs_srcdir/apachecore.dll])
695  esac
696  MOD_SO_ENABLED=yes
697fi
698AC_SUBST(MOD_SO_ENABLED)
699
700APACHE_SUBST(PRE_SHARED_CMDS)
701APACHE_SUBST(POST_SHARED_CMDS)
702APACHE_SUBST(shared_build)
703
704AC_ARG_WITH(program-name,
705APACHE_HELP_STRING(--with-program-name,alternate executable name),[
706  progname="$withval" ], [
707  progname="httpd"] )
708
709# SuExec parameters
710AC_ARG_WITH(suexec-bin,
711APACHE_HELP_STRING(--with-suexec-bin,Path to suexec binary),[
712  AC_DEFINE_UNQUOTED(SUEXEC_BIN, "$withval", [Path to suexec binary] )
713] )
714
715AC_ARG_WITH(suexec-caller,
716APACHE_HELP_STRING(--with-suexec-caller,User allowed to call SuExec),[
717  AC_DEFINE_UNQUOTED(AP_HTTPD_USER, "$withval", [User allowed to call SuExec] ) ] )
718
719AC_ARG_WITH(suexec-userdir,
720APACHE_HELP_STRING(--with-suexec-userdir,User subdirectory),[
721  AC_DEFINE_UNQUOTED(AP_USERDIR_SUFFIX, "$withval", [User subdirectory] ) ] )
722
723AC_ARG_WITH(suexec-docroot,
724APACHE_HELP_STRING(--with-suexec-docroot,SuExec root directory),[
725  AC_DEFINE_UNQUOTED(AP_DOC_ROOT, "$withval", [SuExec root directory] ) ] )
726
727AC_ARG_WITH(suexec-uidmin,
728APACHE_HELP_STRING(--with-suexec-uidmin,Minimal allowed UID),[
729  AC_DEFINE_UNQUOTED(AP_UID_MIN, $withval, [Minimum allowed UID] ) ] )
730
731AC_ARG_WITH(suexec-gidmin,
732APACHE_HELP_STRING(--with-suexec-gidmin,Minimal allowed GID),[
733  AC_DEFINE_UNQUOTED(AP_GID_MIN, $withval, [Minimum allowed GID] ) ] )
734
735AC_ARG_WITH(suexec-logfile,
736APACHE_HELP_STRING(--with-suexec-logfile,Set the logfile),[
737  AC_DEFINE_UNQUOTED(AP_LOG_EXEC, "$withval", [SuExec log file] ) ] )
738
739AC_ARG_WITH(suexec-safepath,
740APACHE_HELP_STRING(--with-suexec-safepath,Set the safepath),[
741  AC_DEFINE_UNQUOTED(AP_SAFE_PATH, "$withval", [safe shell path for SuExec] ) ] )
742
743AC_ARG_WITH(suexec-umask,
744APACHE_HELP_STRING(--with-suexec-umask,umask for suexec'd process),[
745  AC_DEFINE_UNQUOTED(AP_SUEXEC_UMASK, 0$withval, [umask for suexec'd process] ) ] )
746
747dnl APR should go after the other libs, so the right symbols can be picked up
748if test x${apu_found} != xobsolete; then
749  AP_LIBS="$AP_LIBS `$apu_config --avoid-ldap --link-libtool --libs`"
750fi
751AP_LIBS="$AP_LIBS `$apr_config --link-libtool --libs`" 
752APACHE_SUBST(AP_LIBS)
753APACHE_SUBST(AP_BUILD_SRCLIB_DIRS)
754APACHE_SUBST(AP_CLEAN_SRCLIB_DIRS)
755
756AC_DEFINE(AP_USING_AUTOCONF, 1,
757		[Using autoconf to configure Apache])
758
759if test "$SINGLE_LISTEN_UNSERIALIZED_ACCEPT" = "1"; then
760    AC_DEFINE(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, 1, 
761              [This platform doesn't suffer from the thundering herd problem])
762fi
763
764if test "$AP_NONBLOCK_WHEN_MULTI_LISTEN" = "1"; then
765    AC_DEFINE(AP_NONBLOCK_WHEN_MULTI_LISTEN, 1, 
766              [Listening sockets are non-blocking when there are more than 1])
767fi
768
769APR_CHECK_APR_DEFINE(APR_HAVE_IPV6)
770
771AC_ARG_ENABLE(v4-mapped,APACHE_HELP_STRING(--enable-v4-mapped,Allow IPv6 sockets to handle IPv4 connections),
772[ 
773  v4mapped=$enableval
774],
775[
776    case $host in
777    *freebsd[1234].*)
778        v4mapped=yes
779        ;;
780    *freebsd*|*netbsd*|*openbsd*)
781        v4mapped=no
782        ;;
783    *)
784        v4mapped=yes
785        ;;
786    esac
787    if ap_mpm_is_enabled winnt; then
788        dnl WinNT MPM doesn't support this.
789        v4mapped=no
790    fi
791])
792
793if test $v4mapped = "yes" -a $ac_cv_define_APR_HAVE_IPV6 = "yes"; then
794    AC_DEFINE(AP_ENABLE_V4_MAPPED, 1,
795              [Allow IPv4 connections on IPv6 listening sockets])
796fi
797
798APACHE_FAST_OUTPUT(Makefile modules/Makefile srclib/Makefile) 
799APACHE_FAST_OUTPUT(os/Makefile server/Makefile)
800APACHE_FAST_OUTPUT(support/Makefile)
801
802if test -d ./test; then
803    APACHE_FAST_OUTPUT(test/Makefile)
804fi
805
806dnl ## Finalize the variables
807AC_MSG_NOTICE([])
808AC_MSG_NOTICE([Restore user-defined environment settings...])
809AC_MSG_NOTICE([])
810
811APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, EXTRA_)
812APR_RESTORE_THE_ENVIRONMENT(CFLAGS, EXTRA_)
813APR_RESTORE_THE_ENVIRONMENT(CXXFLAGS, EXTRA_)
814APR_RESTORE_THE_ENVIRONMENT(LDFLAGS, EXTRA_)
815APR_RESTORE_THE_ENVIRONMENT(LIBS, EXTRA_)
816APR_RESTORE_THE_ENVIRONMENT(INCLUDES, EXTRA_)
817
818AC_MSG_NOTICE([])
819AC_MSG_NOTICE([Construct makefiles and header files...])
820AC_MSG_NOTICE([])
821
822APACHE_GEN_CONFIG_VARS
823
824dnl ## Build modules.c
825rm -f modules.c
826echo $MODLIST | $AWK -f $srcdir/build/build-modules-c.awk > modules.c
827
828APR_EXPAND_VAR(ap_prefix, $prefix)
829AC_DEFINE_UNQUOTED(HTTPD_ROOT, "${ap_prefix}",
830	[Root directory of the Apache install area])
831AC_DEFINE_UNQUOTED(SERVER_CONFIG_FILE, "${rel_sysconfdir}/${progname}.conf",
832	[Location of the config file, relative to the Apache root directory])
833AC_DEFINE_UNQUOTED(AP_TYPES_CONFIG_FILE, "${rel_sysconfdir}/mime.types",
834	[Location of the MIME types config file, relative to the Apache root directory])
835
836perlbin=`$ac_aux_dir/PrintPath perl`
837if test "x$perlbin" = "x"; then
838    perlbin="/replace/with/path/to/perl/interpreter"
839fi
840AC_SUBST(perlbin)
841
842dnl If we are running on BSD/OS, we need to use the BSD .include syntax.
843
844BSD_MAKEFILE=no
845ap_make_include=include
846ap_make_delimiter=' '
847case $host in
848*bsdi*)
849    # Check whether they've installed GNU make
850    if make --version > /dev/null 2>&1; then
851        true
852    else
853        BSD_MAKEFILE=yes
854        ap_make_include=.include
855        ap_make_delimiter='"'
856    fi
857    ;;
858esac
859AC_SUBST(ap_make_include)
860AC_SUBST(ap_make_delimiter)
861
862dnl Ensure that docs/conf is created.
863test -d docs/conf||$mkdir_p docs/conf
864
865AC_OUTPUT($APACHE_OUTPUT_FILES docs/conf/httpd.conf docs/conf/extra/httpd-autoindex.conf docs/conf/extra/httpd-dav.conf docs/conf/extra/httpd-default.conf docs/conf/extra/httpd-info.conf docs/conf/extra/httpd-languages.conf docs/conf/extra/httpd-manual.conf docs/conf/extra/httpd-mpm.conf docs/conf/extra/httpd-multilang-errordoc.conf docs/conf/extra/httpd-ssl.conf docs/conf/extra/httpd-userdir.conf docs/conf/extra/httpd-vhosts.conf docs/conf/extra/proxy-html.conf include/ap_config_layout.h support/apxs support/apachectl support/dbmmanage support/envvars-std support/log_server_status support/logresolve.pl support/phf_abuse_log.cgi support/split-logfile build/rules.mk build/pkg/pkginfo build/config_vars.sh,[true],[
866  APACHE_GEN_MAKEFILES
867])
868