# ====================================================================
# The Apache Software License, Version 1.1
#
# Copyright (c) 2000-2002 The Apache Software Foundation. All rights
# reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# 3. The end-user documentation included with the redistribution,
# if any, must include the following acknowledgment:
# "This product includes software developed by the
# Apache Software Foundation (http://www.apache.org/)."
# Alternately, this acknowledgment may appear in the software itself,
# if and wherever such third-party acknowledgments normally appear.
#
# 4. The names "Apache" and "Apache Software Foundation" must
# not be used to endorse or promote products derived from this
# software without prior written permission. For written
# permission, please contact apache@apache.org.
#
# 5. Products derived from this software may not be called "Apache",
# "mod_python", or "modpython", nor may these terms appear in their
# name, without prior written permission of the Apache Software
# Foundation.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
# ====================================================================
#
# This software consists of voluntary contributions made by many
# individuals on behalf of the Apache Software Foundation. For more
# information on the Apache Software Foundation, please see
# .
#
# Originally developed by Gregory Trubetskoy
#
dnl Process this file with autoconf to produce a configure script.
AC_INIT(src/mod_python.c)
# includes
INCLUDES="-I`pwd`/src/include"
dnl Checks for programs.
AC_PROG_CC
AC_SUBST(AR)
AC_CHECK_PROGS(AR, ar aal, ar)
AC_PROG_INSTALL
AC_PROG_MAKE_SET
dnl Replace `main' with a function in -lm:
AC_CHECK_LIB(m, main)
dnl Checks for header files.
dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
### humor lowers blood pressure
AC_MSG_CHECKING(your blood pressure)
AC_MSG_RESULT([a bit high, but we can proceed])
## The goal is to find apxs
AC_CHECKING(whether apxs is available)
AC_SUBST(APXS)
AC_SUBST(DSO)
AC_SUBST(ALL)
# check for --with-apxs
AC_MSG_CHECKING(for --with-apxs)
AC_ARG_WITH(apxs, [--with-apxs=PATH Path to apxs],
[
if test -x "$withval"
then
AC_MSG_RESULT([$withval executable, good])
APXS=$withval
else
echo
AC_MSG_ERROR([$withval not found or not executable])
fi
],
AC_MSG_RESULT(no))
# if no apxs found yet, check /usr/local/apache/sbin
# since it's the default Apache location
if test -z "$APXS"; then
AC_MSG_CHECKING(for apxs in /usr/local/apache/sbin)
if test -x /usr/local/apache/sbin/apxs; then
APXS=/usr/local/apache/sbin/apxs
AC_MSG_RESULT([found, we'll use this. Use --with-apxs to specify another.])
else
AC_MSG_RESULT(no)
fi
fi
# last resort
if test -z "$APXS"; then
AC_MSG_CHECKING(for apxs in your PATH)
AC_PATH_PROG(APXS, apxs)
if test -n "$APXS"; then
AC_MSG_RESULT([found $APXS, we'll use this. Use --with-apxs to specify another.])
fi
fi
# if apxs was still not found, then no DSO
AC_SUBST(LIBEXECDIR)
AC_SUBST(EPRINTF_HACK)
AC_SUBST(FLOATDIDF_HACK)
AC_SUBST(HTTPD)
if test -z "$APXS"; then
AC_MSG_WARN([**** apxs was not found, DSO compilation will not be available.])
AC_MSG_WARN([**** You can use --with-apxs to specify where your apxs is.])
DSO="no_dso"
ALL="static"
else
DSO="do_dso"
ALL="dso"
# check Apache version
AC_MSG_CHECKING(Apache version)
HTTPD="`${APXS} -q SBINDIR`/`${APXS} -q TARGET`"
ver=`$HTTPD -v | awk '/version/ {print $3}' | awk -F/ '{print $2}'`
AC_MSG_RESULT($ver)
# make version begins with 2
if test -z "`echo $ver | egrep \^2`"; then
AC_MSG_ERROR([This version of mod_python only works with Apache 2. The one you have seems to be $ver.])
fi
# determine LIBEXEC
AC_MSG_CHECKING(for Apache libexec directory)
LIBEXECDIR=`${APXS} -q LIBEXECDIR`
AC_MSG_RESULT($LIBEXECDIR)
# determine INCLUDES
AC_MSG_CHECKING([for Apache include directory])
AP_INCLUDES="-I`${APXS} -q INCLUDEDIR`"
AC_MSG_RESULT($AP_INCLUDES)
dnl Small hack to work around _eprintf.o problem on Solaris
if test "`uname`" = "SunOS"; then
AC_MSG_CHECKING([for gcc on Solaris possible missing _eprintf problem])
if test "$CC" = "gcc"; then
EPRINTF_HACK="_eprintf.o"
FLOATDIDF_HACK="_floatdidf.o"
fi
AC_MSG_RESULT("done")
fi
fi
# check for --with-apache
AC_SUBST(AP_SRC)
AC_SUBST(AP_SRC_OWN)
AC_SUBST(AP_SRC_GRP)
## static is disabled, thus no --with-apache
##AC_MSG_CHECKING(for --with-apache)
AC_ARG_WITH(apache, [--with-apache=DIR Path to Apache sources],
[
# temporarily disable static on 2.0 until I figure out how to
# do it right
AC_MSG_ERROR([Sorry, --with-apache (static compilation) is not supported at this time!])
AP_SRC=`cd $withval; pwd`
dnl Make sure this looks like Apache source
if test ! -f "$AP_SRC/include/httpd.h"; then
AC_MSG_ERROR([$withval does not look like an Apache 2.0 source directory.])
fi
AC_MSG_RESULT($AP_SRC)
AP_INCLUDES="-I${AP_SRC}/src/include -I${AP_SRC}/src/os/unix"
# note who owns the apache source directory
AP_SRC_OWN="`ls -ld $AP_SRC | awk '{print $3}'`"
AP_SRC_GRP="`ls -ld $AP_SRC | awk '{print $4}'`"
],)
##AC_MSG_RESULT(no))
AC_SUBST(STATIC)
if test -z "$AP_SRC"; then
## AC_MSG_WARN([**** No apache sources specified, static compilation will not be available.])
## AC_MSG_WARN([**** You can use --with-apache to specify where your Apache sources are.])
STATIC="no_static"
else
STATIC="do_static"
fi
if test "$STATIC" = "no_static" -a "$DSO" = "no_dso"; then
AC_MSG_ERROR([Neither static nor DSO option available, there is no point in continuing.])
fi
AC_MSG_CHECKING(for --with-python)
AC_ARG_WITH(python, [--with-python=DIR Path to Python sources],
[
AC_SUBST(PYTHON_SRC)
PYTHON_SRC=`cd $withval; pwd`
AC_MSG_RESULT($PYTHON_SRC)
],
AC_MSG_RESULT(no))
# check for Python executable
if test -z "$PYTHON_SRC"; then
AC_PATH_PROG(PYTHON_BIN, python)
if test -z "$PYTHON_BIN"; then
AC_MSG_ERROR(python binary not found)
fi
else
AC_PATH_PROG(PYTHON_BIN, python, "", $PYTHON_SRC)
if test -z "$PYTHON_BIN"; then
AC_MSG_ERROR([python executable not found in ${withval},
perhaps you need to build Python first.])
fi
fi
# find out python version
AC_MSG_CHECKING(Python version)
PyVERSION=`$PYTHON_BIN -c ['import sys; print sys.version[:3]'`]
PyMAJVERSION=`$PYTHON_BIN -c ['import sys; print sys.version[:1]'`]
AC_MSG_RESULT($PyVERSION)
# find out compiled in install prefix
AC_MSG_CHECKING(Python install prefix)
PyEXEC_INSTALLDIR=`$PYTHON_BIN -c "import sys; print sys.exec_prefix"`
AC_MSG_RESULT($PyEXEC_INSTALLDIR)
# this is where the Python libraries will get installed
AC_SUBST(PY_STD_LIB)
PY_STD_LIB=${PyEXEC_INSTALLDIR}/lib/python${PyVERSION}
# set python std library variable
AC_MSG_CHECKING(what libraries Python was linked with)
AC_SUBST(LIBS)
if test -z "$PYTHON_SRC"; then
PyLIBP=${PyEXEC_INSTALLDIR}/lib/python${PyVERSION}
PyLIBPL=${PyLIBP}/config
PyPYTHONLIBS=${PyLIBPL}/libpython${PyVERSION}.a
PyLIBS=`grep "^LIB[[SMC]]=" ${PyLIBPL}/Makefile | cut -f2 -d= | tr '\011\012\015' ' '`
PyMODLIBS=`grep "^LOCALMODLIBS=" ${PyLIBPL}/Makefile | cut -f2 -d= | tr '\011\012\015' ' '`
PY_LIBS="${PyPYTHONLIBS} ${PyLIBS} ${PyMODLIBS}"
else
PyPYTHONLIBS=${PYTHON_SRC}/libpython${PyVERSION}.a
if test ${PyMAJVERSION} = "2"; then
PyLIBS=`grep "^LIB[[SMC]]=" ${PYTHON_SRC}/Makefile | cut -f2 -d= | tr '\011\012\015' ' '`
PyMODLIBS=`grep "^LOCALMODLIBS=" ${PYTHON_SRC}/Makefile | cut -f2 -d= | tr '\011\012\015' ' '`
else
PyLIBS=`grep "^LIB[[SMC]]=" ${PYTHON_SRC}/Modules/Makefile | cut -f2 -d= | tr '\011\012\015' ' '`
PyMODLIBS=`grep "^LOCALMODLIBS=" ${PYTHON_SRC}/Modules/Makefile | cut -f2 -d= | tr '\011\012\015' ' '`
fi
PY_LIBS="${PyPYTHONLIBS} ${PyLIBS} ${PyMODLIBS}"
fi
## XXX this is a small work around for a weird RedHat problem
## erase -lieee from library list
if test -f /etc/redhat-release; then
PY_LIBS="`echo $PY_LIBS | sed s/-lieee//`"
fi
LIBS="${LIBS} ${PY_LIBS}"
AC_MSG_RESULT($PY_LIBS)
AC_MSG_CHECKING(linker flags used to link Python)
AC_SUBST(LDFLAGS)
if test -z "$PYTHON_SRC"; then
PyLFS=`grep "^LINKFORSHARED=" ${PyLIBPL}/Makefile | cut -f2 -d= | tr '\011\012\015' ' '`
PyLDFLAGS=`grep "^LDFLAGS=" ${PyLIBPL}/Makefile | cut -f2 -d= | tr '\011\012\015' ' '`
LDFLAGS="${LDFLAGS} ${PyLFS} ${PyLDFLAGS}"
else
PyLFS=`grep "^LINKFORSHARED=" ${PYTHON_SRC}/Makefile | cut -f2 -d= | tr '\011\012\015' ' '`
PyLDFLAGS=`grep "^LDFLAGS=" ${PYTHON_SRC}/Makefile | cut -f2 -d= | tr '\011\012\015' ' '`
PY_LDFLAGS="${PyLFS} ${PyLDFLAGS}"
fi
LDFLAGS="${LDFLAGS} ${PY_LDFLAGS}"
AC_MSG_RESULT($PY_LDFLAGS)
AC_MSG_CHECKING(where Python include files are)
AC_SUBST(INCLUDES)
if test -z "$PYTHON_SRC"; then
PY_INCLUDES="-I${PyEXEC_INSTALLDIR}/include/python${PyVERSION}"
else
PY_INCLUDES="-I${PYTHON_SRC} -I${PYTHON_SRC}/Include"
fi
INCLUDES="${INCLUDES} ${AP_INCLUDES} ${PY_INCLUDES}"
AC_MSG_RESULT($PY_INCLUDES)
AC_SUBST(MKDEP)
# see if we have mkdep
AC_PATH_PROG(MKDEP, "mkdep")
if test -z "${MKDEP}"; then
# or makedepend
AC_PATH_PROG(MKDEP, "makedepend")
fi
# this for the test.py script
AC_SUBST(TEST_SERVER_ROOT)
TEST_SERVER_ROOT="`pwd`/test"
AC_SUBST(MOD_PYTHON_SO)
MOD_PYTHON_SO="`pwd`/src/mod_python.so"
AC_OUTPUT(Makefile src/Makefile src/libpython.module Doc/Makefile test/testconf.py)
if test -n "$MKDEP"; then
# make dependencies
echo "analyzing dependencies"
cd src
make depend > /dev/null 2>&1
fi