summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Beck <beck@cvs.openbsd.org>1998-10-01 17:32:01 +0000
committerBob Beck <beck@cvs.openbsd.org>1998-10-01 17:32:01 +0000
commit8f5e08b37a1a9275c25c0c0a248537c90bde52a1 (patch)
tree7a65b3756948df65bee49d9d6fa5684d9f624e6b
parent6c54cc3766ef59fb999ebf73811f567517aadbe6 (diff)
minor change makes building in tree much easier.
-rw-r--r--usr.sbin/httpd/src/Configure1953
1 files changed, 1609 insertions, 344 deletions
diff --git a/usr.sbin/httpd/src/Configure b/usr.sbin/httpd/src/Configure
index 20af62be3f2..eafb1828701 100644
--- a/usr.sbin/httpd/src/Configure
+++ b/usr.sbin/httpd/src/Configure
@@ -1,28 +1,108 @@
#!/bin/sh
-trap 'rm -f $tmpfile; exit' 0 1 2 3 15
+## ====================================================================
+## Copyright (c) 1995-1998 The Apache Group. 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. All advertising materials mentioning features or use of this
+## software must display the following acknowledgment:
+## "This product includes software developed by the Apache Group
+## for use in the Apache HTTP server project (http://www.apache.org/)."
+##
+## 4. The names "Apache Server" and "Apache Group" 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"
+## nor may "Apache" appear in their names without prior written
+## permission of the Apache Group.
+##
+## 6. Redistributions of any form whatsoever must retain the following
+## acknowledgment:
+## "This product includes software developed by the Apache Group
+## for use in the Apache HTTP server project (http://www.apache.org/)."
+##
+## THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``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 GROUP 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 Group and was originally based
+## on public domain software written at the National Center for
+## Supercomputing Applications, University of Illinois, Urbana-Champaign.
+## For more information on the Apache Group and the Apache HTTP server
+## project, please see <http://www.apache.org/>.
+# HISTORY:
+#
# Apache configuration script, first cut --- rst.
-# Dont like it? Inspired to do something better? Go for it.
-
+# Don't like it? Inspired to do something better? Go for it.
+#
# second cut --- jmj
# At this point we change what Configuration contains. It maintain
# contains comments, specific compiler flags, a list of included
# modules and "rules". These rules are used to allow Configure to
-# be totally configured from Configuration
-#
-# Uses 3 supplemental scripts located in ./helpers: CutRule,
-# GuessOS and PrintPath
+# be totally configured from Configuration.
#
+# third cut --- rse
+# Big cleanup of the generated Makefiles and remove of
+# some old kludges
+
+# Uses 6 supplemental scripts located in ./helpers:
+# CutRule: Determines the value for a specified Rule
+# GuessOS: Uses uname to determine OS/platform
+# PrintPath: generic "type" or "whence" replacement
+# TestCompile: Can check for libs and if $(CC) is ANSI
+# (i.e., a simple "sanity check")
+# mfhead:
+# fp2rp:
+# slo.sh:
+exitcode=0
+trap 'rm -f $tmpfile $tmpfile2 $tmpfile3 $tmpconfig $awkfile; exit $exitcode' 0 1 2 3 15
+
+####################################################################
+## Set up some defaults
+##
file=Configuration
tmpfile=htconf.$$
-makefile_tmpl=Makefile.tmpl
+tmpfile2=$tmpfile.2
+tmpfile3=$tmpfile.3
+awkfile=$tmpfile.4
+tmpconfig=$tmpfile.5
+SUBDIRS="ap main modules"
+####################################################################
+## Now handle any arguments, which, for now, is -file
+## to select an alternate Configuration file
+##
while [ "x$1" != "x" ]; do
if [ "x$1" = "x-file" ] ; then
shift 1; file=$1; shift 1
if [ ! -r $file ]; then
echo "$file does not exist or is not readable."
+ exitcode=1
exit 1
fi
elif [ "x$1" = "x-make" ] ; then
@@ -32,188 +112,231 @@ while [ "x$1" != "x" ]; do
exit 1
fi
else
- echo "Ignoring command line option '$1'"
- shift 1
+ echo "ERROR: Bad command line option '$1'"
+ echo " Please read the file INSTALL."
+ exit 1
fi
done
-echo "Using config file: $file"
-echo "Using Makefile template file: $makefile_tmpl"
-
if [ ! -r $file ]; then
echo "Can't see or read \"$file\""
+ echo "Please copy Configuration.tmpl to $file, edit it for your platform,"
+ echo "and re-run $0 again."
+ exitcode=1
exit 1
fi
-# First, strip comments and blank lines and then change Rules to comments
-# and then remove whitespace before Module declarations
+####################################################################
+## Now see if Configuration.tmpl is more recent than $file. If
+## so, then we complain and bail out
+##
+if ls -lt Configuration.tmpl $file | head -1 | \
+ grep 'Configuration.tmpl' > /dev/null
+then
+ echo "Configuration.tmpl is more recent than $file;"
+ echo "Make sure that $file is valid and, if it is, simply"
+ echo "'touch $file' and re-run $0 again."
+ exitcode=1
+ exit 1
+fi
+
+echo "Using config file: $file"
+####################################################################
+## From the Configuration file, create a "cleaned-up" version
+## that's easy to scan
+##
+
+# Strip comments and blank lines, remove whitespace around
+# "=" assignments, change Rules to comments and then remove whitespace
+# before Module declarations
sed 's/#.*//' $file | \
sed '/^[ ]*$/d' | \
sed 's/[ ]*$//' | \
- sed 's/^Rule[ ]*/##Rule:/' | \
+ sed 's/[ ]*=[ ]*/=/' | \
+ sed '/^Rule[ ]*/d' | \
+ sed 's/^[ ]*AddModule/AddModule/' | \
+ sed 's/^[ ]*%AddModule/%AddModule/' | \
+ sed 's/^[ ]*SharedModule/SharedModule/' | \
sed 's/^[ ]*Module/Module/' | \
- sed 's/^[ ]*%Module/%Module/' > $tmpfile
+ sed 's/^[ ]*%Module/%Module/' > $tmpfile
+
+# Determine if shared objects are used
+using_shlib=`grep '^SharedModule' $tmpfile >/dev/null && echo 1`
-# Check for syntax errors...
+# But perhaps later via apxs when just mod_so is compiled in!
+if [ ".$using_shlib" = . ]; then
+ using_shlib=`grep '^AddModule modules/standard/mod_so.o' $tmpfile >/dev/null && echo 1`
+fi
+# Only "assignment" ("=") statements and Module lines
+# should be left at this point. If there is other stuff
+# we bail out
if egrep -v '^%?Module[ ]+[A-Za-z0-9_]+[ ]+[^ ]+$' $tmpfile \
- | grep -v = > /dev/null
+ | egrep -v '^%?AddModule[ ]+[^ ]+$' \
+ | egrep -v '^SharedModule[ ]+[^ ]+$' \
+ | grep -v = > /dev/null
then
- echo "Syntax error --- The configuration file is used only to"
- echo "define the list of included modules or to set Makefile"
- echo "options or Configure rules, and I don't see that at all:"
- egrep -v '^Module[ ]+[A-Za-z0-9_]+[ ]+[^ ]+$' $tmpfile | \
- grep -v =
- exit 1
+ echo "Syntax error --- The configuration file is used only to"
+ echo "define the list of included modules or to set Makefile"
+ echo "options or Configure rules, and I don't see that at all:"
+ egrep -v '^%?Module[ ]+[A-Za-z0-9_]+[ ]+[^ ]+$' $tmpfile \
+ | egrep -v '^%?AddModule[ ]+[^ ]+$' \
+ | egrep -v '^%?SharedModule[ ]+[^ ]+$' \
+ | grep -v =
+ exitcode=1
+ exit 1
fi
-# File is OK --- make backup copies of things and then get the new ones:
-
-if [ -f Makefile ] ; then mv Makefile Makefile.bak; fi
-if [ -f modules.c ] ; then mv modules.c modules.c.bak; fi
-
-sed -e 's/_module//' $tmpfile | awk >modules.c '\
- BEGIN { modules[n++] = "core" ; pmodules[pn++] = "core"} \
- /^Module/ { modules[n++] = $2 ; pmodules[pn++] = $2 } \
- /^%Module/ { pmodules[pn++] = $2 } \
- END { print "/* modules.c --- automatically generated by Apache"; \
- print " * configuration script. DO NOT HAND EDIT!!!!!"; \
- print " */"; \
- print ""; \
- print "#include \"httpd.h\""; \
- print "#include \"http_config.h\""; \
- print ""; \
- for (i = 0; i < pn; ++i) { \
- printf ("extern module %s_module;\n", pmodules[i]); \
- } \
- print ""; \
- print "module *prelinked_modules[] = {"; \
- for (i = 0; i < n; ++i) { \
- printf " &%s_module,\n", modules[i]; \
- } \
- print " NULL"; \
- print "};"; \
- print "module *preloaded_modules[] = {"; \
- for (i = 0; i < pn; ++i) { \
- printf " &%s_module,\n", pmodules[i]; \
- } \
- print " NULL"; \
- print "};"; \
- }'
-
-#
-# Add module set only
-#
-echo "#" > Makefile
-echo "# Makefile automatically generated from $makefile_tmpl" >> Makefile
-echo "# and configuration file by Apache config script." >> Makefile
-echo "# Hand-edited changes will be lost if the config script" >> Makefile
-echo "# is re-run" >> Makefile
-echo "#" >> Makefile
-
-awk >>Makefile <$tmpfile '\
- /^Module/ { modules[n++] = $3 } \
- /^%Module/ { modules[n++] = $3 } \
- END { print "MODULES=\\"; \
- for (i = 0; i < n; ++i) { \
- if (i < n-1) printf (" %s \\\n", modules[i]); \
- else printf (" %s\n", modules[i]); \
- } \
- print "" \
- }'
-#
-# Now add Makefile additions and Rules
-#
-awk >>Makefile <$tmpfile '\
- BEGIN { print "# Makefile options inherited from Configure"; \
- print "###############"; \
- } \
- /\=/ { print } \
- END { print "###############"; }'
-
-#
-# Extract the rules.
-#
-RULE_WANTHSREGEX=`sh ./helpers/CutRule WANTHSREGEX $file`
-RULE_STATUS=`sh ./helpers/CutRule STATUS $file`
-RULE_SOCKS4=`sh ./helpers/CutRule SOCKS4 $file`
-RULE_IRIXNIS=`sh ./helpers/CutRule IRIXNIS $file`
-
-#
-# Now we determine the OS/Platform automagically, thanks to
-# GuessOS, a home-brewed OS-determiner ala config.guess
-#
-# We adjust CFLAGS, LIBS, LFLAGS and INCLUDES (and other Makefile
-# options) as required. Setting CC and OPTIM here has no effect
-# if they were set in Configure.
-#
-# Also, we set DEF_WANTHSREGEX and to the appropriate
-# value for each platform.
-#
-# As more PLATFORMs are added to Configuration.tmpl, be sure to
-# add the required lines below.
-#
+####################################################################
+## If we find the directory /usr/local/etc/httpd and there is
+## no HTTPD_ROOT flag set in the Configuration file we assume
+## that the user was using the old default root directory
+## and issue a notice about it.
+##
+if [ $file != "Configuration.apaci" ]
+then
+ if [ -d /usr/local/etc/httpd/ ]
+ then
+ if egrep '^EXTRA_CFLAGS.*HTTPD_ROOT' $file >/dev/null
+ then
+ :
+ else
+ echo " | Please note that the default httpd root directory has changed"
+ echo " | from '/usr/local/etc/httpd/' to '/usr/local/apache/.'"
+ echo " | You may add '-DHTTPD_ROOT=\\\"/usr/local/etc/httpd\\\"' to EXTRA_CFLAGS"
+ echo " | in your Configuration file (and re-run Configure) or start"
+ echo " | httpd with the option '-d /usr/local/etc/httpd' if you still"
+ echo " | want to use the old root directory for your server."
+ fi
+ fi
+fi
-PLAT=`sh ./helpers/GuessOS`
+####################################################################
+## Start creating the Makefile. We add some comments and
+## then fold in the modules that were included in Configuration
+##
+echo "Creating Makefile"
+./helpers/mfhead . $file > Makefile
-# Preset DBM_LIB. Can be overridden on a per-platform basis.
+####################################################################
+## Now we create a stub file, called Makefile.config, which
+## just includes those assignments (eg: CC=gcc) in Configuration
+##
+awk >Makefile.config <$tmpfile '
+ BEGIN {
+ print "##"
+ print "## Inherited Makefile options from Configure script"
+ print "## (Begin of automatically generated section)"
+ print "##"
+ print "SRCDIR=."
+ }
+ /\=/ { print }
+ '
-DBM_LIB="-ldbm"
+####################################################################
+## Extract the rules.
+##
+RULE_WANTHSREGEX=`./helpers/CutRule WANTHSREGEX $file`
+RULE_STATUS=`./helpers/CutRule STATUS $file`
+RULE_SOCKS4=`./helpers/CutRule SOCKS4 $file`
+RULE_SOCKS5=`./helpers/CutRule SOCKS5 $file`
+RULE_IRIXNIS=`./helpers/CutRule IRIXNIS $file`
+RULE_IRIXN32=`./helpers/CutRule IRIXN32 $file`
+RULE_PARANOID=`./helpers/CutRule PARANOID $file`
+RULE_SHARED_CORE=`./helpers/CutRule SHARED_CORE $file`
+RULE_SHARED_CHAIN=`./helpers/CutRule SHARED_CHAIN $file`
-#
-# Look for ranlib. Do it early in case we want to override it below
-#
-if sh ./helpers/PrintPath -s ranlib; then
- RANLIB="ranlib"
-else
- RANLIB="true"
+####################################################################
+## Rule SHARED_CORE implies required DSO support
+##
+if [ "$RULE_SHARED_CORE" = "yes" ]; then
+ using_shlib=1
fi
-#
-# We now look for popular compilers. As with ranlib, we
-# do this early because some options may depend
-# on which compiler we use/find
-#
-for compilers in "gcc" "cc" "acc" "c89"
-do
- lookedfor="$lookedfor $compilers"
- if sh ./helpers/PrintPath -s $compilers; then
- COMPILER="$compilers"
- break
- fi
-done
+####################################################################
+## Preset some "constants";
+## can be overridden on a per-platform basis below.
+##
+DBM_LIB="-ldbm"
+DB_LIB="-ldb"
+SHELL="/bin/sh"
+TARGET="httpd"
+SUBTARGET="target_static"
+SHLIB_SUFFIX_NAME=""
+SHLIB_SUFFIX_LIST=""
+CAT="cat"
-#
+####################################################################
+## Now we determine the OS/Platform automagically, thanks to
+## GuessOS, a home-brewed OS-determiner ala config.guess
+##
+## We adjust CFLAGS, LIBS, LDFLAGS and INCLUDES (and other Makefile
+## options) as required. Setting CC and OPTIM here has no effect
+## if they were set in Configure.
+##
+## Also, we set DEF_WANTHSREGEX and to the appropriate
+## value for each platform.
+##
+## As more PLATFORMs are added to Configuration.tmpl, be sure to
+## add the required lines below.
+##
+PLAT=`./helpers/GuessOS`
SHELL="/bin/sh"
+OSDIR="os/unix"
case "$PLAT" in
+ *mint)
+ OS="MiNT"
+ CFLAGS="-DMINT"
+ LIBS="$LIBS -lportlib -lsocket"
+ DEF_WANTHSREGEX=yes
+ ;;
*MPE/iX*)
OS='MPE/iX'
CFLAGS="$CFLAGS -DMPE -D_POSIX_SOURCE -D_SOCKET_SOURCE"
- LIBS="$LIBS -lsocket"
- LFLAGS="$LFLAGS -Xlinker \"-WL,cap=ia,ba,ph,pm;nmstack=1024000\""
+ LIBS="$LIBS -lsocket -lsvipc"
+ LDFLAGS="$LDFLAGS -Xlinker \"-WL,cap=ia,ba,ph,pm;nmstack=1024000\""
+ CAT="/bin/cat" # built-in cat is badly broken for stdin redirection
;;
*-apple-aux3*)
OS='A/UX 3.1.x'
- CFLAGS="$CFLAGS -DAUX -D_POSIX_SOURCE"
+ CFLAGS="$CFLAGS -DAUX3 -D_POSIX_SOURCE"
LIBS="$LIBS -lposix -lbsd"
- LFLAGS="$LFLAGS -s"
+ LDFLAGS="$LDFLAGS -s"
DEF_WANTHSREGEX=no
;;
i386-ibm-aix*)
- OS='IBM AIX PS/2'
- CFLAGS="$CFLAGS -DAIX -U__STR__ -DUSEBCOPY"
+ OS='IBM AIX PS/2'
+ CFLAGS="$CFLAGS -DAIX=1 -U__STR__ -DUSEBCOPY"
DEF_WANTHSREGEX=no
;;
- *-ibm-aix[1-3].*|*-ibm-aix4.[0-1])
- OS='IBM AIX < v4.2'
- CFLAGS="$CFLAGS -DAIX -DNEED_RLIM_T -U__STR__"
- ;;
+ *-ibm-aix[1-2].*)
+ OS='IBM AIX 1.x/2.x'
+ CFLAGS="$CFLAGS -DAIX=1 -DNEED_RLIM_T -U__STR__"
+ ;;
+ *-ibm-aix3.*)
+ OS='IBM AIX 3.x'
+ CFLAGS="$CFLAGS -DAIX=30 -DNEED_RLIM_T -U__STR__"
+ ;;
+ *-ibm-aix4.1)
+ OS='IBM AIX 4.1'
+ CFLAGS="$CFLAGS -DAIX=41 -DNEED_RLIM_T -U__STR__"
+ ;;
+ *-ibm-aix4.2)
+ OS='IBM AIX 4.2'
+ CFLAGS="$CFLAGS -DAIX=42 -U__STR__"
+ LDFLAGS="$LDFLAGS -lm"
+ ;;
+ *-ibm-aix4.3)
+ OS='IBM AIX 4.3'
+ CFLAGS="$CFLAGS -DAIX=43 -U__STR__"
+ LDFLAGS="$LDFLAGS -lm"
+ ;;
*-ibm-aix*)
- OS='IBM AIX >= 4.2'
- CFLAGS="$CFLAGS -DAIX -U__STR__"
- LFLAGS="$LFLAGS -lm"
- ;;
+ OS='IBM AIX'
+ CFLAGS="$CFLAGS -DAIX=1 -U__STR__"
+ LDFLAGS="$LDFLAGS -lm"
+ ;;
*-apollo-*)
OS='Apollo Domain'
CFLAGS="$CFLAGS -DAPOLLO"
@@ -224,56 +347,79 @@ case "$PLAT" in
DEF_WANTHSREGEX=yes
;;
*OS/2*)
+ OSDIR="os/os2"
DEF_WANTHSREGEX=yes
OS='EMX OS/2'
- CFLAGS="$CFLAGS -Zbsd-signals -Zbin-files -DTCPIPV4 -g"
- LIBS="$LIBS -lsocket -llibufc -lbsd"
+ CFLAGS="$CFLAGS -DOS2 -Zbsd-signals -Zbin-files -DTCPIPV4 -g"
+ LDFLAGS="$LDFLAGS -Zexe"
+ LIBS="$LIBS -lsocket -lufc -lbsd"
DBM_LIB="-lgdbm"
+ SHELL=sh
;;
*-hi-hiux)
OS='HI-UX'
CFLAGS="$CFLAGS -DHIUX"
- # if we're using the HIUX compiler, add a few flags.
- if [ "$CC" = "cc" ] || [ "$COMPILER" = "cc" ]; then
- CFLAGS="$CFLAGS -Aa -D_HIUX_SOURCE"
- OPTIM=" "
- fi
+ ;;
+ *-hp-hpux11.*)
+ OS='HP-UX 11'
+ CFLAGS="$CFLAGS -DHPUX11"
+ RANLIB="/bin/true"
+ LIBS="$LIBS -lm -lpthread"
+ DEF_WANTHSREGEX=yes
;;
*-hp-hpux10.*)
OS='HP-UX 10'
CFLAGS="$CFLAGS -DHPUX10"
- # if we're using the HPUX compiler, add a few flags.
- if [ "$CC" = "cc" ] || [ "$COMPILER" = "cc" ]; then
- CFLAGS="$CFLAGS -Aa -D_HPUX_SOURCE"
- OPTIM=" "
- fi
+ RANLIB="/bin/true"
+ case "$PLAT" in
+ *-hp-hpux10.01)
+ # We know this is a problem in 10.01.
+ # Not a problem in 10.20. Otherwise, who knows?
+ CFLAGS="$CFLAGS -DSELECT_NEEDS_CAST"
+ ;;
+ esac
+ DEF_WANTHSREGEX=yes
;;
*-hp-hpux*)
OS='HP-UX'
CFLAGS="$CFLAGS -DHPUX"
- if [ "$CC" = "cc" ] || [ "$COMPILER" = "cc" ]; then
- CFLAGS="$CFLAGS -Aa -D_HPUX_SOURCE"
- OPTIM=" "
- fi
+ RANLIB="/bin/true"
+ DEF_WANTHSREGEX=yes
LIBS="$LIBS -lm"
;;
*-sgi-irix64)
-# Note: We'd like to see patches to compile 64-bit, but for now...
+ # Note: We'd like to see patches to compile 64-bit, but for now...
echo "You are running 64-bit Irix. For now, we will compile 32-bit"
echo "but if you would care to port to 64-bit, send us the patches."
- CFLAGS="$CFLAGS -n32"
- LFLAGS="$LFLAGS -n32"
DEF_WANTHSREGEX=yes
DBM_LIB=""
if [ "$RULE_IRIXNIS" = "yes" ]; then
- OS='SGI IRIX w/NIS'
+ OS='SGI IRIX-64 w/NIS'
CFLAGS="$CFLAGS -DIRIX"
LIBS="$LIBS -lsun"
else
- OS='SGI IRIX'
+ OS='SGI IRIX-64'
CFLAGS="$CFLAGS -DIRIX"
fi
;;
+ *-sgi-irix32)
+ DEF_WANTHSREGEX=yes
+ DBM_LIB=""
+ if [ "$RULE_IRIXN32" = "yes" ]; then
+ if [ "$RULE_IRIXNIS" = "yes" ]; then
+ OS='SGI IRIX-32 w/NIS'
+ else
+ OS='SGI IRIX-32'
+ fi
+ else
+ if [ "$RULE_IRIXNIS" = "yes" ]; then
+ OS='SGI IRIX w/NIS'
+ else
+ OS='SGI IRIX'
+ fi
+ fi
+ CFLAGS="$CFLAGS -DIRIX"
+ ;;
*-sgi-irix)
DEF_WANTHSREGEX=yes
DBM_LIB=""
@@ -286,62 +432,79 @@ case "$PLAT" in
CFLAGS="$CFLAGS -DIRIX"
fi
;;
- alpha-*-linux2)
- DEF_WANTHSREGEX=yes
- OS='Linux'
- CFLAGS="$CFLAGS -DLINUX=2"
- LIBS="$LIBS -lcrypt"
- ;;
- sparc-*-linux2)
- DEF_WANTHSREGEX=yes
- OS='Linux'
- CFLAGS="$CFLAGS -DLINUX=2"
- LIBS="$LIBS -lm"
- ;;
*-linux2)
DEF_WANTHSREGEX=yes
OS='Linux'
CFLAGS="$CFLAGS -DLINUX=2"
+ LIBS="$LIBS -lm"
;;
*-linux1)
DEF_WANTHSREGEX=yes
OS='Linux'
CFLAGS="$CFLAGS -DLINUX=1"
;;
- *-lynx-lynxos*)
- OS='LynxOS'
- CFLAGS="$CFLAGS -DLYNXOS"
- LIBS="$LIBS -lbsd -ldes -lc_p"
+ *-lynx-lynxos)
+ OS='LynxOS 2.x'
+ CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__ -DLYNXOS"
+ LIBS="$LIBS -lbsd -lcrypt"
+ DEF_WANTHSREGEX=yes
;;
*486-*-bsdi*)
OS='BSDI w/486'
CFLAGS="$CFLAGS -m486"
DBM_LIB=""
+ DB_LIB=""
;;
*-bsdi*)
OS='BSDI'
DBM_LIB=""
+ DB_LIB=""
;;
- *486-*-freebsd*|*486-*-netbsd*)
- OS='FreeBSD/NETBSD on 486'
+ *-netbsd*)
+ OS='NetBSD'
+ CFLAGS="$CFLAGS -DNETBSD"
LIBS="$LIBS -lcrypt"
DBM_LIB=""
+ DB_LIB=""
+ DEF_WANTHSREGEX=no
;;
- *-freebsd*|*-netbsd*)
- OS='FreeBSD/NetBSD'
+ *-freebsd*)
+ PLATOSVERS=`echo $PLAT | sed 's/^.*freebsd//'`
+ OS="FreeBSD $PLATOSVERS"
+ case "$PLATOSVERS" in
+ [23]*)
+ DEF_WANTHSREGEX=no
+ CFLAGS="$CFLAGS -funsigned-char"
+ ;;
+ esac
LIBS="$LIBS -lcrypt"
DBM_LIB=""
+ DB_LIB=""
;;
*-openbsd*)
OS='OpenBSD'
DBM_LIB=""
;;
*-next-nextstep*)
- OS='NeXT'
+ OS='NeXTStep'
+ OPTIM='-O'
CFLAGS="$CFLAGS -DNEXT"
DEF_WANTHSREGEX=yes
- RANLIB="sleep 5; /bin/ranlib"
- # ranlib on most NeXTs sets the time wrong. 5 secs wait does much good
+ ;;
+ *-next-openstep*)
+ OS='OpenStep/Mach'
+ CC='cc'
+ OPTIM='-O'
+ CFLAGS="$CFLAGS -DNEXT"
+ CFLAGS_SHLIB='-dynamic -fno-common'
+ LD_SHLIB='cc'
+ LDFLAGS_SHLIB='-dynamiclib -undefined warning'
+ DEF_WANTHSREGEX=yes
+ ;;
+ *-apple-rhapsody*)
+ OS='Mac OS X Server'
+ CFLAGS="$CFLAGS -DRHAPSODY"
+ DEF_WANTHSREGEX=yes
;;
*-dec-osf*)
OS='DEC OSF/1'
@@ -351,20 +514,20 @@ case "$PLAT" in
*-qnx)
OS='QNX'
CFLAGS="$CFLAGS -DQNX"
- LIBS="$LIBS -N128k -lsocket"
+ LIBS="$LIBS -N128k -lsocket -lunix"
DEF_WANTHSREGEX=yes
;;
*-qnx32)
OS='QNX32'
CFLAGS="$CFLAGS -DQNX -mf -3"
- LIBS="$LIBS -N128k -lsocket"
+ LIBS="$LIBS -N128k -lsocket -lunix"
DEF_WANTHSREGEX=yes
;;
*-isc4*)
OS='ISC 4'
CC='gcc'
CFLAGS="$CFLAGS -posix -DISC"
- LFLAGS="$LFLAGS -posix"
+ LDFLAGS="$LDFLAGS -posix"
LIBS="$LIBS -linet"
DEF_WANTHSREGEX=yes
;;
@@ -377,18 +540,29 @@ case "$PLAT" in
*-sco5*)
OS='SCO 5'
CFLAGS="$CFLAGS -DSCO5"
- LIBS="$LIBS -lsocket -lmalloc -lprot"
- if [ "$CC" = "cc" ] || [ "$COMPILER" = "cc" ]; then
- OSBPRINTF="-K noinline"
- fi
+ LIBS="$LIBS -lsocket -lmalloc -lprot -ltinfo -lx -lm"
DEF_WANTHSREGEX=no
;;
+ *-sco_sv*|*-SCO_SV*)
+ OS='SCO SV'
+ CFLAGS="$CFLAGS -DSCO"
+ LIBS="$LIBS -lPW -lsocket -lmalloc -lcrypt_i"
+ DEF_WANTHSREGEX=yes
+ ;;
*-solaris2*)
- OS='Solaris 2'
- CFLAGS="$CFLAGS -DSOLARIS2"
+ PLATOSVERS=`echo $PLAT | sed 's/^.*solaris2.//'`
+ OS="Solaris $PLATOSVERS"
+ CFLAGS="$CFLAGS -DSOLARIS2=$PLATOSVERS"
LIBS="$LIBS -lsocket -lnsl"
DBM_LIB=""
- DEF_WANTHSREGEX=yes
+ case "$PLATOSVERS" in
+ 2[01234]*)
+ DEF_WANTHSREGEX=yes
+ ;;
+ *)
+ DEF_WANTHSREGEX=no
+ ;;
+ esac
;;
*-sunos4*)
OS='SunOS 4'
@@ -397,25 +571,31 @@ case "$PLAT" in
;;
*-unixware1)
DEF_WANTHSREGEX=yes
- OS='Unixware'
- CFLAGS="$CFLAGS -DSVR4 -DNO_LINGCLOSE"
+ OS='UnixWare 1.x'
+ CFLAGS="$CFLAGS -DUW=100"
LIBS="$LIBS -lsocket -lnsl -lcrypt"
;;
*-unixware2)
DEF_WANTHSREGEX=yes
- OS='Unixware'
- CFLAGS="$CFLAGS -DSVR4 -DNO_LINGCLOSE"
- LIBS="$LIBS -lsocket -lnsl -lcrypt"
+ OS='UnixWare 2.x'
+ CFLAGS="$CFLAGS -DUW=200"
+ LIBS="$LIBS -lsocket -lnsl -lcrypt -lgen"
;;
*-unixware211)
- OS='Unixware 2.1.1'
- CFLAGS="$CFLAGS -DUW"
- LIBS="$LIBS -lsocket -lnsl -lcrypt"
+ OS='UnixWare 2.1.1'
+ CFLAGS="$CFLAGS -DUW=211"
+ LIBS="$LIBS -lsocket -lnsl -lcrypt -lgen"
;;
*-unixware212)
- OS='Unixware 2.1.2'
- CFLAGS="$CFLAGS -DUW"
- LIBS="$LIBS -lsocket -lnsl -lcrypt"
+ OS='UnixWare 2.1.2'
+ CFLAGS="$CFLAGS -DUW=212"
+ LIBS="$LIBS -lsocket -lnsl -lcrypt -lgen"
+ DBM_LIB=""
+ ;;
+ *-unixware7)
+ OS='UnixWare 7'
+ CFLAGS="$CFLAGS -DUW=700"
+ LIBS="$LIBS -lsocket -lnsl -lcrypt -lgen"
DBM_LIB=""
;;
maxion-*-sysv4*)
@@ -424,9 +604,17 @@ case "$PLAT" in
DEF_WANTHSREGEX=yes
LIBS="$LIBS -lsocket -lnsl -lc -lgen"
;;
+ BS2000*-sni-sysv4*)
+ OS='BS2000'
+ OSDIR='os/bs2000'
+ CC='c89 -XLLML -XLLMK'
+ CFLAGS="$CFLAGS -DCHARSET_EBCDIC -DSVR4 -D_XPG_IV"
+ DEF_WANTHSREGEX=yes
+ LIBS="$LIBS -lsocket -lnsl -lc"
+ ;;
*-sni-sysv4*)
OS='SVR4'
- CFLAGS="$CFLAGS -DSVR4 -D_XPG_IV -DUSE_MMAP_FILES"
+ CFLAGS="$CFLAGS -DSVR4 -D_XPG_IV -DHAS_DLFCN -DUSE_MMAP_FILES -DUSE_SYSVSEM_SERIALIZED_ACCEPT -DNEED_UNION_SEMUN"
DEF_WANTHSREGEX=yes
LIBS="$LIBS -lsocket -lnsl -lc"
;;
@@ -442,32 +630,42 @@ case "$PLAT" in
LIBS="$LIBS -lsocket -lnsl"
DEF_WANTHSREGEX=yes
;;
+ *-ncr-sysv4)
+ OS='NCR MP/RAS'
+ CFLAGS="$CFLAGS -DSVR4 -DMPRAS"
+ LIBS="$LIBS -lsocket -lnsl -lc -L/usr/ucblib -lucb"
+ DEF_WANTHSREGEX=yes
+ ;;
*-sysv4*)
OS='SVR4'
CFLAGS="$CFLAGS -DSVR4"
LIBS="$LIBS -lsocket -lnsl -lc"
;;
+ 88k-encore-sysv4)
+ OS='Encore UMAX V'
+ CFLAGS="$CFLAGS -DSVR4 -DENCORE"
+ DEF_WANTHSREGEX=yes
+ LIBS="$LIBS -lPW"
+ ;;
*-uts*)
OS='Amdahl UTS'
- CFLAGS="$CFLAGS -Xa -eft -DUTS21"
+ CFLAGS="$CFLAGS -Xa -eft -DUTS21 -DUSEBCOPY"
LIBS="$LIBS -lsocket -lbsd -la"
+ DEF_WANTHSREGEX=yes
;;
*-ultrix)
OS='ULTRIX'
CFLAGS="-DULTRIX"
DEF_WANTHSREGEX=yes
SHELL="/bin/sh5"
- if [ "$CC" = "cc" ] || [ "$COMPILER" = "cc" ]; then
- CFLAGS="$CFLAGS -std"
- fi
;;
*powerpc-tenon-machten*)
OS='MachTen PPC'
- LFLAGS="$LFLAGS -Xlstack=0x14000 -Xldelcsect"
+ LDFLAGS="$LDFLAGS -Xlstack=0x14000 -Xldelcsect"
;;
*-machten*)
OS='MachTen 68K'
- LFLAGS="$LFLAGS -stack 0x14000"
+ LDFLAGS="$LDFLAGS -stack 0x14000"
DEF_WANTHSREGEX=yes
;;
*convex-v11*)
@@ -482,7 +680,36 @@ case "$PLAT" in
OS='Paragon OSF/1'
CFLAGS="$CFLAGS -DPARAGON"
;;
+ *DYNIX*)
+ DEF_WANTHSREGEX=yes
+ OS='SEQUENT'
+ CFLAGS="$CFLAGS -DSEQUENT"
+ ;;
+ *NEWS-OS*)
+ DEF_WANTHSREGEX=yes
+ OS='SONY NEWS-OS'
+ CFLAGS="$CFLAGS -DNEWSOS"
+ ;;
+ *-riscix)
+ OS='Acorn RISCix'
+ CFLAGS="$CFLAGS -DRISCIX"
+ OPTIM="-O"
+ MAKE="make"
+ DEF_WANTHSREGEX=yes
+ ;;
+ *-BeOS*)
+ OS='BeOS';
+ CFLAGS="$CFLAGS -DBEOS"
+ DEF_WANTHSREGEX=yes
+ ;;
+ 4850-*.*)
+ OS='NCR MP/RAS'
+ CFLAGS="$CFLAGS -DSVR4 -DMPRAS"
+ DEF_WANTHSREGEX=yes
+ LIBS="$LIBS -lsocket -lnsl -lc -L/usr/ucblib -lucb"
+ ;;
*) # default: Catch systems we don't know about
+ OS='Unknown and unsupported OS'
echo Sorry, but we cannot grok \"$PLAT\"
echo uname -m
uname -m
@@ -496,57 +723,65 @@ case "$PLAT" in
uname -X
echo Ideally, read the file PORTING, do what it says, and send the
echo resulting patches to The Apache Group by filling out a report
- echo form at http://www.apache.org/bugdb.cgi - or, if your browser
- echo isn\'t forms-capable, you can send them via email to
- echo apache-bugs@apache.org. If you don\'t wish to do the port
- echo yourself, please submit this output rather than the patches.
- echo Thank you
- exit 1
+ echo form at http://www.apache.org/bug_report.html. If you don\'t
+ echo wish to do the port yourself, please submit this output rather
+ echo than the patches. Thank you.
+ echo
+ echo Pressing on with the build process, but all bets are off.
+ echo Do not be surprised if it fails. If it works, and even
+ echo if it does not, please contact the above address.
+ echo
;;
esac
-#
-# See if we need to override WANTHSREGEX
-#
+####################################################################
+## Show user what OS we came up with
+##
+echo " + configured for $OS platform"
+SUBDIRS="$OSDIR $SUBDIRS"
+
+####################################################################
+## And adjust/override WANTHSREGEX as needed
+##
if [ "$RULE_WANTHSREGEX" = "default" ]; then
if [ "x$DEF_WANTHSREGEX" = "x" ]; then
- RULE_WANTHSREGEX=no
+ RULE_WANTHSREGEX=yes
else
RULE_WANTHSREGEX=$DEF_WANTHSREGEX
fi
fi
-# Show the final values of the rules
-
-echo "###############" > Makefile.config
-echo "# Platform: $OS" >> Makefile.config
-echo "# Final Rules:" >> Makefile.config
-echo "# Rule WANTHSREGEX=$RULE_WANTHSREGEX" >> Makefile.config
-echo "###############" >> Makefile.config
-
-#
-# Now that _that's_ done, get on with it
-#
-
-echo " + configured for $OS platform"
+####################################################################
+## Now we determine the C-compiler and optimization level
+## to use. Settings of CC and OPTIM in Configuration have
+## the highest precedence; next comes any settings from
+## the above "OS-specific" section. If still unset,
+## then we look for a known compiler somewhere in PATH
+##
+# First, look for a CC=<whatever> setting in Configuration (recall, we
+# copied these to Makefile.config)
#
-# Now we determine the C-compiler and optimization level
-# to use. Settings of CC and OPTIM in Configuration have
-# the highest precedence; next comes any settings from
-# the above "OS-specific" section. If still unset,
-# then we use the "found" location of COMPILERS above
-# and set a "safe" optimization level
+# If $TCC is null, then no such line exists in Configuration
#
-
-if egrep "^CC[ ]*=" Makefile > /dev/null; then
- CC="" # clear it just in case
-else
+TCC=`egrep '^CC=' Makefile.config | tail -1 | awk -F= '{print $2}'`
+if [ "x$TCC" = "x" ]; then
if [ "x$CC" = "x" ]; then
- if [ "x$COMPILER" = "x" ]; then
+ # At this point, CC is not set in Configuration or above, so we
+ # try to find one
+ for compilers in "gcc" "cc" "acc" "c89"
+ do
+ lookedfor="$lookedfor $compilers"
+ if ./helpers/PrintPath -s $compilers; then
+ COMPILER="$compilers"
+ break
+ fi
+ done
+ if [ "x$COMPILER" = "x" ]; then
echo "Error: could not find any of these C compilers"
echo " anywhere in your PATH: $lookedfor"
echo "Configure terminated"
+ exitcode=1
exit 1
fi
CC=$COMPILER
@@ -554,135 +789,1165 @@ else
echo " + setting C compiler to $CC"
fi
-#
-# Ditto for optimization
-#
-if egrep "^OPTIM[ ]*=" Makefile > /dev/null; then
- OPTIM="" # ditto
+####################################################################
+## Write the value of $CC to Makefile.config... We only do this
+## is not done already (ie: a 'CC=' line was in Configuration).
+## If there was an entry for it, then set $CC for our own internal
+## use.
+##
+if [ "x$TCC" = "x" ]; then
+ echo "CC=$CC" >> Makefile.config
+else
+ CC=$TCC
+fi
+
+####################################################################
+## Now check how we can _directly_ run the C pre-processor
+##
+TCPP=`egrep '^CPP=' Makefile.config | tail -1 | awk -F= '{print $2}'`
+if [ ".$TCPP" != . ]; then
+ CPP=`CC=$CC CPP=$TCPP ./helpers/findcpp.sh`
else
- if [ "x$OPTIM" = "x" ]; then
- OPTIM="-O2"
+ CPP=`CC=$CC ./helpers/findcpp.sh`
+fi
+if [ ".$TCPP" = . ]; then
+ echo "CPP=$CPP" >> Makefile.config
+fi
+echo " + setting C pre-processor to $CPP"
+
+####################################################################
+## Now check for existance of non-standard system header files
+## and start generation of the ap_config_auto.h header
+##
+AP_CONFIG_AUTO_H="include/ap_config_auto.h"
+echo "/*" >$AP_CONFIG_AUTO_H
+echo " * ap_config_auto.h -- Automatically determined configuration stuff" >>$AP_CONFIG_AUTO_H
+echo " * THIS FILE WAS AUTOMATICALLY GENERATED - DO NOT EDIT!" >>$AP_CONFIG_AUTO_H
+echo " */" >>$AP_CONFIG_AUTO_H
+echo "" >>$AP_CONFIG_AUTO_H
+echo "#ifndef AP_CONFIG_AUTO_H" >>$AP_CONFIG_AUTO_H
+echo "#define AP_CONFIG_AUTO_H" >>$AP_CONFIG_AUTO_H
+
+echo " + checking for system header files"
+CHECK_FOR_HEADERS="dlfcn.h dl.h bstring.h crypt.h unistd.h sys/resource.h sys/select.h sys/processor.h"
+for header in $CHECK_FOR_HEADERS; do
+ echo "" >>$AP_CONFIG_AUTO_H
+ echo "/* check: #include <$header> */" >>$AP_CONFIG_AUTO_H
+ name="`echo $header | sed -e 's:/:_:g' -e 's:\.:_:g' | tr '[a-z]' '[A-Z]'`"
+ CPP=$CPP ./helpers/checkheader.sh $header
+ if [ $? -eq 0 ]; then
+ echo "#ifndef HAVE_${name}" >>$AP_CONFIG_AUTO_H
+ echo "#define HAVE_${name} 1" >>$AP_CONFIG_AUTO_H
+ echo "#endif" >>$AP_CONFIG_AUTO_H
+ else
+ echo "#ifdef HAVE_${name}" >>$AP_CONFIG_AUTO_H
+ echo "#undef HAVE_${name}" >>$AP_CONFIG_AUTO_H
+ echo "#endif" >>$AP_CONFIG_AUTO_H
fi
- echo " + setting C compiler optimization-level to $OPTIM"
+done
+
+####################################################################
+# Special AIX 4.x support: need to check for sys/processor.h
+# to decide whether the Processor Binding can be used or not
+case "$PLAT" in
+ *-ibm-aix*)
+ CPP=$CPP ./helpers/checkheader.sh sys/processor.h
+ if [ $? -eq 0 ]; then
+ CFLAGS="$CFLAGS -DAIX_BIND_PROCESSOR"
+ fi
+ ;;
+esac
+
+####################################################################
+## Look for OPTIM and save for later
+##
+TOPTIM=`egrep '^OPTIM=' Makefile.config | tail -1 | awk -F= '{print $2}'`
+TRANLIB=`egrep '^RANLIB=' Makefile.config | tail -1 | awk -F= '{print $2}'`
+
+####################################################################
+## Check for user provided flags for shared object support
+##
+TLD_SHLIB=`egrep '^LD_SHLIB=' Makefile.config | tail -1 | awk -F= '{print $2}'`
+TLDFLAGS_SHLIB=`egrep '^LDFLAGS_SHLIB=' Makefile.config | tail -1 | awk -F= '{print $2}'`
+TLDFLAGS_SHLIB_EXPORT=`egrep '^LDFLAGS_SHLIB_EXPORT=' Makefile.config | tail -1 | awk -F= '{print $2}'`
+TCFLAGS_SHLIB=`egrep '^CFLAGS_SHLIB=' Makefile.config | tail -1 | awk -F= '{print $2}'`
+
+####################################################################
+## We adjust now CFLAGS_SHLIB, LDFLAGS_SHLIB and LDFLAGS_SHLIB_EXPORT as
+## required. For more platforms just add the required lines below.
+##
+if [ "x$using_shlib" = "x1" ] ; then
+ LD_SHLIB="ld"
+ DEF_SHARED_CORE=no
+ DEF_SHARED_CHAIN=no
+ SHLIB_SUFFIX_NAME=so
+ SHLIB_SUFFIX_DEPTH=all
+ SHLIB_EXPORT_FILES=no
+ case "$PLAT" in
+ *-linux1)
+ CFLAGS_SHLIB="-fpic"
+ LDFLAGS_SHLIB="-Bshareable"
+ LDFLAGS_SHLIB_EXPORT="-rdynamic"
+ ;;
+ *-linux2)
+ CFLAGS_SHLIB="-fpic"
+ LDFLAGS_SHLIB="-Bshareable"
+ LDFLAGS_SHLIB_EXPORT="-rdynamic"
+ SHLIB_SUFFIX_DEPTH=0
+ ;;
+ *-freebsd*)
+ CFLAGS_SHLIB="-fpic"
+ LDFLAGS_SHLIB="-Bshareable"
+ LDFLAGS_SHLIB_EXPORT=""
+ SHLIB_SUFFIX_DEPTH=2
+ ;;
+ *-openbsd*)
+ CFLAGS_SHLIB="-fPIC"
+ LDFLAGS_SHLIB="-Bforcearchive -Bshareable"
+ LDFLAGS_SHLIB_EXPORT=""
+ SHLIB_SUFFIX_DEPTH=2
+ ;;
+ alpha-*-netbsd*|mips-*-netbsd*|powerpc-*-netbsd*)
+ CFLAGS_SHLIB="-fpic -DPIC"
+ LDFLAGS_SHLIB="-shared"
+ LDFLAGS_SHLIB_EXPORT=""
+ SHLIB_SUFFIX_DEPTH=2
+ ;;
+ *-netbsd*)
+ CFLAGS_SHLIB="-fpic -DPIC"
+ LDFLAGS_SHLIB="-Bshareable"
+ LDFLAGS_SHLIB_EXPORT=""
+ SHLIB_SUFFIX_DEPTH=2
+ ;;
+ *-apple-rhapsody*)
+ LD_SHLIB="cc"
+ CFLAGS_SHLIB=""
+ LDFLAGS_SHLIB="-bundle -undefined suppress"
+ LDFLAGS_SHLIB_EXPORT=""
+ SHLIB_SUFFIX_DEPTH=0
+ ;;
+ *-solaris2*)
+ case $CC in
+ */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
+ */cc|cc ) CFLAGS_SHLIB="-KPIC" ;;
+ esac
+ LDFLAGS_SHLIB="-G"
+ LDFLAGS_SHLIB_EXPORT=""
+ SHLIB_SUFFIX_DEPTH=1
+ ;;
+ *-sunos4*)
+ case $CC in
+ */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
+ */acc|acc ) CFLAGS_SHLIB="-pic" ;;
+ esac
+ LDFLAGS_SHLIB="-assert pure-text"
+ LDFLAGS_SHLIB_EXPORT=""
+ ;;
+ *-sgi-irix32)
+ case $CC in
+ */gcc|gcc )
+ CFLAGS_SHLIB="-fpic"
+ N32FLAG=""
+ ;;
+ */cc|cc )
+ CFLAGS_SHLIB="-KPIC"
+ N32FLAG="-n32"
+ ;;
+ esac
+ if [ "$RULE_IRIXN32" = "yes" ]; then
+ LDFLAGS_SHLIB="$N32FLAG -shared"
+ else
+ LDFLAGS_SHLIB="-shared"
+ fi
+ LDFLAGS_SHLIB_EXPORT=""
+ ;;
+ *-sgi-irix64)
+ case $CC in
+ */gcc|gcc )
+ CFLAGS_SHLIB="-fpic"
+ N32FLAG=""
+ ;;
+ */cc|cc )
+ CFLAGS_SHLIB="-KPIC"
+ N32FLAG="-n32"
+ ;;
+ esac
+ if [ "$RULE_IRIXN32" = "yes" ]; then
+ LDFLAGS_SHLIB="$N32FLAG -shared"
+ else
+ LDFLAGS_SHLIB="-shared"
+ fi
+ LDFLAGS_SHLIB_EXPORT=""
+ ;;
+ *-sgi-irix)
+ case $CC in
+ */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
+ */cc|cc ) CFLAGS_SHLIB="-KPIC" ;;
+ esac
+ LDFLAGS_SHLIB="-shared"
+ LDFLAGS_SHLIB_EXPORT=""
+ ;;
+ *-dec-osf*)
+ case $CC in
+ */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
+ */cc|cc ) CFLAGS_SHLIB="" ;;
+ esac
+ LDFLAGS_SHLIB="-shared -expect_unresolved '*' -s"
+ LDFLAGS_SHLIB_EXPORT=""
+ ;;
+ *-unixware2)
+ case $CC in
+ */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
+ */cc|cc ) CFLAGS_SHLIB="-KPIC" ;;
+ esac
+ LDFLAGS_SHLIB="-Bdynamic -G"
+ LDFLAGS_SHLIB_EXPORT="-Wl,-Bexport"
+ ;;
+ *-unixware21*)
+ case $CC in
+ */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
+ */cc|cc ) CFLAGS_SHLIB="-KPIC" ;;
+ esac
+ LDFLAGS_SHLIB="-Bdynamic -G"
+ LDFLAGS_SHLIB_EXPORT="-Wl,-Bexport"
+ ;;
+ *-sco5*)
+ case $CC in
+ */gcc*|gcc* ) CFLAGS_SHLIB="-fpic" ;;
+ */cc*|cc* ) CFLAGS_SHLIB="-KPIC" ;;
+ esac
+ LDFLAGS_SHLIB="-G"
+ LDFLAGS_SHLIB_EXPORT="-Wl,-Bexport"
+ SHLIB_SUFFIX_DEPTH=1
+ ;;
+ RM*-sni-sysv4*)
+ # MIPS hosts can take advantage of the LDFLAGS_SHLIB_EXPORT switch
+ case $CC in
+ */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
+ */cc|cc ) CFLAGS_SHLIB="-KPIC" ;;
+ esac
+ LDFLAGS_SHLIB="-G"
+ LDFLAGS_SHLIB_EXPORT="-Wl,-Blargedynsym"
+ ;;
+ *-sni-sysv4*)
+ # Older SINIX machines must be linked as "shared core"-Apache
+ case $CC in
+ */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
+ */cc|cc ) CFLAGS_SHLIB="-KPIC" ;;
+ esac
+ LDFLAGS_SHLIB="-G"
+ LDFLAGS_SHLIB_EXPORT=""
+ SHLIB_SUFFIX_DEPTH=0
+ DEF_SHARED_CORE=yes
+ ;;
+ *-sysv4*)
+ case $CC in
+ */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
+ */cc|cc ) CFLAGS_SHLIB="-KPIC" ;;
+ esac
+ LDFLAGS_SHLIB="-G"
+ LDFLAGS_SHLIB_EXPORT=""
+ DEF_SHARED_CORE=yes
+ ;;
+ *-hp-hpux9.*)
+ case $CC in
+ */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
+ */cc|cc ) CFLAGS_SHLIB="+z" ;;
+ esac
+ LDFLAGS_SHLIB="-b"
+ LDFLAGS_SHLIB_EXPORT="-Wl,-E -Wl,-B,deferred"
+ SHLIB_SUFFIX_NAME=sl
+ ;;
+ *-hp-hpux10.*|*-hp-hpux11.*)
+ case $CC in
+ */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
+ */cc|cc ) CFLAGS_SHLIB="+z" ;;
+ esac
+ LDFLAGS_SHLIB="-b"
+ LDFLAGS_SHLIB_EXPORT="-Wl,-E -Wl,-B,deferred -Wl,+s"
+ SHLIB_SUFFIX_NAME=sl
+ ;;
+ *-ibm-aix*)
+ case $CC in
+ */gcc|gcc ) CFLAGS_SHLIB="-fpic" ;;
+ */cc|cc ) CFLAGS_SHLIB="" ;;
+ esac
+ case $PLAT in
+ *-ibm-aix4*)
+ LDFLAGS_SHLIB="-H512 -T512 -bhalt:4 -bM:SRE -bnoentry"
+ ;;
+ *-ibm-aix*)
+ LDFLAGS_SHLIB="-H512 -T512 -bhalt:4 -bM:SRE -e _nostart"
+ ;;
+ esac
+ LDFLAGS_SHLIB="$LDFLAGS_SHLIB -bI:\$(SRCDIR)/support/httpd.exp "
+ LDFLAGS_SHLIB="$LDFLAGS_SHLIB -bE:\`echo \$@|sed -e 's:\.so\$\$:.exp:'\`"
+ LDFLAGS_SHLIB="$LDFLAGS_SHLIB -lc"
+ LDFLAGS_SHLIB_EXPORT="-Wl,-bE:\$(SRCDIR)/support/httpd.exp"
+ SHLIB_EXPORT_FILES=yes
+ ;;
+ *)
+ ## ok, no known explict support for shared objects
+ ## on this platform, but we give not up immediately.
+ ## We take a second chance by guessing the compiler
+ ## and linker flags from the Perl installation
+ ## if it exists.
+ PERL=
+ for dir in `echo $PATH | sed -e 's/:/ /g'`
+ do
+ if [ -f "$dir/perl5" ]; then
+ PERL="$dir/perl5"
+ break
+ fi
+ if [ -f "$dir/perl" ]; then
+ PERL="$dir/perl"
+ break
+ fi
+ done
+ if [ ".$PERL" != . ]; then
+ # cool, Perl is installed on this platform...
+ if [ ".`$PERL -V:dlsrc 2>/dev/null | grep dlopen`" != . ]; then
+ # ...and actually uses the dlopen-style interface,
+ # so we can guess the flags from its knowledge
+ CFLAGS_SHLIB="`$PERL -V:cccdlflags | cut -d\' -f2`"
+ LDFLAGS_SHLIB="`$PERL -V:lddlflags | cut -d\' -f2`"
+ LDFLAGS_SHLIB_EXPORT="`$PERL -V:ccdlflags | cut -d\' -f2`"
+ # but additionally we have to inform the
+ # user that we are just guessing the flags
+ echo ""
+ echo "** WARNING: We have no explicit knowledge about shared object"
+ echo "** support for your particular platform. But perhaps you have"
+ echo "** luck: We were able to guess the compiler and linker flags"
+ echo "** for creating shared objects from your Perl installation."
+ echo "** If they actually work, please send the following information"
+ echo "** for inclusion into later releases to new-httpd@apache.org or make"
+ echo "** a suggestion report at http://www.apache.org/bug_report.html:"
+ echo "** PLATFORM=$PLAT"
+ echo "** CFLAGS_SHLIB=$CFLAGS_SHLIB"
+ echo "** LDFLAGS_SHLIB=$LDFLAGS_SHLIB"
+ echo "** LDFLAGS_SHLIB_EXPORT=$LDFLAGS_SHLIB_EXPORT"
+ echo ""
+ fi
+ fi
+ ;;
+ esac
fi
-#
-# Are they using the status monitor module? If so, check
-# for STATUS rule...
-#
-STAT_MOD="mod_status"
-if grep "$STAT_MOD" Makefile > /dev/null; then
- if [ "$RULE_STATUS" = "yes" ]; then
- CFLAGS="$CFLAGS -DSTATUS"
+####################################################################
+## Check if we really have some information to compile
+## the shared objects if SharedModule was used.
+##
+if [ "x$using_shlib" = "x1" ] ; then
+ if [ "x$TCFLAGS_SHLIB" = x -a "x$CFLAGS_SHLIB" = x -a \
+ "x$TLDFLAGS_SHLIB" = x -a "x$LDFLAGS_SHLIB" = x ]; then
+ echo ""
+ echo "** FAILURE: Sorry, no shared object support available."
+ echo "** Either compile all modules statically (use AddModule instead"
+ echo "** of SharedModule in the Configuration file) or at least provide"
+ echo "** us with the appropriate compiler and linker flags via the"
+ echo "** CFLAGS_SHLIB, LDFLAGS_SHLIB and LDFLAGS_SHLIB_EXPORT entries"
+ echo "** in the Configuration file."
+ echo ""
+ exit 1
fi
fi
-#
-# Are they using dbm auth? If so, add DBM library.
-#
-if grep mod_auth_dbm Makefile > /dev/null; then
- LIBS="$LIBS $DBM_LIB"
+####################################################################
+## Now we do some OS specific adjustments... for some OSs, we need
+## to adjust CFLAGS and/or OPTIM depending on which compiler we
+## are going to use. This is easy, since this can be gleamed from
+## Makefile.config
+##
+case "$OS" in
+ 'ULTRIX')
+ case "$CC" in
+ */cc|cc ) CFLAGS="$CFLAGS -std" ;;
+ esac
+ ;;
+ 'SCO 5')
+ case "$CC" in
+ */cc|cc ) CFLAGS="$CFLAGS -K noinline" ;;
+ esac
+ ;;
+ 'HI-UX')
+ case "$CC" in
+ */cc|cc )
+ CFLAGS="$CFLAGS -Aa -D_HIUX_SOURCE"
+ OPTIM=" "
+ TOPTIM=""
+ ;;
+ esac
+ ;;
+ 'HP-UX'|'HP-UX 10'|'HP-UX 11')
+ case "$CC" in
+ */cc|cc )
+ CFLAGS="$CFLAGS -Aa -D_HPUX_SOURCE"
+ OPTIM=" "
+ TOPTIM=""
+ ;;
+ esac
+ ;;
+ *IRIX-64*)
+ if [ "$RULE_IRIXN32" = "yes" ]; then
+ case "$CC" in
+ */cc|cc )
+ CFLAGS="$CFLAGS -n32"
+ LDFLAGS="$LDFLAGS -n32"
+ ;;
+ esac
+ fi
+ ;;
+ *IRIX-32*)
+ if [ "$RULE_IRIXN32" = "yes" ]; then
+ case "$CC" in
+ */cc|cc )
+ CFLAGS="$CFLAGS -n32"
+ LDFLAGS="$LDFLAGS -n32"
+ ;;
+ esac
+ fi
+ ;;
+ IBM?AIX?4.[123])
+ case $CC in
+ */cc|cc )
+ CFLAGS="$CFLAGS -qnogenpcomp -qnousepcomp"
+ ;;
+ esac
+ ;;
+esac
+
+####################################################################
+## OK, now we can write OPTIM
+##
+if [ "x$TOPTIM" = "x" ]; then
+ echo "OPTIM=$OPTIM" >> Makefile.config
fi
-#
-# Now HS's POSIX regex implementation if needed/wanted
-#
-if [ "$RULE_WANTHSREGEX" = "yes" ]; then
- REGLIB="regex/libregex.a"
- INCLUDES="$INCLUDES -Iregex"
+####################################################################
+## OK, now handle RANLIB
+##
+if [ ".$RANLIB" = . ]; then
+ if [ ".$TRANLIB" != . ]; then
+ RANLIB=$TRANLIB
+ else
+ if ./helpers/PrintPath -s ranlib; then
+ RANLIB="ranlib"
+ else
+ RANLIB="true"
+ fi
+ fi
fi
-#
-# Now SOCKS4.
-# NOTE: We assume that if they are using SOCKS4, then they've
-# adjusted EXTRA_LIBS and/or EXTRA_LFLAGS as required,
-# otherwise we assume "-L/usr/local/lib -lsocks"
-#
+####################################################################
+## Now we do some general checks and some intelligent Configuration
+## control.
+
+# Use TestCompile to look for various LIBS
+case "$PLAT" in
+ *-linux*)
+ # newer systems using glibc 2.x need -lcrypt
+ if ./helpers/TestCompile lib crypt; then
+ LIBS="$LIBS -lcrypt"
+ fi
+ ;;
+
+ *-dg-dgux*)
+ # R4.11MU02 requires -lsocket -lnsl ... no idea if it's earlier or
+ # later than what we already knew about. PR#732
+ if ./helpers/TestCompile lib socket; then
+ LIBS="$LIBS -lsocket"
+ fi
+ if ./helpers/TestCompile lib nsl; then
+ LIBS="$LIBS -lnsl"
+ fi
+ ;;
+esac
+
+# SOCKS4 support:
+# We assume that if they are using SOCKS4, then they've
+# adjusted EXTRA_LIBS and/or EXTRA_LDFLAGS as required,
+# otherwise we assume "-L/usr/local/lib -lsocks"
if [ "$RULE_SOCKS4" = "yes" ]; then
- # Set flag and check Makefile for -lsocks line
+ echo " + enabling SOCKS4 support"
+ CFLAGS="$CFLAGS -DSOCKS -DSOCKS4"
CFLAGS="$CFLAGS -Dconnect=Rconnect -Dselect=Rselect"
CFLAGS="$CFLAGS -Dgethostbyname=Rgethostbyname"
- if [ "$OS" = "Solaris 2" ]; then
- LIBS="$LIBS -lresolv"
- fi
- if grep "EXTRA_" Makefile | grep "\-lsocks" > /dev/null; then : ;
- else
+ if [ ".`grep EXTRA_ Makefile | grep lsocks`" = . ]; then
LIBS="$LIBS -L/usr/local/lib -lsocks"
fi
+ case $PLAT in
+ *-solaris2* )
+ LIBS="$LIBS -lresolv"
+ ;;
+ esac
fi
-#
-# Good enough
-#
-echo >> Makefile
-if [ "x$CC" != "x" ]; then
- echo "CC=$CC" >> Makefile.config
+# SOCKS5 support:
+# We assume that if they are using SOCKS5, then they've
+# adjusted EXTRA_LIBS and/or EXTRA_LDFLAGS as required,
+# otherwise we assume "-L/usr/local/lib -lsocks5"
+if [ "$RULE_SOCKS5" = "yes" ]; then
+ echo " + enabling SOCKS5 support"
+ CFLAGS="$CFLAGS -DSOCKS -DSOCKS5"
+ CFLAGS="$CFLAGS -Dconnect=SOCKSconnect -Dselect=SOCKSselect"
+ CFLAGS="$CFLAGS -Dgethostbyname=SOCKSgethostbyname -Dclose=SOCKSclose"
+ if [ ".`grep EXTRA_ Makefile | grep lsocks5`" = . ]; then
+ LIBS="$LIBS -L/usr/local/lib -lsocks5"
+ fi
+ case $PLAT in
+ *-solaris2* )
+ LIBS="$LIBS -lresolv"
+ ;;
+ esac
fi
-if [ "x$OPTIM" != "x" ]; then
- echo "OPTIM=$OPTIM" >> Makefile.config
+
+####################################################################
+## Find out what modules we want and try and configure things for them
+## Module lines can look like this:
+##
+## Module name_module some/path/mod_name[.[oa]]
+## AddModule some/path/mod_name[.[oa]]
+##
+## In both cases, the some/path can either be an arbitrary path (including
+## an absolute path), or a path like "modules/DIR", in which case we _might_
+## auto-generate a Makefile in modules/DIR (see later).
+##
+## The first case is the original style, where we give the module's
+## name as well as it's binary file location - either a .o or .a.
+##
+## The second format is new, and means we do not repeat the module
+## name, which is already part of the module source or definition.
+## The way we find the module name (and other optional information about
+## the module) is like this:
+##
+## 1 If extension is not given or is .c, assume .o was given and goto 3
+## 2 If extension if .module, go to D1
+## 3 If extension is .o, look for a corresponding .c file and if
+## found, go to C1
+## 4 If no .c file was found, look for a .module file (Apache module
+## definition file). If found, go to D1
+## 5 Assume module name is the "name" part of "mod_name", as in
+## name_module.
+##
+## If a C file is found:
+##
+## C1 Look for module name given by an MODULE: line (e.g. MODULE: name_module)
+## If found assume module contains a definition, and go to D1
+## C2 If not found, look for a module name given on the declaration of the
+## module structure (e.g. module name_module).
+## C3 If neither given, go to 4 above.
+##
+## If a definition file is found, or a .c file includes a module definition:
+##
+## D1 Get the module name from the MODULE: name= line
+## D2 Get other module options (libraries etc). To be done later.
+##
+##
+## For now, we will convert the AddModule lines into Module format
+## lines, so the rest of Configure can do its stuff without too much
+## additional hackery. It would be nice to reduce the number of times
+## we have to awk the $tmpfile, though.
+
+## MODFILES contains a list of module filenames (could be .c, .o, .so, .a
+## or .module files) from AddModule lines only
+## MODDIRS contains a list of subdirectories under 'modules' which
+## contain modules we want to build from both AddModule and Module
+## lines
+
+echo " + adding selected modules"
+
+MODFILES=`awk <$tmpfile '($1 == "AddModule" || $1 == "SharedModule") { printf "%s ", $2 }'`
+MODDIRS=`awk < $tmpfile '
+ ($1 == "Module" && $3 ~ /^modules\//) {
+ split ($3, pp, "/")
+ if (! SEEN[pp[2]]) {
+ printf "%s ", pp[2]
+ SEEN[pp[2]] = 1
+ }
+ }
+ (($1 == "AddModule" || $1 == "SharedModule") && $2 ~ /^modules\//) {
+ split ($2, pp, "/")
+ if (! SEEN[pp[2]]) {
+ printf "%s ", pp[2]
+ SEEN[pp[2]] = 1
+ }
+ }'`
+MODDIRS_NO_SO=`awk < $tmpfile '
+ ($1 == "Module" && $3 ~ /^modules\//) {
+ split ($3, pp, "/")
+ if (! SEEN[pp[2]]) {
+ printf "%s ", pp[2]
+ SEEN[pp[2]] = 1
+ }
+ }
+ (($1 == "AddModule") && $2 ~ /^modules\//) {
+ split ($2, pp, "/")
+ if (! SEEN[pp[2]]) {
+ printf "%s ", pp[2]
+ SEEN[pp[2]] = 1
+ }
+ }'`
+
+# Now autoconfigure each of the modules specified by AddModule.
+# Use tmpfile2 for the module definition file, and tmpfile3 for the
+# shell commands to be executed for this module.
+
+for modfile in $MODFILES ; do
+ rm -f $tmpfile2 $tmpfile3
+ modname=''
+
+ ext=`echo $modfile | sed 's/^.*\.//'`
+ modbase=`echo $modfile | sed 's/\.[^.]*$//'`
+ if [ x$ext = x$modfile ]; then ext=o; modbase=$modfile; modfile=$modbase.o; fi
+ if [ x$ext = x ] ; then ext=o; modbase=$modfile; fi
+ if [ x$ext = xc ] ; then ext=o; fi
+
+ # modbase is the path+filename without extension, ext is the
+ # extension given, or if none, o
+ if [ -r $modbase.module ] ; then
+ $CAT $modbase.module > $tmpfile2
+ else
+ if [ -f $modbase.c ] ; then
+ # Guess module structure name in case there is not
+ # module definition in this file
+ modname=`egrep '^module .*;' $modbase.c | head -1 |\
+ sed 's/^module.*[ ][ ]*//' | \
+ sed 's/[ ]*;[ ]*$//'`
+ # Get any module definition part
+ if grep "MODULE-DEFINITION-" $modbase.c > /dev/null; then
+ $CAT $modbase.c | \
+ sed '1,/MODULE-DEFINITION-START/d;/MODULE-DEFINITION-END/,$d' \
+ > $tmpfile2
+ fi
+ fi
+ fi
+ if [ -r $tmpfile2 ] ; then
+ # Read a module definition from .module or .c
+ modname=`grep "Name:" $tmpfile2 | sed 's/^.*Name:[ ]*//'`
+ if grep "ConfigStart" $tmpfile2 > /dev/null \
+ && grep "ConfigEnd" $tmpfile2 > /dev/null; then
+ sed '1,/ConfigStart/d;/ConfigEnd/,$d' $tmpfile2 > \
+ $tmpfile3
+ echo " o $modname uses ConfigStart/End"
+ if [ "$RULE_PARANOID" = "yes" ]; then
+ sed 's/^/>> /' $tmpfile3
+ fi
+ . ./$tmpfile3
+ fi
+ rm -f $tmpfile2 $tmpfile3
+ if [ $ext != so ]; then
+ ext=o
+ fi
+ fi
+ if [ "x$modname" = "x" ] ; then
+ modname=`echo $modbase | sed 's/^.*\///' | \
+ sed 's/^mod_//' | sed 's/^lib//' | sed 's/$/_module/'`
+ fi
+ if [ $ext != so ]; then
+ echo "Module $modname $modbase.$ext" >>$tmpfile
+ fi
+ # optionally generate export file for some linkers
+ if [ $ext = so -a .$SHLIB_EXPORT_FILES = .yes ]; then
+ echo "$modname" >$modbase.exp
+ fi
+done
+# $tmpfile now contains Module lines for all the modules we want
+
+####################################################################
+## Now HS's POSIX regex implementation if needed/wanted. We do it
+## now since AddModule may have changed it
+##
+if [ "$RULE_WANTHSREGEX" = "yes" ]; then
+ REGLIB="regex/libregex.a"
+ SUBDIRS="regex $SUBDIRS"
+ CFLAGS="$CFLAGS -DUSE_HSREGEX"
+fi
+
+####################################################################
+## Now the SHARED_CHAIN stuff
+##
+LIBS_SHLIB=''
+if [ "x$using_shlib" = "x1" ] ; then
+ if [ ".$RULE_SHARED_CHAIN" = .default ] ; then
+ RULE_SHARED_CHAIN=$DEF_SHARED_CHAIN
+ fi
+ if [ ".$RULE_SHARED_CHAIN" = .yes ]; then
+ echo " + enabling DSO files to be linked against others"
+ # determine libraries which can be safely linked
+ # to our DSO files, i.e. PIC libraries and shared libraries
+ extra_ldflags="`grep EXTRA_LDFLAGS= Makefile.config`"
+ extra_libs="`grep EXTRA_LIBS= Makefile.config`"
+ eval "`./helpers/slo.sh $LDFLAGS $LIBS $extra_ldflags $extra_libs`"
+ LIBS_SHLIB="$SLO_DIRS_PIC $SLO_LIBS_PIC $SLO_DIRS_DSO $SLO_LIBS_DSO"
+ fi
+fi
+
+####################################################################
+## Now the SHARED_CORE stuff
+##
+if [ "x$using_shlib" = "x1" ] ; then
+ if [ ".$RULE_SHARED_CORE" = .default ] ; then
+ RULE_SHARED_CORE=$DEF_SHARED_CORE
+ fi
+ if [ ".$RULE_SHARED_CORE" = .yes ]; then
+ echo " + enabling generation of Apache core as DSO"
+ # shuffle compiler flags from shlib variant to standard
+ CFLAGS="$CFLAGS $CFLAGS_SHLIB"
+ CFLAGS_SHLIB=""
+ # indicate that Rule SHARED_CORE is active
+ CFLAGS="$CFLAGS -DSHARED_CORE"
+ # select the special subtarget for shared core generation
+ SUBTARGET=target_shared
+ # determine additional suffixes for libhttpd.so
+ V=1 R=3 P=2
+ if [ ".$SHLIB_SUFFIX_DEPTH" = .0 ]; then
+ SHLIB_SUFFIX_LIST=""
+ fi
+ if [ ".$SHLIB_SUFFIX_DEPTH" = .1 ]; then
+ SHLIB_SUFFIX_LIST="$V"
+ fi
+ if [ ".$SHLIB_SUFFIX_DEPTH" = .2 ]; then
+ SHLIB_SUFFIX_LIST="$V.$R"
+ fi
+ if [ ".$SHLIB_SUFFIX_DEPTH" = .3 ]; then
+ SHLIB_SUFFIX_LIST="$V.$R.$P"
+ fi
+ if [ ".$SHLIB_SUFFIX_DEPTH" = .all ]; then
+ SHLIB_SUFFIX_LIST="$V $V.$R $V.$R.$P"
+ fi
+ fi
+fi
+
+####################################################################
+## Set the value of the shared libary flags, if they aren't explicitly
+## set in the configuration file
+##
+if [ "x$using_shlib" = "x1" ] ; then
+ if [ "x$TCFLAGS_SHLIB" = "x" ]; then
+ echo "CFLAGS_SHLIB=$CFLAGS_SHLIB -DSHARED_MODULE" >> Makefile.config
+ fi
+ if [ "x$TLD_SHLIB" = "x" ]; then
+ echo "LD_SHLIB=$LD_SHLIB" >> Makefile.config
+ fi
+ if [ "x$TLDFLAGS_SHLIB" = "x" ]; then
+ echo "LDFLAGS_SHLIB=$LDFLAGS_SHLIB" >> Makefile.config
+ fi
+ if [ "x$TLDFLAGS_SHLIB_EXPORT" = "x" ]; then
+ echo "LDFLAGS_SHLIB_EXPORT=$LDFLAGS_SHLIB_EXPORT" >> Makefile.config
+ fi
fi
+
+####################################################################
+## Now create modules.c
+##
+cat $tmpfile | sed 's/_module//' | awk >modules.c '
+ BEGIN {
+ modules[n++] = "core"
+ pmodules[pn++] = "core"
+ }
+ /^Module/ { modules[n++] = $2 ; pmodules[pn++] = $2 }
+ /^%Module/ { pmodules[pn++] = $2 }
+ END {
+ print "/*"
+ print " * modules.c --- automatically generated by Apache"
+ print " * configuration script. DO NOT HAND EDIT!!!!!"
+ print " */"
+ print ""
+ print "#include \"httpd.h\""
+ print "#include \"http_config.h\""
+ print ""
+ for (i = 0; i < pn; ++i) {
+ printf ("extern module %s_module;\n", pmodules[i])
+ }
+ print ""
+ print "/*"
+ print " * Modules which implicitly form the"
+ print " * list of activated modules on startup,"
+ print " * i.e. these are the modules which are"
+ print " * initially linked into the Apache processing"
+ print " * [extendable under run-time via AddModule]"
+ print " */"
+ print "module *ap_prelinked_modules[] = {"
+ for (i = 0; i < n; ++i) {
+ printf " &%s_module,\n", modules[i]
+ }
+ print " NULL"
+ print "};"
+ print ""
+ print "/*"
+ print " * Modules which initially form the"
+ print " * list of available modules on startup,"
+ print " * i.e. these are the modules which are"
+ print " * initially loaded into the Apache process"
+ print " * [extendable under run-time via LoadModule]"
+ print " */"
+ print "module *ap_preloaded_modules[] = {"
+ for (i = 0; i < pn; ++i) {
+ printf " &%s_module,\n", pmodules[i]
+ }
+ print " NULL"
+ print "};"
+ print ""
+ }'
+
+####################################################################
+## figure out which module dir require use to autocreate a Makefile.
+## for these dirs we must not list the object files from the AddModule
+## lines individually since the auto-generated Makefile will create
+## a library called libMODDIR.a for it (MODDIR is the module dir
+## name). We create two variable here:
+##
+## AUTODIRS Space separated list of module directories, relative to
+## src
+## AUTOLIBS Space separated list of auto-generated library files
+##
+for moddir in $MODDIRS
+do
+ if [ -f modules/$moddir/Makefile.tmpl ] ; then
+ AUTODIRS="$AUTODIRS modules/$moddir"
+ fi
+done
+for moddir in $MODDIRS_NO_SO
+do
+ if [ -f modules/$moddir/Makefile.tmpl ] ; then
+ AUTOLIBS="$AUTOLIBS modules/$moddir/lib$moddir.a"
+ fi
+done
+
+####################################################################
+## Add the module targets to the Makefile. Do not add individual object
+## targets for auto-generated directories.
+##
+$CAT > $awkfile <<EOF1
+ BEGIN {
+ split ("$AUTODIRS", tmp, " ")
+EOF1
+$CAT >> $awkfile <<'EOF2'
+ for ( key in tmp ) {
+ autodirs[tmp[key]] = 1
+ }
+ }
+ /^Module/ { modules[n++] = $3 }
+ /^%Module/ { modules[n++] = $3 }
+ END {
+ print "MODULES= \\"
+ for (i = 0; i < n; ++i) {
+ split (modules[i], pp, "/")
+ dir = pp[1] "/" pp[2]
+ inthere = 0
+ for ( tdir in autodirs ) {
+ if (tdir == dir)
+ inthere = 1
+ }
+ if (inthere == 1)
+ continue
+ else
+ printf (" %s \\\n", modules[i])
+ }
+ }
+EOF2
+awk -f $awkfile >>Makefile <$tmpfile
+
+####################################################################
+## Now add the auto-generated library targets. Need to use awk so we
+## don't hang a continuation on the last line.
+##
+$CAT > $awkfile <<'EOF4'
+ {
+ z = 0
+ split ($0, libs)
+ for ( lib in libs ) {
+ if (z != 0)
+ printf (" \\\n")
+ z++
+ printf (" %s", libs[lib])
+ }
+ }
+ END {
+ printf ("\n")
+ }
+EOF4
+echo "$AUTOLIBS" | awk -f $awkfile >>Makefile
+echo "" >>Makefile
+
+####################################################################
+## Now add the target for the main Makefile
+##
+echo "TARGET=$TARGET" >> Makefile
+echo "SUBDIRS=$SUBDIRS" >> Makefile
+echo "SUBTARGET=$SUBTARGET" >> Makefile
+echo "SHLIB_SUFFIX_NAME=$SHLIB_SUFFIX_NAME" >> Makefile
+echo "SHLIB_SUFFIX_LIST=$SHLIB_SUFFIX_LIST" >> Makefile
+echo "" >> Makefile
+
+####################################################################
+## Now add -DSERVER_SUBVERSION if $SUBVERSION is set
+##
+if [ "x$SUBVERSION" != "x" ] ; then
+ SUBVERSION=`echo $SUBVERSION | sed 's/^ +//'`
+ CFLAGS="$CFLAGS -DSERVER_SUBVERSION=\\\"$SUBVERSION\\\""
+fi
+
+####################################################################
+## Determine GNU Make variant because
+## it uses ugly looking built-in directory walk messages
+## while we are already using our own messages
+##
+if [ ".`make -v 2>/dev/null | grep 'GNU Make'`" = . ]; then
+ MFLAGS_STATIC=
+else
+ MFLAGS_STATIC=--no-print-directory
+fi
+
+####################################################################
+## Continue building Makefile.config. Fill in all entries except
+## for $LIBS at this point. This implies that anything below
+## can only alter $LIBS
+##
echo "CFLAGS1=$CFLAGS">> Makefile.config
+echo "OSDIR=\$(SRCDIR)/$OSDIR">> Makefile.config
+echo "INCDIR=\$(SRCDIR)/include" >>Makefile.config
+echo "INCLUDES0=-I\$(OSDIR) -I\$(INCDIR)">> Makefile.config
echo "INCLUDES1=$INCLUDES">> Makefile.config
-echo "LIBS1=$LIBS">> Makefile.config
-echo "LFLAGS1=$LFLAGS">> Makefile.config
-echo "BROKEN_BPRINTF_FLAGS=$OSBPRINTF">> Makefile.config
+echo "LIBS_SHLIB=$LIBS_SHLIB">> Makefile.config
+echo "LDFLAGS1=$LDFLAGS">> Makefile.config
+echo "MFLAGS_STATIC=$MFLAGS_STATIC">> Makefile.config
echo "REGLIB=$REGLIB">> Makefile.config
echo "RANLIB=$RANLIB">> Makefile.config
echo "SHELL=$SHELL">> Makefile.config
-echo >> Makefile.config
-echo "#### End of Configure created section ####">> Makefile.config
+####################################################################
+## Some OS-related stuff for the DSO mechanism:
+## Finding the vendor DSO functions
+##
+if [ "x$using_shlib" = "x1" ] ; then
+ DL_LIB=""
+ case $PLAT in
+ *-ibm-aix* )
+ DL_LIB="-lld"
+ ;;
+ *-hp-hpux*)
+ if ./helpers/TestCompile func shl_load; then
+ :
+ else
+ if ./helpers/TestCompile lib dld; then
+ DL_LIB="-ldld"
+ fi
+ fi
+ ;;
+ * )
+ if ./helpers/TestCompile func dlopen; then
+ :
+ else
+ if ./helpers/TestCompile lib dl; then
+ DL_LIB="-ldl"
+ fi
+ fi
+ ;;
+ esac
+ if [ ".$DL_LIB" != . ]; then
+ LIBS="$LIBS $DL_LIB"
+ echo " + using $DL_LIB for vendor DSO support"
+ fi
+fi
-# Now (finish) creating the makefiles
-cat Makefile.config >> Makefile
-sed -e "s#@@Configuration@@#$file#" "$makefile_tmpl" >>Makefile
-awk >>Makefile <$tmpfile \
- '($1 == "Module" && $3 ~ /modules\//) { printf "%s: modules/last-built ; @cat /dev/null\n\n", $3, $3}'
-#cat Makefile.config ../support/Makefile.tmpl > ../support/Makefile
+####################################################################
+## Finish building ap_config_auto.h
+##
+## We pick out all -D's from CFLAGS and insert them as defines into
+## ap_config_auto.h so they are available to external modules needing to
+## include Apache header files.
+##
+touch $tmpconfig ;
+for cflag in $CFLAGS; do
+ echo $cflag | sed 's/\\\"/\"/g' >>$tmpconfig ;
+done
+awk >>$AP_CONFIG_AUTO_H <$tmpconfig '
+ /^-D.*/ {
+ define = substr($1, 3, length($1)-2)
+ split(define, parts, "=")
+ printf ("\n/* build flag: %s */\n", $0)
+ printf ("#ifndef %s\n#define %s %s\n#endif\n", parts[1],parts[1],parts[2])
+ }
+'
-cat << EOF > modules/Makefile
-#
-# Simple Makefile for modules in src/modules.
-# Generated by src/Configure according to rules in src/Configuration;
-# hand-edit at your own risk!
-#
+# finish header file
+echo "" >>$AP_CONFIG_AUTO_H
+echo "#endif /* AP_CONFIG_AUTO_H */" >>$AP_CONFIG_AUTO_H
-SHELL=$SHELL
-EOF
+####################################################################
+## Finish creating the Makefile.config file
+##
+echo "LIBS1=$LIBS">> Makefile.config
+echo "##" >> Makefile.config
+echo "## (End of automatically generated section)">> Makefile.config
+echo "##" >> Makefile.config
+echo "" >> Makefile.config
-if [ "$RULE_WANTHSREGEX" = "yes" ]; then
- INCLUDES2="-I../../regex"
+####################################################################
+## Use TestCompile to see if $(CC) is ANSI and as a "final" sanity
+## check
+##
+echo " + doing sanity check on compiler and options"
+if ./helpers/TestCompile sanity; then
+ :
+else
+ echo "** A test compilation with your Makefile configuration"
+ echo "** failed. This is most likely because your C compiler"
+ echo "** is not ANSI. Apache requires an ANSI C Compiler, such"
+ echo "** as gcc. The above error message from your compiler"
+ echo "** will also provide a clue."
+ echo " Aborting!"
+ exitcode=1
+ exit 1
fi
-echo "INCLUDES2=$INCLUDES2">> modules/Makefile
-echo "MOD_CFLAGS=\$(INCLUDES2) \$(AUX_CFLAGS)">> modules/Makefile
+####################################################################
+## Now (finish) creating the makefiles
+##
+
+# ./Makefile
+$CAT Makefile.config >> Makefile
+sed -e "s#@@Configuration@@#$file#" "Makefile.tmpl" >>Makefile
-awk >> modules/Makefile < $tmpfile '\
- BEGIN {printf "MODULES="} \
- ($1 == "Module" && $3 ~ /modules\//) {split ($3, pp, "/"); printf "%s ", pp[2]} \
- END {printf "\n"}'
+# xxx/Makefile
+MAKEDIRS="support main ap regex $OSDIR"
+for dir in $MAKEDIRS ; do
+ echo Creating Makefile in $dir
+ ./helpers/mfhead $dir $file > $dir/Makefile
+ $CAT Makefile.config $dir/Makefile.tmpl |\
+ sed -e "s:^SRCDIR=.*:SRCDIR=`./helpers/fp2rp $dir`:" >> $dir/Makefile
+done
-awk >> modules/Makefile < $tmpfile '\
- BEGIN {printf "CLEANERS="} \
- ($1 == "Module" && $3 ~ /modules\//) {split ($3, pp, "/"); printf "%s_clean ", pp[2]} \
- END {printf "\n"}'
+####################################################################
+## Now create the modules/Makefile
+##
+./helpers/mfhead modules $file > modules/Makefile
+$CAT Makefile.config | sed -e 's:^SRCDIR=.*:SRCDIR=..:' >> modules/Makefile
-cat << EOF >> modules/Makefile
+$CAT << EOF >> modules/Makefile
+MODULES=$MODDIRS
+CFLAGS=\$(OPTIM) \$(CFLAGS1) \$(EXTRA_CFLAGS)
-default: \$(MODULES)
- @echo "Done building module subdirectories"
+default: all
-clean: \$(CLEANERS)
- @echo "Done cleaning module subdirectories"
+all clean distclean depend ::
+ @for i in \$(MODULES); do \\
+ echo "===> \$(SDP)modules/\$\$i"; \\
+ (cd \$\$i && \$(MAKE) \$(MFLAGS_STATIC) SDP='\$(SDP)' CC='\$(CC)' AUX_CFLAGS='\$(CFLAGS)' RANLIB='\$(RANLIB)' \$@) || exit 1; \\
+ echo "<=== \$(SDP)modules/\$\$i"; \\
+ done
-placeholder \$(MODULES): ForceMe
- (cd \$@; \$(MAKE) CC='\$(CC)' AUX_CFLAGS='\$(MOD_CFLAGS)' RANLIB='\$(RANLIB)')
+EOF
-ForceMe:
+####################################################################
+## Now create modules/xxx/Makefile
+##
+for moddir in $AUTODIRS ; do
+ echo "Creating Makefile in $moddir"
+ ./helpers/mfhead $moddir $file > $moddir/Makefile
+ $CAT Makefile.config |\
+ sed -e "s:^SRCDIR=.*:SRCDIR=`./helpers/fp2rp $moddir`:" >> $moddir/Makefile
+ $CAT << 'EOF' >> $moddir/Makefile
+##
+## Default Makefile options from Configure script
+## (Begin of automatically generated section)
+##
+CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS)
+LIBS=$(EXTRA_LIBS) $(LIBS1)
+INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES)
+LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS)
+INCDIR=$(SRCDIR)/include
EOF
+ if [ -f $moddir/Makefile.libdir ]; then
+ basedir=`echo $moddir | sed 's@^[^/]*/@@g'`
+ awk >> $moddir/Makefile < $tmpfile '
+ ($2 ~ /^modules\/'$basedir'\//) {
+ split($2, pp, "/");
+ split(pp[3], parts, ".");
+ libext=parts[2];
+ }
+ END {
+ printf "LIBEXT=%s\n", libext;
+ }'
+ # it's responsible for the rest of its Makefile...
+ else
+ basedir=`echo $moddir | sed 's@^[^/]*/@@g'`
+ OBJS=`awk < $tmpfile '
+ ($1 == "Module" && $3 ~ /^modules\/'$basedir'\//) {
+ split ($3, pp, "/")
+ printf "%s ", pp[3]
+ }
+ '`
+ echo "OBJS=$OBJS" >> $moddir/Makefile
+ if [ ".$OBJS" != . ]; then
+ echo "LIB=lib$basedir.a" >> $moddir/Makefile
+ else
+ # essential!
+ echo "LIB=" >> $moddir/Makefile
+ fi
+ awk >> $moddir/Makefile < $tmpfile '
+ ($1 == "SharedModule" && $2 ~ /^modules\/'$basedir'\//) {
+ split($2, pp, "/")
+ shlibs=shlibs " " pp[3]
+ so=pp[3]
+ split(pp[3], parts, ".")
+ base=parts[1]
+ objspic=objspic " " base ".lo"
+ }
+ END {
+ printf "SHLIBS=%s\n", shlibs;
+ printf "OBJS_PIC=%s\n", objspic;
+ }'
+
+ $CAT << 'EOF' >> $moddir/Makefile
-awk >>modules/Makefile <$tmpfile \
- '($1 == "Module" && $3 ~ /modules\//) { split ($3, pp, "/"); \
- printf "%s_clean:\n\t(cd %s; $(MAKE) clean)\n\n", pp[2], pp[2]}'
+all: lib shlib
+
+lib: $(LIB)
+
+shlib: $(SHLIBS)
+
+dummy $(LIB): $(OBJS)
+ rm -f $@
+ ar cr $@ $(OBJS)
+ $(RANLIB) $@
+
+.SUFFIXES: .o .so
+
+.c.o:
+ $(CC) -c $(INCLUDES) $(CFLAGS) $<
+
+.c.so:
+ $(CC) -c $(INCLUDES) $(CFLAGS) $(CFLAGS_SHLIB) $< && mv $*.o $*.lo
+ $(LD_SHLIB) $(LDFLAGS_SHLIB) -o $@ $*.lo $(LIBS_SHLIB)
+
+clean:
+ rm -f $(LIB) $(OBJS) $(SHLIBS) $(OBJS_PIC)
+
+distclean: clean
+ rm -f Makefile
+
+# NOT FOR END USERS!
+depend:
+ cp Makefile.tmpl Makefile.tmpl.bak \
+ && sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl > Makefile.new \
+ && gcc -MM $(INCLUDES) $(CFLAGS) *.c >> Makefile.new \
+ && sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' \
+ -e '1,$$s: $(OSDIR)/: $$(OSDIR)/:g' Makefile.new \
+ > Makefile.tmpl \
+ && rm Makefile.new
+
+EOF
+ fi
+
+ $CAT << 'EOF' >> $moddir/Makefile
+##
+## (End of automatically generated section)
+##
+EOF
+ $CAT >> $moddir/Makefile < $moddir/Makefile.tmpl
+
+done