Source

Apache HTTP Server / configure.in

Full commit
dnl
dnl Autoconf configuration for Apache httpd
dnl
dnl     Use ./buildconf to produce a configure script
dnl

AC_PREREQ(2.13)
AC_INIT(ABOUT_APACHE)

AC_CONFIG_HEADER(include/ap_config_auto.h)
AC_CONFIG_AUX_DIR(srclib/apr/build)

dnl #
dnl # Include our own M4 macros along with those for APR and libtool
dnl #
sinclude(srclib/apr/build/apr_common.m4)
sinclude(srclib/apr/build/apr_network.m4)
sinclude(srclib/apr/build/apr_threads.m4)
sinclude(acinclude.m4)

dnl Save user-defined environment settings for later restoration
dnl
APR_SAVE_THE_ENVIRONMENT(CPPFLAGS)
APR_SAVE_THE_ENVIRONMENT(CFLAGS)
APR_SAVE_THE_ENVIRONMENT(CXXFLAGS)
APR_SAVE_THE_ENVIRONMENT(LDFLAGS)
APR_SAVE_THE_ENVIRONMENT(LIBS)
APR_SAVE_THE_ENVIRONMENT(INCLUDES)

dnl Generate ./config.nice for reproducing runs of configure
dnl
APR_CONFIG_NICE(config.nice)

nl='
'

dnl XXX we can't just use AC_PREFIX_DEFAULT because that isn't subbed in
dnl by configure until it is too late.  Is that how it should be or not?
dnl Something seems broken here.
AC_PREFIX_DEFAULT(/usr/local/apache2)
test "$prefix" = "NONE" && prefix='/usr/local/apache2'
test "$exec_prefix" = "NONE" && exec_prefix='${prefix}'

dnl ## Run configure for packages Apache uses

echo $ac_n "${nl}Configuring Apache Portable Runtime library ...${nl}"

APR_SUBDIR_CONFIG(srclib/apr, "$apache_apr_flags --disable-shared --prefix=$prefix")

echo $ac_n "${nl}Configuring Apache Portable Runtime Utility library...${nl}"

APR_SUBDIR_CONFIG(srclib/apr-util, "--with-apr=../apr --disable-shared --prefix=$prefix")

echo $ac_n "${nl}Configuring PCRE regular expression library ...${nl}"

APR_SUBDIR_CONFIG(srclib/pcre, "--prefix=$prefix")

echo $ac_n "${nl}Configuring Apache httpd ...${nl}"

echo $ac_n "obtaining flag settings from the sub-configures...${nl}"
. ./srclib/apr/APRVARS

dnl Now that we have APR's EXTRA_flags in our environment, move them over
dnl to the normal variables to avoid duplications and use them for testing.
dnl We ignore EXTRA_INCLUDES because our own includes will encompass them.
dnl
APR_ADDTO(CFLAGS, $EXTRA_CFLAGS)
APR_ADDTO(CPPFLAGS, $EXTRA_CPPFLAGS)
APR_ADDTO(LDFLAGS, $EXTRA_LDFLAGS)
APR_ADDTO(LIBS, $EXTRA_LIBS)
EXTRA_CFLAGS=
EXTRA_CPPFLAGS=
EXTRA_LDFLAGS=
EXTRA_LIBS=
EXTRA_INCLUDES=

dnl Absolute source/build directory
abs_srcdir=`(cd $srcdir && pwd)`
abs_builddir=`pwd`

dnl If the source dir is not equal to the build dir, 
dnl then we are running in VPATH mode.

if test "$abs_builddir" != "$abs_srcdir"; then
  USE_VPATH=1
  APR_ADDTO(INCLUDES, [-I. -I\$(srcdir) -I\$(top_builddir)/os/\$(OS_DIR) -I\$(top_srcdir)/os/\$(OS_DIR) -I\$(top_builddir)/server/mpm/\$(MPM_NAME) -I\$(top_srcdir)/server/mpm/\$(MPM_NAME) -I\$(top_builddir)/modules/http -I\$(top_srcdir)/modules/http -I\$(top_builddir)/include -I\$(top_srcdir)/include -I\$(top_builddir)/srclib/apr/include -I\$(top_srcdir)/srclib/apr/include -I\$(top_builddir)/srclib/apr-util/include -I\$(top_srcdir)/srclib/apr-util/include])
else
  APR_ADDTO(INCLUDES, [-I. -I\$(top_srcdir)/os/\$(OS_DIR) -I\$(top_srcdir)/server/mpm/\$(MPM_NAME) -I\$(top_srcdir)/modules/http -I\$(top_srcdir)/include -I\$(top_srcdir)/srclib/apr/include -I\$(top_srcdir)/srclib/apr-util/include])
fi

echo $ac_n "${nl}Applying OS-specific hints for httpd ...${nl}"

AC_CANONICAL_SYSTEM

case $host in
  *os2*)
      # Use a custom made libtool replacement
      echo "using aplibtool"
      LIBTOOL="$abs_srcdir/srclib/apr/build/aplibtool"
      SH_LIBTOOL="$LIBTOOL --shared --export-all"
      CORE_IMPLIB_FILE="ApacheCoreOS2.la"
      CORE_IMPLIB="$abs_srcdir/server/$CORE_IMPLIB_FILE"
      MK_IMPLIB="emximp"
      other_targets="$other_targets os2core"
      ;;
  *)
      if test "x$LTFLAGS" = "x"; then
          LTFLAGS='--silent'
      fi
      LIBTOOL='$(SHELL) $(top_builddir)/srclib/apr/libtool $(LTFLAGS)'
      SH_LIBTOOL='$(SHELL) $(top_builddir)/shlibtool $(LTFLAGS)'
      ;;
esac

case $host in
  *-apple-aux3*)
      APR_SETVAR(APACHE_MPM, [prefork])
      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
      ;;
  *-beos*)
      APR_SETVAR(APACHE_MPM, [beos])
      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
      ;;
  *os2_emx*)
      APR_SETVAR(APACHE_MPM, [spmt_os2])
      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
      ;;
  *-linux-*)
      case `uname -r` in
        2.[[2-9]]* ) APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
            ;;
        * )
            ;;
      esac
      ;;
  *486-*-bsdi* | *-netbsd* | *-freebsd* | *-apple-darwin* | *-dec-osf* | *-qnx)
      APR_SETVAR(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, [1])
      ;;
  *-solaris2*)
      dnl  This is a hack -- we should be using AC_TRY_RUN instead
      ap_platform_runtime_link_flag="-R"
      ;;
esac

dnl
dnl Process command line arguments. This is done early in the process so the
dnl user can get feedback quickly in case of an error.
dnl
dnl ### need to move some of the arguments "up here"

dnl ## Check for programs

AC_PATH_PROG(RM, rm)
AC_PROG_AWK
AC_PROG_CC
AC_PROG_CPP
AC_PROG_INSTALL
AC_PROG_LN_S
AC_CHECK_TOOL(RANLIB, ranlib, true)
dnl AC_PATH_PROG(PERL_PATH, perl)

dnl various OS checks that apparently set required flags
AC_AIX
AC_ISC_POSIX
AC_MINIX

dnl ## Check for libraries

dnl ## Check for header files

dnl I think these are just used all over the place, so just check for
dnl them at the base of the tree. If some are specific to a single
dnl directory, they should be moved (Comment #Spoon)

dnl Regarding standard header files: AC_HEADER_STDC doesn't set symbols
dnl HAVE_STRING_H, HAVE_STDLIB_H, etc., so those are checked for
dnl explicitly so that the normal HAVE_xxx_H symbol is defined.

AC_HEADER_STDC
AC_CHECK_HEADERS( \
string.h \
limits.h \
unistd.h \
sys/socket.h \
pwd.h \
grp.h \
strings.h \
sys/processor.h
)
AC_HEADER_SYS_WAIT

dnl ## Check for typedefs, structures, and compiler characteristics.

AC_C_CONST
if test "$ac_cv_prog_gcc" = "yes"; then
  APR_ADDTO(NOTEST_CPPFLAGS,-DAP_HAVE_DESIGNATED_INITIALIZER)
fi

dnl ## Check for library functions

dnl See Comment #Spoon

AC_CHECK_FUNCS( \
initgroups \
bindprocessor \
)

AC_CHECK_LIB(nsl, gethostbyname)
AC_CHECK_LIB(nsl, gethostname)
AC_CHECK_LIB(socket, socket)

AC_ARG_WITH(port,[  --with-port=PORT        Port on which to listen (default is 80)],
        [if test "$withval" = "yes"; then AC_MSG_ERROR('option --with-port requires a value (the TCP port number)'); else PORT="$withval"; fi],
	[PORT=80])

AC_ARG_ENABLE(maintainer-mode,[  --enable-maintainer-mode  Turn on debugging and compile time warnings],
[
  APR_ADDTO(CPPFLAGS, -DAP_DEBUG)
])dnl

APACHE_ENABLE_LAYOUT
APACHE_ENABLE_MODULES

dnl reading config stubs
esyscmd(./build/config-stubs .)

APACHE_SUBST(progname)
APACHE_SUBST(MPM_LIB)
APACHE_SUBST(OS)
APACHE_SUBST(OS_DIR)
APACHE_SUBST(BUILTIN_LIBS)

PRE_SHARED_CMDS='echo ""'
POST_SHARED_CMDS='echo ""'

if test "$apache_need_shared" = "yes"; then
  $SHELL $ac_aux_dir/ltconfig --output=shlibtool --disable-static --srcdir=$ac_aux_dir --cache-file=./config.cache $ac_aux_dir/ltmain.sh
  case $host in
    *-ibm-aix*)
      HTTPD_LDFLAGS="$HTTPD_LDFLAGS -Wl,-bE:$abs_srcdir/server/httpd.exp"
      SH_LDFLAGS="$SH_LDFLAGS -Wl,-bI:$abs_srcdir/server/httpd.exp"
      ;;
    *beos)
      SH_LDFLAGS='$(top_builddir)/_APP_'
      PRE_SHARED_CMDS='ln -s $(top_builddir)/httpd $(top_builddir)/_APP_'
      POST_SHARED_CMDS='rm $(top_builddir)/_APP_'
      ;;
    *os390)
      HTTPD_LDFLAGS="$HTTPD_LDFLAGS --main=$abs_srcdir/server/main.o --core-dll=$abs_srcdir/apachecore.dll"
      SH_LDFLAGS="$SH_LDFLAGS --core-dll=$abs_srcdir/apachecore.dll"
  esac
  shared_build="shared-build"
fi

APACHE_SUBST(PRE_SHARED_CMDS)
APACHE_SUBST(POST_SHARED_CMDS)
APACHE_SUBST(shared_build)

AC_ARG_WITH(program-name,
[  --with-program-name     alternate executable name],[
  progname="$withval" ], [
  progname="httpd"] )

# SuExec parameters
AC_ARG_WITH(suexec-caller,
[  --with-suexec-caller    User allowed to call SuExec],[
  AC_DEFINE_UNQUOTED(AP_HTTPD_USER, "$withval", [User allowed to call SuExec] ) ] )

AC_ARG_WITH(suexec-userdir,
[  --with-suexec-userdir   User subdirectory],[
  AC_DEFINE_UNQUOTED(AP_USERDIR_SUFFIX, "$withval", [User subdirectory] ) ] )

AC_ARG_WITH(suexec-docroot,
[  --with-suexec-docroot   SuExec root directory],[
  AC_DEFINE_UNQUOTED(AP_DOC_ROOT, "$withval", [SuExec root directory] ) ] )

AC_ARG_WITH(suexec-uidmin,
[  --with-suexec-uidmin    Minimal allowed UID],[
  AC_DEFINE_UNQUOTED(AP_UID_MIN, $withval, [Minimum allowed UID] ) ] )

AC_ARG_WITH(suexec-gidmin,
[  --with-suexec-gidmin    Minimal allowed GID],[
  AC_DEFINE_UNQUOTED(AP_GID_MIN, $withval, [Minimum allowed GID] ) ] )

AC_ARG_WITH(suexec-logfile,
[  --with-suexec-logfile   Set the logfile],[
  AC_DEFINE_UNQUOTED(AP_LOG_EXEC, "$withval", [SuExec log file] ) ] )

AC_ARG_WITH(suexec-safepath,
[  --with-suexec-safepath  Set the safepath],[
  AC_DEFINE_UNQUOTED(AP_SAFE_PATH, "$withval", [safe shell path for SuExec] ) ] )

AC_ARG_WITH(suexec-umask,
[  --with-suexec-umask     umask for suexec'd process],[
  AC_DEFINE_UNQUOTED(AP_SUEXEC_UMASK, 0$withval, [umask for suexec'd process] ) ] )

dnl AP_LIB_DIRS specifies the additional libs from srclib/ that we need
dnl AP_LIBS specifies the actual libraries. note we have some required libs.
AP_LIBS="$abs_builddir/srclib/pcre/libpcre.la $abs_builddir/srclib/apr-util/libaprutil.la $AP_LIBS"

dnl APR should go after the other libs, so the right symbols can be picked up
AP_LIBS="$AP_LIBS $abs_builddir/srclib/apr/libapr.la"
APACHE_SUBST(AP_LIB_DIRS)
APACHE_SUBST(AP_LIBS)

AC_DEFINE(AP_USING_AUTOCONF, 1,
		[Using autoconf to configure Apache])

if test "$SINGLE_LISTEN_UNSERIALIZED_ACCEPT" = "1"; then
    AC_DEFINE(SINGLE_LISTEN_UNSERIALIZED_ACCEPT, 1, 
              [This platform doesn't suffer from the thundering herd problem])
fi

dnl check for endianness
if test "$cross_compiling" = "no"; then
  AC_C_BIGENDIAN
else
  AC_DEFINE(AP_UNKNOWN_BYTE_ORDER,1,
		[byte order is unknown due to cross-compilation])
fi

APACHE_FAST_OUTPUT(Makefile modules/Makefile srclib/Makefile) 
APACHE_FAST_OUTPUT(os/beos/Makefile os/os2/Makefile os/Makefile)
APACHE_FAST_OUTPUT(os/unix/Makefile server/Makefile)
APACHE_FAST_OUTPUT(support/Makefile srclib/pcre/Makefile)
for i in $AP_LIB_DIRS; do
  APACHE_FAST_OUTPUT(srclib/$i/Makefile)
done

if test -d ./test; then
    APACHE_FAST_OUTPUT(test/Makefile)
fi

dnl get the exported vars from APRUTIL
. ./srclib/apr-util/export_vars.sh
APR_ADDTO(LIBS, $APRUTIL_EXPORT_LIBS)
AP_LIBS="$AP_LIBS $LIBTOOL_LIBS"

dnl ## Finalize the variables
echo $ac_n "${nl}Restore user-defined environment settings...${nl}"

APR_RESTORE_THE_ENVIRONMENT(CPPFLAGS, EXTRA_)
APR_RESTORE_THE_ENVIRONMENT(CFLAGS, EXTRA_)
APR_RESTORE_THE_ENVIRONMENT(CXXFLAGS, EXTRA_)
APR_RESTORE_THE_ENVIRONMENT(LDFLAGS, EXTRA_)
APR_RESTORE_THE_ENVIRONMENT(LIBS, EXTRA_)
APR_RESTORE_THE_ENVIRONMENT(INCLUDES, EXTRA_)

echo $ac_n "${nl}Construct makefiles and header files...${nl}"

APACHE_GEN_CONFIG_VARS

dnl ## Build modules.c
rm -f modules.c
echo $MODLIST | $AWK -f $srcdir/build/build-modules-c.awk > modules.c

AC_DEFINE_UNQUOTED(HTTPD_ROOT, "$prefix",
	[Root directory of the Apache install area])
AC_DEFINE_UNQUOTED(SERVER_CONFIG_FILE, "conf/$progname.conf",
	[Location of the config file, relative to the Apache root directory])
AC_DEFINE_UNQUOTED(APACHE_MPM_DIR, "$MPM_DIR",
	[Location of the source for the current MPM])

perlbin=`$ac_aux_dir/PrintPath perl`
if test "x$perlbin" = "x"; then
    perlbin="/replace/with/path/to/perl/interpreter"
fi
AC_SUBST(perlbin)

dnl If we are running on BSD/OS, we need to use the BSD .include syntax.

BSD_MAKEFILE=no
case $host in
*bsdi*)
    # Check whether they've installed GNU make
    if make --version > /dev/null 2>&1; then
        true
    else
        BSD_MAKEFILE=yes
    fi
    ;;
esac

AC_OUTPUT($APACHE_OUTPUT_FILES support/apxs support/apachectl support/dbmmanage support/log_server_status support/logresolve.pl support/phf_abuse_log.cgi support/split-logfile,,[
  APACHE_GEN_MAKEFILES
])