blob: b893f52134464a2e34a846e8ad7a5a06b202bff6 [file] [log] [blame]
#!/bin/sh
trap 'rm -f $tmpfile; exit' 0 1 2 3 15
# Apache configuration script, first cut --- rst.
# Dont 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
#
file=Configuration
tmpfile=htconf.$$
makefile_tmpl=Makefile.tmpl
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."
exit 1
fi
elif [ "x$1" = "x-make" ] ; then
shift 1; makefile_tmpl=$1; shift 1
if [ ! -r $makefile_tmpl ]; then
echo "$makefile_tmpl does not exist or is not readable."
exit 1
fi
else
echo "Ignoring command line option '$1'"
shift 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\""
exit 1
fi
# First, strip comments and blank lines and then change Rules to comments
sed 's/#.*//' $file | sed '/^[ ]*$/d' | sed 's/[ ]*$//' | \
sed 's/^Rule[ ]*/##Rule:/' > $tmpfile
# Check for syntax errors...
if egrep -v '^%?Module[ ]+[A-Za-z0-9_]+[ ]+[^ ]+$' $tmpfile \
| 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
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=`./helpers/CutRule WANTHSREGEX $file`
RULE_STATUS=`./helpers/CutRule STATUS $file`
RULE_SOCKS4=`./helpers/CutRule SOCKS4 $file`
RULE_IRIXNIS=`./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.
#
PLAT=`./helpers/GuessOS`
# Preset DBM_LIB. Can be overridden on a per-platform basis.
DBM_LIB="-ldbm"
#
# Look for ranlib. Do it early in case we want to override it below
#
if ./helpers/PrintPath -s ranlib; then
RANLIB="ranlib"
else
RANLIB="true"
fi
case "$PLAT" in
*-apple-aux3*)
OS='A/UX 3.1.x'
CFLAGS="$CFLAGS -DAUX -D_POSIX_SOURCE"
LIBS="$LIBS -lposix -lbsd"
LFLAGS="$LFLAGS -s"
DEF_WANTHSREGEX=no
;;
i386-ibm-aix*)
OS='IBM AIX PS/2'
CFLAGS="$CFLAGS -DAIX -U__STR__ -DUSEBCOPY"
DEF_WANTHSREGEX=no
;;
*-ibm-aix*)
OS='IBM AIX'
CFLAGS="$CFLAGS -DAIX -U__STR__"
;;
*-apollo-*)
OS='Apollo Domain'
CFLAGS="$CFLAGS -DAPOLLO"
;;
*-dg-dgux*)
OS='DG/UX 5.4'
CFLAGS="$CFLAGS -DDGUX"
;;
*OS/2*)
DEF_WANTHSREGEX=yes
OS='EMX OS/2'
CFLAGS="$CFLAGS -Zbsd-signals -Zbin-files -DTCPIPV4 -g"
LIBS="$LIBS -lsocket -llibufc -lbsd"
DBM_LIB="-lgdbm"
;;
*-hp-hpux10.*)
OS='HP-UX 10'
CFLAGS="$CFLAGS -DHPUX10"
# if we're using the HPUX compiler, add a few flags.
if [ "$CC" = "cc" ]; then
CFLAGS="$CFLAGS -Aa -D_HPUX_SOURCE"
fi
;;
*-hp-hpux*)
OS='HP-UX'
CFLAGS="$CFLAGS -DHPUX"
if [ "$CC" = "cc" ]; then
CFLAGS="$CFLAGS -Aa -D_HPUX_SOURCE"
fi
;;
*-sgi-irix64)
# 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'
CFLAGS="$CFLAGS -DIRIX"
LIBS="$LIBS -lsun"
else
OS='SGI IRIX'
CFLAGS="$CFLAGS -DIRIX"
fi
;;
*-sgi-irix)
DEF_WANTHSREGEX=yes
DBM_LIB=""
if [ "$RULE_IRIXNIS" = "yes" ]; then
OS='SGI IRIX w/NIS'
CFLAGS="$CFLAGS -DIRIX"
LIBS="$LIBS -lsun"
else
OS='SGI IRIX'
CFLAGS="$CFLAGS -DIRIX"
fi
;;
*-linux*)
DEF_WANTHSREGEX=yes
OS='Linux'
CFLAGS="$CFLAGS -DLINUX"
;;
*-lynx-lynxos*)
OS='LynxOS'
CFLAGS="$CFLAGS -DLYNXOS"
LIBS="$LIBS -lbsd -ldes -lc_p"
;;
*486-*-bsdi*)
OS='BSDI w/486'
CFLAGS="$CFLAGS -m486"
DBM_LIB=""
;;
*-bsdi*)
OS='BSDI'
DBM_LIB=""
;;
*486-*-freebsd*|*486-*-netbsd*)
OS='FreeBSD/NETBSD on 486'
LIBS="$LIBS -lcrypt"
DBM_LIB=""
;;
*-freebsd*|*-netbsd*)
OS='FreeBSD/NetBSD'
LIBS="$LIBS -lcrypt"
DBM_LIB=""
;;
*-openbsd*)
OS='OpenBSD'
;;
*-next-nextstep*)
OS='NeXT'
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
;;
*-dec-osf*)
OS='DEC OSF/1'
CFLAGS="$CFLAGS -DOSF1"
LIBS="$LIBS -lm"
;;
*-qnx)
OS='QNX'
CFLAGS="$CFLAGS -DQNX"
LIBS="$LIBS -N128k -lsocket"
DEF_WANTHSREGEX=yes
;;
*-qnx32)
OS='QNX32'
CFLAGS="$CFLAGS -DQNX -mf -3"
LIBS="$LIBS -N128k -lsocket"
DEF_WANTHSREGEX=yes
;;
*-isc4*)
OS='ISC 4'
CC=gcc
CFLAGS="$CFLAGS -posix -DISC"
LFLAGS="$LFLAGS -posix"
LIBS="$LIBS -linet"
DEF_WANTHSREGEX=yes
;;
*-sco3*)
OS='SCO 3'
CFLAGS="$CFLAGS -DSCO -Oacgiltz"
LIBS="$LIBS -lPW -lsocket -lmalloc -lcrypt_i"
DEF_WANTHSREGEX=yes
;;
*-sco5*)
OS='SCO 5'
CFLAGS="$CFLAGS -DSCO5"
LIBS="$LIBS -lsocket -lmalloc -lprot"
OSBPRINTF="-K noinline"
DEF_WANTHSREGEX=no
;;
*-solaris2*)
OS='Solaris 2'
CFLAGS="$CFLAGS -DSOLARIS2"
LIBS="$LIBS -lsocket -lnsl"
DBM_LIB=""
DEF_WANTHSREGEX=yes
;;
*-sunos4*)
OS='SunOS 4'
CFLAGS="$CFLAGS -DSUNOS4 -DUSEBCOPY"
DEF_WANTHSREGEX=yes
;;
*-unixware1)
DEF_WANTHSREGEX=yes
OS='Unixware'
CFLAGS="$CFLAGS -DSVR4"
LIBS="$LIBS -lsocket -lnsl -lcrypt"
;;
*-unixware2)
DEF_WANTHSREGEX=yes
OS='Unixware'
CFLAGS="$CFLAGS -DSVR4"
LIBS="$LIBS -lsocket -lnsl -lcrypt"
;;
*-unixware211)
OS='Unixware 2.1.1'
CFLAGS="$CFLAGS -DUW"
LIBS="$LIBS -lsocket -lnsl -lcrypt"
;;
*-sni-sysv4*)
OS='SVR4'
CFLAGS="$CFLAGS -DSVR4"
DEF_WANTHSREGEX=yes
LIBS="$LIBS -lsocket -lnsl -lc"
;;
*-sysv4*)
OS='SVR4'
CFLAGS="$CFLAGS -DSVR4"
LIBS="$LIBS -lsocket -lnsl -lc"
;;
*-uts*)
OS='Amdahl UTS'
CFLAGS="$CFLAGS -Xa -eft -DUTS21"
LIBS="$LIBS -lsocket -lbsd -la"
;;
UXPDS)
OS='UXP/DS'
CFLAGS="$CFLAGS -DUXPDS"
LIBS="$LIBS -lsocket -lnsl"
;;
*-ultrix)
OS='ULTRIX'
CFLAGS="-DULTRIX"
DEF_WANTHSREGEX=yes
;;
*powerpc-tenon-machten*)
OS='MachTen'
LFLAGS="$LFLAGS -Xlstack=131072 -Xldelcsect"
;;
*convex-v11*)
OS='CONVEXOS11'
CFLAGS="$CFLAGS -DCONVEXOS11"
CC='cc'
DEF_WANTHSREGEX=yes
;;
i860-intel-osf1)
DEF_WANTHSREGEX=yes
OS='Paragon OSF/1'
CFLAGS="$CFLAGS -DPARAGON"
;;
*) # default: Catch systems we don't know about
echo Sorry, but we cannot grok \"$PLAT\"
echo uname -m
uname -m
echo uname -r
uname -r
echo uname -s
uname -s
echo uname -v
uname -v
echo uname -X
uname -X
echo Ideally, read the file PORTING, do what it says and send the
echo resulting patches to apache-bugs@apache.org. Otherwise, email
echo this output to apache-bugs@apache.org.
echo Thank you
exit 1
;;
esac
#
# See if we need to override WANTHSREGEX
#
if [ "$RULE_WANTHSREGEX" = "default" ]; then
if [ "x$DEF_WANTHSREGEX" = "x" ]; then
RULE_WANTHSREGEX=no
else
RULE_WANTHSREGEX=$DEF_WANTHSREGEX
fi
fi
# Show the final values of the rules
echo "# Platform: $OS" >> Makefile
echo "# Final Rules:" >> Makefile
echo "# Rule WANTHSREGEX=$RULE_WANTHSREGEX" >> Makefile
echo "###############" >> Makefile
#
# 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 some popular compilers in our $PATH
# and set a "safe" optimization level
#
for compilers in "gcc" "cc" "acc" "c89"
do
lookedfor="$lookedfor $compilers"
if ./helpers/PrintPath -s $compilers; then
COMPILER="$compilers"
break
fi
done
if grep "CC=" Makefile > /dev/null; then
CC="" # clear it just in case
else
if [ "x$CC" = "x" ]; then
if [ "x$COMPILER" = "x" ]; then
echo "Error: could not find any of these C compilers"
echo " anywhere in your PATH: $lookedfor"
echo "Configure terminated"
exit 1
fi
CC=$COMPILER
fi
echo " + setting C compiler to $CC"
fi
#
# Ditto for optimization
#
if grep "OPTIM=" Makefile > /dev/null; then
OPTIM="" # ditto
else
if [ "x$OPTIM" = "x" ]; then
OPTIM="-O2"
fi
echo " + setting C compiler optimization-level to $OPTIM"
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"
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"
fi
#
# Now HS's POSIX regex implementation if needed/wanted
#
if [ "$RULE_WANTHSREGEX" = "yes" ]; then
REGLIB="regex/libregex.a"
INCLUDES="$INCLUDES -Iregex"
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"
#
if [ "$RULE_SOCKS4" = "yes" ]; then
# Set flag and check Makefile for -lsocks line
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
LIBS="$LIBS -L/usr/local/lib -lsocks"
fi
fi
#
# Good enough
#
echo >> Makefile
if [ "x$CC" != "x" ]; then
echo "CC=$CC" >> Makefile
fi
if [ "x$OPTIM" != "x" ]; then
echo "OPTIM=$OPTIM" >> Makefile
fi
echo "CFLAGS1=$CFLAGS">> Makefile
echo "INCLUDES1=$INCLUDES">> Makefile
echo "LIBS1=$LIBS">> Makefile
echo "LFLAGS1=$LFLAGS">> Makefile
echo "BROKEN_BPRINTF_FLAGS=$OSBPRINTF">> Makefile
echo "REGLIB=$REGLIB">> Makefile
echo "RANLIB=$RANLIB">> Makefile
echo >> Makefile
echo "#### End of Configure created section ####">> Makefile
echo >> Makefile
cat "$makefile_tmpl" >> Makefile