#!/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 4 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
#	TestLib: See if a specified library is available
#
####################################################################
## Setup some defaults
##
file=Configuration
tmpfile=htconf.$$
makefile_tmpl=Makefile.tmpl

####################################################################
## Now handle any arguments, which, for now, are -file and -make
## to select alternate Configuration and Makefile.tmpl files
##
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

####################################################################
## 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/[ 	]*=[ 	]*/=/' | \
 sed 's/^Rule[ 	]*/##Rule:/' | \
 sed 's/^[ 	]*Module/Module/' | \
 sed 's/^[        ]*%Module/%Module/' > $tmpfile

#
# 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
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

####################################################################
# Start building the modules.c file from what was included
# in Configuration
####
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 "};"; \
   }'

####################################################################
# Start creating the Makefile. We add some comments and
# then fold in the modules that were included in Configuration
#
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 we create a stub file, called Makefile.config, which
# just includes those assignments (eg: CC=gcc) in Configuration
#
awk >Makefile.config <$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`
RULE_IRIXN32=`./helpers/CutRule IRIXN32 $file`

####################################################################
# Preset some "constants"; can be overridden on a per-platform basis below.
#
DBM_LIB="-ldbm"
DB_LIB="-ldb"
SHELL="/bin/sh"
if ./helpers/PrintPath -s ranlib; then
    RANLIB="ranlib"
else
    RANLIB="true"
fi

####################################################################
# 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`

case "$PLAT" in
    *MPE/iX*)
        OS='MPE/iX'
	CFLAGS="$CFLAGS -DMPE -D_POSIX_SOURCE -D_SOCKET_SOURCE"
	LIBS="$LIBS -lsocket"
	LDFLAGS="$LDFLAGS -Xlinker \"-WL,cap=ia,ba,ph,pm;nmstack=1024000\""
	;;
    *-apple-aux3*)
	OS='A/UX 3.1.x'
	CFLAGS="$CFLAGS -DAUX -D_POSIX_SOURCE"
	LIBS="$LIBS -lposix -lbsd"
	LDFLAGS="$LDFLAGS -s"
	DEF_WANTHSREGEX=no
	;;
    i386-ibm-aix*)
    	OS='IBM AIX PS/2'
	CFLAGS="$CFLAGS -DAIX -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*)
        OS='IBM AIX >= 4.2'
        CFLAGS="$CFLAGS -DAIX -U__STR__"
        ;;
    *-apollo-*)
	OS='Apollo Domain'
	CFLAGS="$CFLAGS -DAPOLLO"
	;;
    *-dg-dgux*)
	OS='DG/UX 5.4'
	CFLAGS="$CFLAGS -DDGUX"
	DEF_WANTHSREGEX=yes
	;;
    *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"
	;;
    *-hi-hiux)
	OS='HI-UX'
	CFLAGS="$CFLAGS -DHIUX"
	;;
    *-hp-hpux10.*)
	OS='HP-UX 10'
	CFLAGS="$CFLAGS -DHPUX10"
	;;
    *-hp-hpux*)
	OS='HP-UX'
	CFLAGS="$CFLAGS -DHPUX"
	;;
    *-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"
	LDFLAGS="$LDFLAGS -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-irix32)
	DEF_WANTHSREGEX=yes
	DBM_LIB=""
	if [ "$RULE_IRIXN32" = "yes" ]; then
	    CFLAGS="$CFLAGS -n32"
	    LDFLAGS="$LDFLAGS -n32"
	    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=""
	if [ "$RULE_IRIXNIS" = "yes" ]; then
	    OS='SGI IRIX w/NIS'
	    CFLAGS="$CFLAGS -DIRIX"
	    LIBS="$LIBS -lsun"
	else
	    OS='SGI IRIX'
	    CFLAGS="$CFLAGS -DIRIX"
	fi
	;;
    *-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"
	;;
    *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'
	LIBS="$LIBS -lcrypt"
	DBM_LIB=""
	DB_LIB=""
	;;
    *-freebsd*|*-netbsd*)
	OS='FreeBSD/NetBSD'
	LIBS="$LIBS -lcrypt"
	DBM_LIB=""
	DB_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"
	LDFLAGS="$LDFLAGS -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"
	DEF_WANTHSREGEX=no
	;;
    *-solaris2*)
    	SOLVER=`echo $PLAT | sed -e 's/^.*solaris2.//'`
	OS="Solaris $SOLVER"
	CFLAGS="$CFLAGS -DSOLARIS2=$SOLVER"
	LIBS="$LIBS -lsocket -lnsl"
	DBM_LIB=""
	case "$SOLVER" in
	    2[0123]*)
		DEF_WANTHSREGEX=yes
		;;
	    *)
		DEF_WANTHSREGEX=no
		;;
	esac
	;;
    *-sunos4*)
	OS='SunOS 4'
	CFLAGS="$CFLAGS -DSUNOS4 -DUSEBCOPY"
	DEF_WANTHSREGEX=yes
	;;
    *-unixware1)
	DEF_WANTHSREGEX=yes
	OS='Unixware'
	CFLAGS="$CFLAGS -DSVR4 -DNO_LINGCLOSE"
	LIBS="$LIBS -lsocket -lnsl -lcrypt"
	;;
    *-unixware2)
	DEF_WANTHSREGEX=yes
	OS='Unixware'
	CFLAGS="$CFLAGS -DSVR4 -DNO_LINGCLOSE"
	LIBS="$LIBS -lsocket -lnsl -lcrypt"
	;;
    *-unixware211)
	OS='Unixware 2.1.1'
	CFLAGS="$CFLAGS -DUW"
	LIBS="$LIBS -lsocket -lnsl -lcrypt"
	;;
    *-unixware212)
	OS='Unixware 2.1.2'
	CFLAGS="$CFLAGS -DUW"
	LIBS="$LIBS -lsocket -lnsl -lcrypt"
	DBM_LIB=""
	;;
    maxion-*-sysv4*)
    	OS='SVR4'
	CFLAGS="$CFLAGS -DSVR4"
	DEF_WANTHSREGEX=yes
	LIBS="$LIBS -lsocket -lnsl -lc -lgen"
	;;
    *-sni-sysv4*)
	OS='SVR4'
	CFLAGS="$CFLAGS -DSVR4 -D_XPG_IV -DHAVE_MMAP"
	DEF_WANTHSREGEX=yes
	LIBS="$LIBS -lsocket -lnsl -lc"
	;;
    DS/90\ 7000-*-sysv4*)
	OS='UXP/DS'
	CFLAGS="$CFLAGS -DUXPDS"
	LIBS="$LIBS -lsocket -lnsl"
	DEF_WANTHSREGEX=yes
	;;
    *-tandem-sysv4*)
	OS='SVR4'
	CFLAGS="$CFLAGS -DSVR4"
	LIBS="$LIBS -lsocket -lnsl"
	DEF_WANTHSREGEX=yes
	;;
    *-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"
	;;
    *-ultrix)
	OS='ULTRIX'
	CFLAGS="-DULTRIX"
	DEF_WANTHSREGEX=yes
	SHELL="/bin/sh5"
	;;
    *powerpc-tenon-machten*)
	OS='MachTen PPC'
	LDFLAGS="$LDFLAGS -Xlstack=0x14000 -Xldelcsect"
	;;
    *-machten*)
	OS='MachTen 68K'
	LDFLAGS="$LDFLAGS -stack 0x14000"
	DEF_WANTHSREGEX=yes
	;;
    *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"
	;;
    *DYNIX*)
	DEF_WANTHSREGEX=yes
	OS='SEQUENT'
	CFLAGS="$CFLAGS -DSEQUENT"
	;;
    *NEWS-OS*)
	DEF_WANTHSREGEX=yes
	OS='SONY NEWS-OS'
	CFLAGS="$CFLAGS -DNEWSOS"
	;;
    *) # 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 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
	;;
esac

#
# And adjust/override WANTHSREGEX as needed
#
if [ "$RULE_WANTHSREGEX" = "default" ]; then
	if [ "x$DEF_WANTHSREGEX" = "x" ]; then
		RULE_WANTHSREGEX=no
	else
		RULE_WANTHSREGEX=$DEF_WANTHSREGEX
	fi
fi

####################################################################
# Show user what OS we came up with
#
echo " + configured for $OS platform"

####################################################################
# And update Makefile.config with what we came up with
#
echo "###############" >> Makefile.config
echo "# Platform: $OS" >> Makefile.config
echo "# Final Rules:" >> Makefile.config
echo "#  Rule WANTHSREGEX=$RULE_WANTHSREGEX" >> Makefile.config
echo "###############" >> 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 look for a known compiler somewhere in PATH
# and set a "safe" optimization level
#
#
# First, look for a CC=<whatever> setting in Configure (recall, we
# copied these to Makefile.config)
#
TCC=`egrep '^CC=' Makefile.config | tail -1 | awk -F= '{print $2}'`
if [ "x$TCC" = "x" ]; then
    if [ "x$CC" = "x" ]; then
    #
    # At this point, CC is not set in Configure 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"
	    exit 1
	fi
	CC=$COMPILER
    fi
    echo " + setting C compiler to $CC"
fi
#
# Ditto for optimization
#
TOPTIM=`egrep '^OPTIM=' Makefile.config | tail -1 | awk -F= '{print $2}'`
if [ "x$TOPTIM" = "x" ]; then
    if [ "x$OPTIM" = "x" ]; then
	OPTIM="-O2"
    fi
    echo " + setting C compiler optimization-level to $OPTIM"
fi

####################################################################
# Set the value of CC if need be; don't worry about OPTIM yet
#
if [ "x$TCC" = "x" ]; then
    echo "CC=$CC" >> Makefile.config
fi

####################################################################
# 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
#
TCC=`egrep '^CC=' Makefile.config | tail -1 | awk -F= '{print $2}'`
case "$OS" in
    'ULTRIX')
	if [ "$TCC" = "cc" ]; then
	    CFLAGS="$CFLAGS -std"
	fi
	;;
    'SCO 5')
	if [ "$TCC" = "cc" ]; then
	    OSBPRINTF="-K noinline"
	fi
	;;
    'HI-UX')
	if [ "$TCC" = "cc" ]; then
	    CFLAGS="$CFLAGS -Aa -D_HIUX_SOURCE"
	    OPTIM=" "
	    TOPTIM=""
	fi
	;;
    'HP-UX'|'HP-UX 10')
	if [ "$TCC" = "cc" ]; then
	    CFLAGS="$CFLAGS -Aa -D_HPUX_SOURCE"
	    OPTIM=" "
	    TOPTIM=""
	fi
	;;
esac

####################################################################
# OK, now we can write OPTIM
#
if [ "x$TOPTIM" = "x" ]; then
    echo "OPTIM=$OPTIM" >> Makefile.config
fi

####################################################################
# Now we do some general checks and some intelligent Configuration
# control.
#
# First, we adjust as needed depending on which modules are
# being used.
#

#
# Are they using the status monitor module? If so, check
# for STATUS rule and add if needed.
#
STAT_MOD="mod_status"
if grep "$STAT_MOD" Makefile > /dev/null; then
    if [ "$RULE_STATUS" = "yes" ]; then
	CFLAGS="$CFLAGS -DSTATUS"
    fi
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_LDFLAGS 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 grep "EXTRA_" Makefile | grep "\-lsocks" > /dev/null; then : ;
    else
	LIBS="$LIBS -L/usr/local/lib -lsocks"
    fi
    if [ "$OS" = "Solaris 2" ]; then
	LIBS="$LIBS -lresolv"
    fi
fi

####################################################################
# Continue building Makefile.config. We can add all flags with
# the exception of LIBS at this point
#
echo "CFLAGS1=$CFLAGS">> Makefile.config
echo "INCLUDES1=$INCLUDES">> Makefile.config
echo "LDFLAGS1=$LDFLAGS">> Makefile.config
echo "BROKEN_BPRINTF_FLAGS=$OSBPRINTF">> Makefile.config
echo "REGLIB=$REGLIB">> Makefile.config
echo "RANLIB=$RANLIB">> Makefile.config
echo "SHELL=$SHELL">> Makefile.config

####################################################################
# This would be the area to do any ./helpers/TestLib tests,
# before we actually write LIBS to Makefile.config.
# Punt for now...

case "$PLAT" in
    *-linux*)
	# newer systems using glibc 2.x need -lcrypt
	if ./helpers/TestLib crypt; then
	    LIBS="$LIBS -lcrypt"
	fi
	# many systems have -ldb installed
	DB_LIB=""
	if ./helpers/TestLib db; then
	    DB_LIB="-ldb"
	fi;
	# many systems don't have -ldbm
	DBM_LIB=""
	if ./helpers/TestLib dbm; then
	    DBM_LIB="-ldbm"
	elif ./helpers/TestLib ndbm; then
	    DBM_LIB="-lndbm"
	fi
	;;
esac

#
# Are they using dbm/db auth? If so, add DBM/DB library.
#
if grep mod_auth_dbm Makefile > /dev/null; then
    LIBS="$LIBS $DBM_LIB"
    if [ "X$DBM_LIB" != "X" ]; then
	echo " + using $DBM_LIB for mod_auth_dbm"
    fi
fi
if grep mod_auth_db Makefile > /dev/null; then
    LIBS="$LIBS $DB_LIB"
    if [ "X$DB_LIB" != "X" ]; then
	echo " + using $DB_LIB for mod_auth_db"
    fi
fi

####################################################################
# NOW we finish Makefile.config
#
echo "LIBS1=$LIBS">> Makefile.config
echo >> Makefile.config
echo "#### End of Configure created section ####">> Makefile.config

####################################################################
# Now (finish) creating the makefiles
#
# ./Makefile
#
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

#
# ./modules/Makefile
#
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!
# 

SHELL=$SHELL
EOF

if [ "$RULE_WANTHSREGEX" = "yes" ]; then
    INCLUDES2="-I../../regex"
fi

echo "INCLUDES2=$INCLUDES2">> modules/Makefile
echo "MOD_CFLAGS=\$(INCLUDES2) \$(AUX_CFLAGS)">> modules/Makefile

awk >> modules/Makefile < $tmpfile '\
   BEGIN {printf "MODULES="} \
   ($1 == "Module" && $3 ~ /modules\//) {split ($3, pp, "/"); printf "%s ", pp[2]} \
   END {printf "\n"}'

awk >> modules/Makefile < $tmpfile '\
   BEGIN {printf "CLEANERS="} \
   ($1 == "Module" && $3 ~ /modules\//) {split ($3, pp, "/"); printf "%s_clean ", pp[2]} \
   END {printf "\n"}'

cat << EOF >> modules/Makefile

default: \$(MODULES)
	@echo "Done building module subdirectories"

clean: \$(CLEANERS)
	@echo "Done cleaning module subdirectories"

placeholder \$(MODULES): ForceMe
	(cd \$@; \$(MAKE) CC='\$(CC)' AUX_CFLAGS='\$(MOD_CFLAGS)' RANLIB='\$(RANLIB)')

ForceMe:

EOF

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]}'

