#!/bin/sh
## ====================================================================
## The Apache Software License, Version 1.1
##
## Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
## reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted provided that the following conditions
## are met:
##
## 1. Redistributions of source code must retain the above copyright
##    notice, this list of conditions and the following disclaimer.
##
## 2. Redistributions in binary form must reproduce the above copyright
##    notice, this list of conditions and the following disclaimer in
##    the documentation and/or other materials provided with the
##    distribution.
##
## 3. The end-user documentation included with the redistribution,
##    if any, must include the following acknowledgment:
##       "This product includes software developed by the
##        Apache Software Foundation (http://www.apache.org/)."
##    Alternately, this acknowledgment may appear in the software itself,
##    if and wherever such third-party acknowledgments normally appear.
##
## 4. The names "Apache" and "Apache Software Foundation" must
##    not be used to endorse or promote products derived from this
##    software without prior written permission. For written
##    permission, please contact apache@apache.org.
##
## 5. Products derived from this software may not be called "Apache",
##    nor may "Apache" appear in their name, without prior written
##    permission of the Apache Software Foundation.
##
## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
## OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
## DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
## ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
## SUCH DAMAGE.
## ====================================================================
##
## This software consists of voluntary contributions made by many
## individuals on behalf of the Apache Software Foundation.  For more
## information on the Apache Software Foundation, please see
## <http://www.apache.org/>.
##
## Portions of this software are based upon public domain software
## originally written at the National Center for Supercomputing Applications,
## University of Illinois, Urbana-Champaign.
##

##
##  configure -- Apache Autoconf-style Interface (APACI) 
##
##  Initially written by Ralf S. Engelschall <rse@apache.org>
##

#   default input separator chars: <space><tab><cr>
DIFS=' 	
'

##
##  avoid brain dead shells on Ultrix and friends
##
if [ -f /bin/sh5 ]; then
    if [ ".$APACI_SH5_UPGRADE_STEP" != .done ]; then
         APACI_SH5_UPGRADE_STEP=done
         export APACI_SH5_UPGRADE_STEP
         exec /bin/sh5 $0 "$@"
    fi
fi

##
##  the paths to the Apache source tree
##
top=.
mkf=Makefile
src=src
aux=src/helpers
sedsubst=src/.apaci.sedsubst
addconf=src/.apaci.addconf
tplconf=src/.apaci.tplconf
pldconf=src/.apaci.pldconf
configlayout=config.layout
configstatus=config.status
shadow=''

##
##  pre-determine runtime modes
##
help=no
quiet=no
verbose=no
case "$*" in
    --help|*--help|*--help* ) 
        help=yes; quiet=yes
        echo "[hang on a moment, generating help]"
        echo ""
        ;;
    --quiet|*--quiet|*--quiet* ) 
        quiet=yes
        ;;
    --verbose|*--verbose|*--verbose*|-v|*-v|*-v* ) 
        verbose=yes
        ;;
    * ) 
        ;;
esac

##
##  determine platform id
##
PLATFORM="`$aux/GuessOS`"

##
##  display version information
##
if [ "x$quiet" = "xno" ]; then
    APV=`cat $src/include/httpd.h |\
         grep "#define SERVER_BASEREVISION" |\
         sed -e 's/^[^"]*"//' -e 's/".*$//' -e 's/^\///'`
    echo "Configuring for Apache, Version $APV"
fi

##
##  important hint for the first-time users
##
if [ $# -eq 0 ]; then
    echo " + Warning: Configuring Apache with default settings."
    echo " + This is probably not what you really want."
    echo " + Please read the README.configure and INSTALL files"
    echo " + first or at least run '$0 --help' for"
    echo " + a compact summary of available options."
fi

##
##
##  determine path to (optional) Perl interpreter
##
PERL=no-perl-on-this-system
perlpath="`$aux/PrintPath perl5 perl miniperl`"
if [ "x$perlpath" != "x" ]; then
    PERL="$perlpath"
fi

##
##  look for deadly broken echo commands which interpret escape
##  sequences `\XX' *per default*. For those we first try the -E option
##  and if it then is still broken we give a warning message.
##  If it works set the `Safe Echo Option' (SEO) variable.
##
SEO='' # CHANGE THIS VARIABLE HERE IF YOU HAVE PROBLEMS WITH ECHO!
bytes=`echo $SEO '\1' | wc -c | awk '{ printf("%s", $1); }'`
if [ "x$bytes" != "x3" ]; then
    bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'`
    if [ "x$bytes" != "x3" ]; then
        echo " + Warning: Your 'echo' command is slightly broken."
        echo " + It interprets escape sequences per default. We already"
        echo " + tried 'echo -E' but had no real success. If errors occur"
        echo " + please set the SEO variable in 'configure' manually to"
        echo " + the required 'echo' options, i.e. those which force your"
        echo " + 'echo' to not interpret escape sequences per default."
    else
        SEO='-E'
    fi
fi

##
##  look for the best Awk we can find because some
##  standard Awks are really braindead and cause 
##  problems for our scripts under some platforms.
##
AWK=awk
awkpath="`$aux/PrintPath nawk gawk awk`"
if [ "x$awkpath" != "x" ]; then
    AWK="$awkpath"
fi

##
## Look for a good Tar. If we don't find 'GNU tar' then make
## sure ours can handle the '-h' (don't copy symlink, copy
## the actual data) option.
##
TAR=tar
tarpath="`$aux/PrintPath gtar gnutar tar`"
if [ "x$tarpath" != "x" ]; then
    TAR="$tarpath"
fi
case "`$TAR --version 2>/dev/null`" in
    *GNU*) TAROPT="-hcf" ;;
    *) if $TAR -hcf - Makefile.tmpl > /dev/null 2>&1
       then
           TAROPT="-hcf"
       else
           TAROPT="-cf"
       fi
       ;;
esac

##
## Request USTAR format for tar files on OS/390
## Request that prelink step be used for 390
##
case $PLATFORM in
    *-IBM-OS390*)
       TAROPT="${TAROPT}U"
       ;;
esac

##
##  determine path to sh, it's not /bin/sh on ALL systems
##
SHELL=/bin/sh
if [ ! -f "$SHELL" ]; then
    SHELL="`$aux/PrintPath sh`"
    if [ "x$SHELL" = "x" ]; then
        echo "configure:Error: Cannot determine path to Bourne-Shell" 1>&2
        exit 1
    fi
fi

##
##  determine default parameters
##

#   default paths
prefix=UNSET

#   layout configuration
with_layout=0
show_layout=0

#   suexec defaults
suexec=0
suexec_ok=0
suexec_docroot='$datadir/htdocs'
suexec_logexec='$logfiledir/suexec_log'
suexec_caller=www
suexec_userdir=public_html
suexec_uidmin=100
suexec_gidmin=100
suexec_safepath="/usr/local/bin:/usr/bin:/bin"
# if the umask is undefined, we don't change it
#suexec_umask=0755

#   the installation flags
iflags_program="-m 755 -s"
iflags_core="-m 755"
iflags_dso="-m 755"
iflags_script="-m 755"
iflags_data="-m 644"

#   various other flags
support=1
confadjust=1
permute=''

#   determine rules
rules=''
rulelist=''
OIFS="$IFS"
IFS='
'
for rule in `grep '^Rule' $src/Configuration.tmpl`; do
    rule=`echo "$rule" | sed -e 's/^Rule[ 	]*//'`
    name=`echo "$rule" | sed -e 's/=.*$//'`
    namelow=`echo "$name" | tr '[A-Z]' '[a-z]'`
    arg=`echo "$rule" | sed -e 's/^.*=//'`
    eval "rule_$namelow=$arg"
    rules="$rules:$namelow"
    rulelist="$rulelist:$name=$arg"
done
IFS="$OIFS"
rules=`echo $rules | sed -e 's/^://'`

#   determine modules
modules=''
modulelist=''
OIFS="$IFS"
IFS='
'
for module in `egrep '^[# 	]*(Add|Shared)Module' $src/Configuration.tmpl`; do
    add=yes
    share=no
    if [ "x`echo $module | grep '^#'`" != "x" ]; then
        add=no
    fi
    if [ "x`echo $module | grep 'SharedModule'`" != "x" ]; then
        share=yes
    fi
    module=`echo "$module" |\
            sed -e 's%^.*/\(.*\)$%\1%' \
                -e 's/\.[oa]$//' \
                -e 's/\.module$//' \
                -e 's/^mod_//' \
                -e 's/^lib//'`
    eval "module_$module=$add"
    eval "shared_$module=$share"
    modules="${modules}:$module"
    modulelist="${modulelist}:$module=$add"
    if [ "x$share" = "xyes" ]; then
        modulelist="${modulelist}*"
    fi
done
IFS="$OIFS"
modules=`echo $modules | sed -e 's/^://'`

#   backward compatibility for old src/Configuration.tmpl
#   parameter names to the canonical Autoconf-style shell
#   variable names.
OIFS="$IFS"
IFS="$DIFS"
for var in CFLAGS LDFLAGS LIBS INCLUDES DEPS; do
    eval "val=\$EXTRA_$var"
    if [ "x$val" != "x" ]; then
        eval "$var=\$val"
        eval "EXTRA_$var=\"\"; export EXTRA_$var"
        echo " + Hint: please use $var instead of EXTRA_$var next time"
    fi
done
IFS="$OIFS"

##
## Platform-specific defaults
##
case $PLATFORM in
    *-apple-rhapsody*)
	default_layout="Mac OS X Server"
	iflags_core="${iflags_core} -S \"-S\""
	iflags_dso="${iflags_dso} -S \"-S\""
	;;
    *-apple-darwin*)
	default_layout="Darwin"
	iflags_core="${iflags_core} -S \"-S\"" 
	iflags_dso="${iflags_dso} -S \"-S\""
	;;
    *OS/2* ) 
        default_layout="Apache"
        iflags_program="${iflags_program} -e .exe" 
        iflags_core="${iflags_core} -e .exe" 
        ;;
    *MPE/iX* )
	default_layout="Apache"
	iflags_program="-m 755"
	;;
    *)
	default_layout="Apache"
	;;
esac

##
##  support for the default layout
##
case "$*" in
    *--with-layout=* ) 
        ;;
    * ) 
        if [ "x$*" = "x" ]; then
            set -- --with-layout="$default_layout"
        else
            set -- --with-layout="$default_layout" "$@"
        fi
        ;;
esac

##
##  Initialize server user ID and group ID variables
##
conf_user=""
conf_group=""

##
##  Iterate over the command line options the first time.
##
##  This time we pre-process options which need high priority 
##  on the command line independent of their position, so they 
##  can be overridden by others.
##
apc_prev=''
OIFS1="$IFS"
IFS="$DIFS"
for apc_option
do
    #   if previous option needs an argument, assign it.
    if [ "x$apc_prev" != "x" ]; then
        eval "$apc_prev=\$apc_option"
        apc_prev=""
        continue
    fi
    #   split out arguments
    case "$apc_option" in
        -*=*) apc_optarg=`echo "$apc_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
           *) apc_optarg= ;;
    esac
    #  pre-process only a few options now
    case "$apc_option" in
        --help | -h | -help )
            echo "Usage: configure [options]"
            echo "Options: [defaults in brackets after descriptions]"
            echo "General options:"
            echo " --quiet, --silent      do not print messages"
            echo " --verbose, -v          print even more messages"
            echo " --shadow[=DIR]         switch to a shadow tree (under DIR) for building"
            echo ""
            echo "Stand-alone options:"
            echo " --help, -h             print this message"
            echo " --show-layout          print installation path layout (check and debug)"
            echo ""
            echo "Installation layout options:"
            echo " --with-layout=[F:]ID   use installation path layout ID (from file F)"
            echo " --target=TARGET        install name-associated files using basename TARGET"
            echo " --prefix=PREFIX        install architecture-independent files in PREFIX"
            echo " --exec-prefix=EPREFIX  install architecture-dependent files in EPREFIX"
            echo " --bindir=DIR           install user     executables in DIR"
            echo " --sbindir=DIR          install sysadmin executables in DIR"
            echo " --libexecdir=DIR       install program  executables in DIR"
            echo " --mandir=DIR           install manual pages in DIR"
            echo " --sysconfdir=DIR       install configuration files in DIR"
            echo " --datadir=DIR          install read-only data files in DIR"
            echo " --iconsdir=DIR         install read-only icon files in DIR"
            echo " --htdocsdir=DIR        install read-only welcome pages in DIR"
            echo " --manualdir=DIR        install read-only on-line documentation in DIR"
            echo " --cgidir=DIR           install read-only cgi files in DIR"
            echo " --includedir=DIR       install includes files in DIR"
            echo " --localstatedir=DIR    install modifiable data files in DIR"
            echo " --runtimedir=DIR       install runtime data in DIR"
            echo " --logfiledir=DIR       install logfile data in DIR"
            echo " --proxycachedir=DIR    install proxy cache data in DIR"
            echo ""
            echo "Configuration options:"
            echo " --enable-rule=NAME     enable  a particular Rule named 'NAME'"
            echo " --disable-rule=NAME    disable a particular Rule named 'NAME'"
            $aux/ppl.sh $rulelist
            echo " --add-module=FILE      on-the-fly copy & activate a 3rd-party Module"
            echo " --activate-module=FILE on-the-fly activate existing 3rd-party Module"
            echo " --permute-module=N1:N2 on-the-fly permute module 'N1' with module 'N2'"
            echo " --enable-module=NAME   enable  a particular Module named 'NAME'"
            echo " --disable-module=NAME  disable a particular Module named 'NAME'"
            $aux/ppl.sh $modulelist
            echo " --enable-shared=NAME   enable  build of Module named 'NAME' as a DSO"
            echo " --disable-shared=NAME  disable build of Module named 'NAME' as a DSO"
            echo " --with-perl=FILE       path to the optional Perl interpreter"
            echo " --with-port=PORT       set the port number for httpd.conf"
            echo " --without-support      disable the build and installation of support tools"
            echo " --without-confadjust   disable the user/situation adjustments in config"
            echo " --without-execstrip    disable the stripping of executables on installation"
            echo " --server-uid=UID       set the user ID the web server should run as [nobody]"
            echo " --server-gid=GID       set the group ID the web server UID is a memeber of [#-1]"
            echo ""
            echo "suEXEC options:"
            echo " --enable-suexec        enable the suEXEC feature"
            echo " --suexec-caller=NAME   set the suEXEC username of the allowed caller [$suexec_caller]"
            echo " --suexec-docroot=DIR   set the suEXEC root directory [PREFIX/share/htdocs]"
            echo " --suexec-logfile=FILE  set the suEXEC logfile [PREFIX/var/log/suexec_log]"
            echo " --suexec-userdir=DIR   set the suEXEC user subdirectory [$suexec_userdir]"
            echo " --suexec-uidmin=UID    set the suEXEC minimal allowed UID [$suexec_uidmin]"
            echo " --suexec-gidmin=GID    set the suEXEC minimal allowed GID [$suexec_gidmin]"
            echo " --suexec-safepath=PATH set the suEXEC safe PATH [$suexec_safepath]"
            echo " --suexec-umask=UMASK   set the umask for the suEXEC'd script [server's umask]"
            echo ""
            echo "Deprecated options:"
            echo " --layout               backward compat only: use --show-layout"
            echo " --compat               backward compat only: use --with-layout=Apache"
            exit 0
            ;;
        --with-layout=*|--compat)
            if [ "x$apc_option" = "x--compat" ]; then
                apc_optarg="Apache"
            fi
            case $apc_optarg in
                *:* ) 
                    file=`echo $apc_optarg | sed -e 's/:.*//'`
                    name=`echo $apc_optarg | sed -e 's/.*://'`
                    ;;
                * ) 
                    name=$apc_optarg
                    file=$configlayout
                    ;;
            esac
            if [ ! -f "$file" ]; then
                echo "configure:Error: Path layout definition file $file not found" 1>&2
                exit 1
            fi
            (echo ''; cat $file; echo '') |\
            sed -e "1,/[ 	]*<[Ll]ayout[ 	]*$name[ 	]*>[ 	]*/d" \
                -e '/[ 	]*<\/Layout>[ 	]*/,$d' \
                -e "s/^[ 	]*//g" \
                -e "s/:[ 	]*/=\'/g" \
                -e "s/[ 	]*$/'/g" \
                >$pldconf
            . $pldconf
            OOIFS="$IFS"  # most likely not needed: jmj
            IFS="$DIFS"   # ditto
            for var in prefix exec_prefix bindir sbindir libexecdir mandir \
                       sysconfdir datadir iconsdir htdocsdir manualdir cgidir \
                       includedir localstatedir runtimedir logfiledir \
                       proxycachedir; do
                eval "val=\"\$$var\""
                case $val in
                    *+ )
                        val=`echo $val | sed -e 's;\+$;;'`
                        eval "$var=\"\$val\""
                        eval "autosuffix_$var=yes"
                        ;;
                    * )
                        eval "autosuffix_$var=no"
                        ;;
                esac
            done
            IFS="$OOIFS"
            rm -f $pldconf 2>/dev/null
            if [ "x$prefix" = "xUNSET" ]; then
                echo "configure:Error: Path layout definition not found or incorrect" 1>&2
                exit 1
            fi
            if [ "x$quiet" = "xno" ]; then
                echo " + using installation path layout: $name ($file)"
            fi
            name_layout=$name
            with_layout=1
            ;;
        *)
            ;;
    esac
done

##
##  Iterate over the command line options the second time.
##
##  This time we parse the standard options.
##
addconf_created=0
apc_prev=''
for apc_option
do
    #   if previous option needs an argument, assign it.
    if [ "x$apc_prev" != "x" ]; then
        eval "$apc_prev=\$apc_option"
        apc_prev=""
        continue
    fi
    #   split out arguments
    case "$apc_option" in
        -*=*) apc_optarg=`echo "$apc_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
           *) apc_optarg= ;;
    esac
    #  accept only the most important GNU Autoconf-style options
    case "$apc_option" in
        --help|-h|-help|--with-layout=*|-compat)
            #   just ignore already parsed options
            ;;
        --quiet | --silent) 
            quiet=yes
            ;;
        --verbose | -v)
            verbose=yes
            ;;
        --shadow*)
            #   if we use an external shadow tree, first shadow all of ourself
            #   to this tree and switch over to to it for internal (=platform)
            #   shadowing...
            case "$apc_option" in
                --shadow=*)
                    shadow="$apc_optarg"
                    if [ "x$quiet" = "xno" ]; then
                        echo " + creating external package shadow tree ($shadow)"
                    fi
                    rm -rf $shadow 2>/dev/null
                    $aux/mkshadow.sh . $shadow
                    for file in $mkf $sedsubst $addconf $tplconf $pldconf $configstatus; do
                        rm -f $shadow/$file 2>/dev/null
                    done
                    if [ "x$quiet" = "xno" ]; then
                        echo " + switching to external package shadow tree ($shadow)"
                    fi
                    cd $shadow
                    ;;
            esac
            #   determine GNU platform triple
            gnutriple=`echo "$PLATFORM" | sed -e 's:/:-:g' | $AWK '{ printf("%s",$1); }'`
            #   create Makefile wrapper (the first time only)
            if [ "x`ls $top/src.* 2>/dev/null`" = "x" ]; then
                if [ "x$quiet" = "xno" ]; then
                    echo " + creating Makefile (shadow wrapper)"
                fi
                echo "##" > Makefile
                echo "##  Apache Makefile (shadow wrapper)" >> Makefile
                echo "##" >> Makefile
                echo "" >> Makefile
                if [ "x$shadow" != "x" ]; then
                    echo "SHADOW=$shadow" >> Makefile
                else
                    echo "SHADOW=." >> Makefile
                fi
                #   (the use of `awk' and not `$AWK' here is correct, because this
                #   Makefile is for platform bootstrapping, so don't hardcode paths)
                echo "GNUTRIPLE=\`$aux/GuessOS | sed -e 's:/:-:g' | awk '{ printf(\"%s\",\$\$1); }'\`" >> Makefile
                echo "" >> Makefile
                echo "all build install install-quiet clean distclean:" >> Makefile
                echo "	@cd \$(SHADOW); \$(MAKE) -f Makefile.\$(GNUTRIPLE) \$(MFLAGS) \$@" >> Makefile
                echo "" >> Makefile
            fi
            #   set shadow paths
            shadowmkf="Makefile.$gnutriple"
            shadowsrc="src.$gnutriple"
            shadowaux="src.$gnutriple/helpers"
            shadowsedsubst="src.$gnutriple/.apaci.sedsubst"
            shadowaddconf="src.$gnutriple/.apaci.addconf"
            shadowtplconf="src.$gnutriple/.apaci.tplconf"
            #   (re)create shadow tree
            if [ "x$quiet" = "xno" ]; then
                echo " + creating internal platform shadow tree ($shadowsrc)"
            fi
            rm -rf $shadowsrc
            $aux/mkshadow.sh $src $shadowsrc
            #   delegate us to the shadow paths
            mkf=$shadowmkf
            src=$shadowsrc
            aux=$shadowaux
            sedsubst=$shadowsedsubst
            addconf=$shadowaddconf
            tplconf=$shadowtplconf
            ;;
        --show-layout|--layout)
            show_layout=1
            ;;
        --target=*)
            TARGET="$apc_optarg"
            ;;
        --prefix=*)
            prefix="$apc_optarg"
            autosuffix_prefix=no
            ;;
        --exec-prefix=*)
            exec_prefix="$apc_optarg"
            autosuffix_exec_prefix=no
            ;;
        --bindir=*)       
            bindir="$apc_optarg"
            autosuffix_bindir=no
            ;;
        --sbindir=*)       
            sbindir="$apc_optarg"
            autosuffix_sbindir=no
            ;;
        --libexecdir=*)
            libexecdir="$apc_optarg"    
            autosuffix_libexecdir=no
            ;;
        --mandir=*)        
            mandir="$apc_optarg"        
            autosuffix_mandir=no
            ;;
        --sysconfdir=*)    
            sysconfdir="$apc_optarg"    
            autosuffix_sysconfdir=no
            ;;
        --datadir=*)       
            datadir="$apc_optarg"       
            autosuffix_datadir=no
            ;;
        --iconsdir=*) 
            iconsdir="$apc_optarg" 
            autosuffix_iconsdir=no
            ;;
        --htdocsdir=*) 
            htdocsdir="$apc_optarg" 
            autosuffix_htdocsdir=no
            ;;
        --manualdir=*) 
            manualdir="$apc_optarg" 
            autosuffix_manualdir=no
            ;;
        --cgidir=*) 
            cgidir="$apc_optarg" 
            autosuffix_cgidir=no
            ;;
        --includedir=*)       
            includedir="$apc_optarg"       
            autosuffix_includedir=no
            ;;
        --localstatedir=*) 
            localstatedir="$apc_optarg" 
            autosuffix_localstatedir=no
            ;;
        --runtimedir=*) 
            runtimedir="$apc_optarg" 
            autosuffix_runtimedir=no
            ;;
        --logfiledir=*) 
            logfiledir="$apc_optarg" 
            autosuffix_logfiledir=no
            ;;
        --proxycachedir=*) 
            proxycachedir="$apc_optarg" 
            autosuffix_proxycachedir=no
            ;;
        --add-module=*) 
            file="$apc_optarg"
            if [ "x`echo $file | egrep '/?mod_[a-zA-Z0-9][a-zA-Z0-9_]*\.c$'`" = "x" ]; then
                echo "configure:Error: Module filename doesn't match '/?mod_[a-zA-Z0-9][a-zA-Z0-9_]*\.c'" 1>&2
                exit 1
            fi
            if [ ! -f $file ]; then
                echo "configure:Error: Module source $file not found" 1>&2
                exit 1
            fi
            modfilec=`echo $file | sed -e 's;^.*/;;'`
            modfileo=`echo $file | sed -e 's;^.*/;;' -e 's;\.c$;.o;'`
            if [ "x$file" != "x$src/modules/extra/$modfilec" ]; then
                cp $file $src/modules/extra/$modfilec
            fi
            if [ "x$addconf_created" = "x0" ]; then
                addconf_created=1
                rm -f $addconf 2>/dev/null
                touch $addconf 2>/dev/null
            fi
            echo "" >>$addconf
            echo "## On-the-fly added module" >>$addconf
            echo "## (configure --add-module=$file)" >>$addconf
            echo "AddModule modules/extra/$modfileo" >>$addconf
            module=`echo "$modfileo" |\
                    sed -e 's%^.*/\(.*\)$%\1%' \
                        -e 's/\.[^.]*$//' \
                        -e 's/^mod_//' \
                        -e 's/^lib//'`
            eval "module_$module=yes"
            eval "shared_$module=no"
            modules="${modules}:$module"
            modulelist="${modulelist}:$module=yes"
            if [ "x$quiet" = "xno" ]; then
                echo " + on-the-fly added and activated $module module (modules/extra/$modfileo)"
            fi
            ;;
        --activate-module=*) 
            file="$apc_optarg"
            case $file in
                src/modules/* ) ;;
                *)  echo "configure:Error: Module source already has to be below src/modules/ to be activated" 1>&2
                    exit 1
                    ;;
            esac
            modfile=`echo $file | sed -e 's;^src/;;'`
            if [ "x$addconf_created" = "x0" ]; then
                addconf_created=1
                rm -f $addconf 2>/dev/null
                touch $addconf 2>/dev/null
            fi
            echo "" >>$addconf
            echo "## On-the-fly activated module" >>$addconf
            echo "## (configure --activate-module=$file)" >>$addconf
            echo "AddModule $modfile" >>$addconf
            module=`echo "$modfile" |\
                    sed -e 's%^.*/\(.*\)$%\1%' \
                        -e 's/\.[^.]*$//' \
                        -e 's/^mod_//' \
                        -e 's/^lib//'`
            eval "module_$module=yes"
            eval "shared_$module=no"
            modules="${modules}:$module"
            modulelist="${modulelist}:$module=yes"
            if [ "x$quiet" = "xno" ]; then
                echo " + activated $module module ($modfile)"
            fi
            ;;
        --enable-*)
            apc_feature=`echo $apc_option | sed -e 's/-*enable-//' -e 's/=.*//'`
            apc_feature=`echo $apc_feature | sed 's/-/_/g'`
            case "$apc_option" in
                *=*) ;;
                  *) apc_optarg=yes ;;
            esac
            case "$apc_feature" in
                rule   )
                    apc_optarg=`echo "$apc_optarg" | tr '[A-Z]' '[a-z]'`
                    apc_optarg_real=`echo "$apc_optarg" | tr '[a-z]' '[A-Z]'`
                    eval "exists=\$rule_${apc_optarg}" 
                    if [ "x$exists" = "x" ]; then
                        echo "configure:Error: No such rule named '${apc_optarg_real}'" 1>&2
                        exit 1
                    fi
                    eval "rule_${apc_optarg}=yes"
                    ;;
                module ) 
                    case $apc_optarg in
                       all ) 
                           OOIFS="$IFS"
                           IFS=':'
                           for module in $modules; do
                               eval "module_${module}=yes" 
                           done
                           IFS="$OOIFS"
                           module_auth_digest=no # conflict with mod_digest
                           ;;
                       most ) 
                           OOIFS="$IFS"
                           IFS=':'
                           for module in $modules; do
                               eval "module_${module}=yes" 
                           done
                           IFS="$OOIFS"
                           module_auth_db=no     # not all platforms have -ldb
                           module_mmap_static=no # not all platforms have mmap()
                           module_so=no          # not all platforms have dlopen()
                           module_example=no     # only for developers
                           module_auth_digest=no # conflict with mod_digest
                           module_log_agent=no   # deprecated
                           module_log_referer=no # deprecated
                           ;;
                       * ) 
                           eval "exists=\$module_${apc_optarg}" 
                           if [ "x$exists" = "x" ]; then
                               echo "configure:Error: No such module named '${apc_optarg}'" 1>&2
                               exit 1
                           fi
                           eval "module_${apc_optarg}=yes" 
                           ;;
                    esac
                    ;;
                shared ) 
                    case $apc_optarg in
                       max ) 
                           OOIFS="$IFS"
                           IFS=':'
                           for module in $modules; do
                               eval "shared_${module}=yes" 
                           done
                           IFS="$OOIFS"
                           shared_so=no        # because of bootstrapping
                           ;;
                       remain ) 
                           OOIFS="$IFS"
                           IFS=':'
                           for module in $modules; do
                               eval "add=\$module_${module}" 
                               if [ "x$add" = "xno" ]; then
                                   eval "module_${module}=yes" 
                                   eval "shared_${module}=yes" 
                               fi
                           done
                           IFS="$OOIFS"
                           shared_so=no
                           ;;
                       * ) 
                           eval "exists=\$module_${apc_optarg}" 
                           if [ "x$exists" = "x" ]; then
                               echo "configure:Error: No such module named '${apc_optarg}'" 1>&2
                               exit 1
                           fi
                           eval "shared_${apc_optarg}=yes" 
                           ;;
                    esac
                    ;;
                suexec ) 
                    suexec=1
                    ;;
                * ) 
                    echo "configure:Error: invalid option '$apc_option'" 1>&2
                    exit 1
                    ;;
            esac
            ;;
        --disable-*)
            apc_feature=`echo $apc_option | sed -e 's/-*disable-//' -e 's/=.*//'`
            apc_feature=`echo $apc_feature| sed 's/-/_/g'`
            case "$apc_option" in
                *=*) ;;
                  *) apc_optarg=yes ;;
            esac
            case "$apc_feature" in
                rule   ) 
                    apc_optarg=`echo "$apc_optarg" | tr '[A-Z]' '[a-z]'`
                    apc_optarg_real=`echo "$apc_optarg" | tr '[a-z]' '[A-Z]'`
                    eval "exists=\$rule_${apc_optarg}" 
                    if [ "x$exists" = "x" ]; then
                        echo "configure:Error: No such rule named '${apc_optarg_real}'" 1>&2
                        exit 1
                    fi
                    eval "rule_${apc_optarg}=no"
                    ;;
                module )
                    case $apc_optarg in
                       all ) 
                           OOIFS="$IFS"
                           IFS=':'
                           for module in $modules; do
                               eval "module_${module}=no" 
                           done
                           IFS="$OOIFS"
                           ;;
                       * ) 
                           eval "exists=\$module_${apc_optarg}" 
                           if [ "x$exists" = "x" ]; then
                               echo "configure:Error: No such module named '${apc_optarg}'" 1>&2
                               exit 1
                           fi
                           eval "module_${apc_optarg}=no" 
                           ;;
                    esac
                    ;;
                shared )
                    case $apc_optarg in
                       all ) 
                           OOIFS="$IFS"
                           IFS=':'
                           for module in $modules; do
                               eval "shared_${module}=no" 
                           done
                           IFS="$OOIFS"
                           ;;
                       * ) 
                           eval "exists=\$module_${apc_optarg}" 
                           if [ "x$exists" = "x" ]; then
                               echo "configure:Error: No such module named '${apc_optarg}'" 1>&2
                               exit 1
                           fi
                           eval "shared_${apc_optarg}=no" 
                           ;;
                    esac
                    ;;
                * ) 
                    echo "configure:Error: invalid option '$apc_option'" 1>&2
                    exit 1
                    ;;
            esac
            ;;
        --permute-module=*:*)
            mod1=`echo $apc_optarg | sed -e 's/:.*//'`
            mod2=`echo $apc_optarg | sed -e 's/.*://'`
            for mod in $mod1 $mod2; do
                case $mod in
                    BEGIN|END)
                        ;;
                    *)  eval "exists=\$module_${mod}" 
                        if [ "x$exists" = "x" ]; then
                            echo "configure:Error: No such module named '${mod}'" 1>&2
                            exit 1
                        fi
                        ;;
                esac
            done
            case $mod1:$mod2 in
                BEGIN:END|*:BEGIN|END:*)
                    echo "configure:Error: Invalid combination of pseudo module identifiers" 1>&2
                    exit 1
                    ;;
            esac
            permute="${permute},${mod1}:${mod2}"
            ;;
        --with-perl=*)
            PERL="$apc_optarg"
            ;;
        --with-port=*)
            port="$apc_optarg"
            ;;
        --without-support)
            support=0
            ;;
        --without-confadjust)
            confadjust=0
            ;;
        --without-execstrip)
            iflags_program=`echo "$iflags_program" | sed -e 's/-s//'`
            ;;
        --suexec-caller=*)
            suexec_caller="$apc_optarg"
            suexec_ok=1
            ;;
        --suexec-docroot=*)
            suexec_docroot="$apc_optarg"
            suexec_ok=1
            ;;
        --suexec-logfile=*)
            suexec_logexec="$apc_optarg"
            suexec_ok=1
            ;;
        --suexec-userdir=*)
            suexec_userdir="$apc_optarg"
            suexec_ok=1
            ;;
        --suexec-uidmin=*)
            suexec_uidmin="$apc_optarg"
            suexec_ok=1
            ;;
        --suexec-gidmin=*)
            suexec_gidmin="$apc_optarg"
            suexec_ok=1
            ;;
        --suexec-safepath=*)
            suexec_safepath="$apc_optarg"
            suexec_ok=1
            ;;
        --suexec-umask=*)
            suexec_umask_val="$apc_optarg"
            suexec_umask="-DSUEXEC_UMASK=$apc_optarg"
            suexec_ok=1
            ;;
        --server-uid=*)
            conf_user="$apc_optarg"
	    # protect the '#' against interpretation as comment
	    case x"${conf_user}" in
              "#"*)  conf_user="\\\\${conf_user}";;
              "\\#"*)conf_user="\\${conf_user}";;
            esac
            ;;
        --server-gid=*)
            conf_group="$apc_optarg"
	    # protect the '#' against interpretation as comment
	    case x"${conf_group}" in
              "#"*)  conf_group="\\\\${conf_group}";;
              "\\#"*)conf_group="\\${conf_group}";;
            esac
            ;;
        * )
            echo "configure:Error: invalid option '$apc_option'" 1>&2
            exit 1
            ;;
    esac
done
IFS="$OIFS1"
if [ "x$apc_prev" != "x" ]; then
    echo "configure:Error: missing argument to --`echo $apc_prev | sed 's/_/-/g'`" 1>&2
    exit 1
fi
if [ "x$addconf_created" = "x0" ]; then
    rm -f $addconf 2>/dev/null
    touch $addconf 2>/dev/null
fi

##
##   create a config status script for restoring
##   the configuration via a simple shell script
##
rm -f $configstatus 2>/dev/null
echo "#!/bin/sh" >$configstatus
echo "##" >>$configstatus
echo "##  $configstatus -- APACI auto-generated configuration restore script" >>$configstatus
echo "##" >>$configstatus
echo "##  Use this shell script to re-run the APACI configure script for" >>$configstatus
echo "##  restoring your configuration. Additional parameters can be supplied." >>$configstatus
echo "##" >>$configstatus
echo "" >>$configstatus
for var in CC CPP OPTIM CFLAGS CFLAGS_SHLIB LDFLAGS LD_SHLIB LDFLAGS_SHLIB \
           LDFLAGS_SHLIB_EXPORT LIBS INCLUDES RANLIB DEPS TARGET; do
    eval "val=\"\$$var\""
    if [ "x$val" != "x" ]; then
        echo "$var=$val" |\
        sed -e 's:\(["$\\]\):\\\1:g' \
            -e 's:\([A-Z]*=\):\1":' \
            -e 's:$:" \\:' >>$configstatus
    fi
done
echo $SEO "./configure \\" >>$configstatus
for arg
do
    echo "$arg" |\
    sed -e 's:\(["$\\]\):\\\1:g' \
        -e 's:^:":' \
        -e 's:$:" \\:' >>$configstatus
done
echo '"$@"' >>$configstatus
echo '' >>$configstatus
chmod a+x $configstatus

##
##  a few errors and warnings
##
if [ "x$suexec" = "x1" ]; then
    if [ "x$suexec_ok" = "x0" ]; then
        echo "configure:Error: You enabled the suEXEC feature via --enable-suexec but"
        echo "                 without explicitly configuring it via at least one"
        echo "                 --suexec-xxxxx option. Seems like you are still not"
        echo "                 familiar with the suEXEC risks. Please read the INSTALL"
        echo "                 and htdocs/manual/suexec.html documents first."
        exit 1
    fi
    if [ "x`$aux/getuid.sh`" != "x0" ]; then
        echo " + Warning: You have enabled the suEXEC feature. Be aware that you need" 1>&2
        echo " + root privileges to complete the final installation step." 1>&2
    fi
fi
if [ "x$PERL" = "xno-perl-on-this-system" ]; then
    if [ "x$quiet" = "xno" ]; then
        echo " + Warning: no Perl interpreter detected for support scripts."
        echo " + Perhaps you need to specify one with --with-perl=FILE."
    fi
fi

##
##  target name
##
if [ "x$TARGET" != "x" ]; then
    thetarget="$TARGET"
else
    thetarget=httpd
fi

##
##  expand path variables and make sure
##  they do not end in a backslash
##
OIFS="$IFS"
IFS="$DIFS"
for var in prefix exec_prefix bindir sbindir libexecdir mandir \
           sysconfdir datadir iconsdir htdocsdir manualdir cgidir \
           includedir localstatedir runtimedir logfiledir \
           proxycachedir suexec_docroot suexec_logexec ; do
    eval "val=\"\$$var\"";
    val=`echo $val | sed -e 's:\(.\)/*$:\1:'`
    eval "$var=\"$val\""
    #   expand value
    eval "val=\$$var"
    #   automatically add target suffix to path when it's
    #   requested (path has a trailing plus in config.layout) and
    #   looks reasonable (i.e. when "apache" or target-name
    #   still not part of path)
    eval "autosuffix=\$autosuffix_$var"
    if [ "x$autosuffix" = "xyes" ]; then
        addtarget=no
        if [ "x`echo $val | grep apache`" = "x" ]; then
            if [ "x`echo $val | grep $thetarget`" = "x" ]; then
                addtarget=yes
            fi
        fi
        if [ "x$addtarget" = "xyes" ]; then
            eval "$var=\"\$$var/$thetarget\""
        fi
    fi
done
IFS="$OIFS"

##
##  determine special configurable Makefile targets
##
if [ "x$support" = "x1" ]; then
    build_support='build-support'
    if [ "x$name_layout" = "xBinaryDistribution" ]; then
        install_support='install-binsupport'
    else
        install_support='install-support'
    fi
    clean_support='clean-support'
    distclean_support='distclean-support'
else
    build_support=''
    install_support=''
    clean_support=''
    distclean_support=''
fi

##
##  determine special configuration parameters
## 
##  The checks via /etc/passwd and /etc/group will obviously fail
##  on platforms using NIS. But then you propably do not want a
##  UID/GID as production oriented as a web server in NIS anyway.
##
if [ "x$port" != "x" ]; then
    conf_port=$port
else
    conf_port="80"
fi
conf_serveradmin="you@your.address"
conf_servername="new.host.name"
if [ "x$confadjust" = "x1" ]; then
    if [ -f /etc/passwd ]; then
        if [ "x$conf_user" = "x" ]; then
        for uid in nobody www daemon demon http httpd; do 
            if [ "x`egrep \^${uid}: /etc/passwd`" != "x" ]; then
                conf_user="$uid"
                break
            fi
        done
        fi
        if [ "x$conf_group" = "x" ]; then
        for gid in nobody nogroup www daemon demon http httpd; do 
            if [ "x`egrep \^${gid}: /etc/group`" != "x" ]; then
                conf_group="$gid"
                break
            fi
        done
    fi
    fi
    if [ "x`$aux/getuid.sh`" != "x0" -a "x$port" = "x" ]; then
        conf_port="8080"
    fi
    conf_serveradmin="`$aux/buildinfo.sh -n %u@%h%d`"
    conf_servername="`$aux/buildinfo.sh -n %h%d`"
fi
 
##
## Default server user id and group id if not specified on configure invocation and none
## of the ids in /etc/passwd or /etc/group worked.
##
if [ "x$conf_user" = "x" ]; then
    conf_user="nobody"
fi
if [ "x$conf_group" = "x" ]; then
    conf_group="\\\\#-1"
fi

##
##  determine prefix-relative paths for directories
##  because Apache supports them for the -d and -f 
##  options, the LoadModule directive, etc.
##
##  [we have to make sure that it ends with a slash
##   or we cannot support the case where the relative
##   path is just the emtpy one, i.e. ""]
##
runtimedir_relative=`echo $runtimedir | sed -e "s:^$prefix/*::" -e 's:\(.\)$:\1/:'`
logfiledir_relative=`echo $logfiledir | sed -e "s:^$prefix/*::" -e 's:\(.\)$:\1/:'`
sysconfdir_relative=`echo $sysconfdir | sed -e "s:^$prefix/*::" -e 's:\(.\)$:\1/:'`
libexecdir_relative=`echo $libexecdir | sed -e "s:^$prefix/*::" -e 's:\(.\)$:\1/:'`

##
##  check and debug
##
if [ "x$show_layout" = "x1" ]; then
    echo ""
    echo "Installation paths:"
    echo "               prefix: $prefix"
    echo "          exec_prefix: $exec_prefix" 
    echo "               bindir: $bindir" 
    echo "              sbindir: $sbindir" 
    echo "           libexecdir: $libexecdir" 
    echo "               mandir: $mandir" 
    echo "           sysconfdir: $sysconfdir" 
    echo "              datadir: $datadir" 
    echo "             iconsdir: $iconsdir" 
    echo "            htdocsdir: $htdocsdir" 
    echo "            manualdir: $manualdir" 
    echo "               cgidir: $cgidir" 
    echo "           includedir: $includedir" 
    echo "        localstatedir: $localstatedir" 
    echo "           runtimedir: $runtimedir" 
    echo "           logfiledir: $logfiledir" 
    echo "        proxycachedir: $proxycachedir" 
    echo ""
    echo "Compilation paths:"
    echo "           HTTPD_ROOT: $prefix"
    echo "      SHARED_CORE_DIR: $libexecdir"
    echo "       DEFAULT_PIDLOG: ${runtimedir_relative}${thetarget}.pid"
    echo "   DEFAULT_SCOREBOARD: ${runtimedir_relative}${thetarget}.scoreboard"
    echo "     DEFAULT_LOCKFILE: ${runtimedir_relative}${thetarget}.lock"
    echo "     DEFAULT_ERRORLOG: ${logfiledir_relative}error_log"
    echo "    TYPES_CONFIG_FILE: ${sysconfdir_relative}mime.types"
    echo "   SERVER_CONFIG_FILE: ${sysconfdir_relative}${thetarget}.conf"
    echo "   ACCESS_CONFIG_FILE: ${sysconfdir_relative}access.conf"
    echo " RESOURCE_CONFIG_FILE: ${sysconfdir_relative}srm.conf"
    echo ""
    if [ "x$suexec" = "x1" ]; then
        echo "suEXEC setup:"
        echo "        suexec binary: $sbindir/suexec"
        echo "        document root: $suexec_docroot"
        echo "       userdir suffix: $suexec_userdir"
        echo "              logfile: $suexec_logexec"
        echo "            safe path: $suexec_safepath"
        echo "            caller ID: $suexec_caller"
        echo "      minimum user ID: $suexec_uidmin"
        echo "     minimum group ID: $suexec_gidmin"
        if [ "x$suexec_umask" != "x" ]; then
            echo "                umask: $suexec_umask_val"
	else
            echo "                umask: running server's"
        fi
        echo ""
    fi
    exit 0
fi

##
##  create Makefile from Makefile.tmpl
##
if [ "x$quiet" = "xno" ]; then
    echo "Creating $mkf"
fi
sed <Makefile.tmpl >$mkf \
-e "s%@PLATFORM@%$PLATFORM%g" \
-e "s%@PERL@%$PERL%g" \
-e "s%@TAR@%$TAR%g" \
-e "s%@TAROPT@%$TAROPT%g" \
-e "s%@SRC@%$src%g" \
-e "s%@MKF@%$mkf%g" \
-e "s%@AUX@%$aux%g" \
-e "s%@TARGET@%$thetarget%g" \
-e "s%@IFLAGS_PROGRAM@%$iflags_program%g" \
-e "s%@IFLAGS_CORE@%$iflags_core%g" \
-e "s%@IFLAGS_DSO@%$iflags_dso%g" \
-e "s%@IFLAGS_SCRIPT@%$iflags_script%g" \
-e "s%@IFLAGS_DATA@%$iflags_data%g" \
-e "s%@prefix@%$prefix%g" \
-e "s%@exec_prefix@%$exec_prefix%g" \
-e "s%@bindir@%$bindir%g" \
-e "s%@sbindir@%$sbindir%g" \
-e "s%@libexecdir@%$libexecdir%g" \
-e "s%@libexecdir_relative@%$libexecdir_relative%g" \
-e "s%@mandir@%$mandir%g" \
-e "s%@sysconfdir@%$sysconfdir%g" \
-e "s%@datadir@%$datadir%g" \
-e "s%@iconsdir@%$iconsdir%g" \
-e "s%@htdocsdir@%$htdocsdir%g" \
-e "s%@manualdir@%$manualdir%g" \
-e "s%@cgidir@%$cgidir%g" \
-e "s%@localstatedir@%$localstatedir%g" \
-e "s%@includedir@%$includedir%g" \
-e "s%@runtimedir@%$runtimedir%g" \
-e "s%@logfiledir@%$logfiledir%g" \
-e "s%@proxycachedir@%$proxycachedir%g" \
-e "s%@suexec@%$suexec%g" \
-e "s%@suexec_caller@%$suexec_caller%g" \
-e "s%@suexec_docroot@%$suexec_docroot%g" \
-e "s%@suexec_logexec@%$suexec_logexec%g" \
-e "s%@suexec_userdir@%$suexec_userdir%g" \
-e "s%@suexec_uidmin@%$suexec_uidmin%g" \
-e "s%@suexec_gidmin@%$suexec_gidmin%g" \
-e "s%@suexec_safepath@%$suexec_safepath%g" \
-e "s%@suexec_umask@%$suexec_umask%g" \
-e "s%@conf_user@%$conf_user%g" \
-e "s%@conf_group@%$conf_group%g" \
-e "s%@conf_port@%$conf_port%g" \
-e "s%@conf_serveradmin@%$conf_serveradmin%g" \
-e "s%@conf_servername@%$conf_servername%g" \
-e "s%@build_support@%$build_support%g" \
-e "s%@install_support@%$install_support%g" \
-e "s%@clean_support@%$clean_support%g" \
-e "s%@distclean_support@%$distclean_support%g" \
-e "s%@SHELL@%$SHELL%g"

##
##  override default paths in $src/include/httpd.h
##  via command line arguments for the compiler
##  supplied by a little shell script named $src/apaci
##
echo "#!/bin/sh" >$src/apaci
echo "## USED AS A COMMAND LINE EXPANDER TO OVERRIDE PATHS" >>$src/apaci
echo "## WITHOUT DISTURBING THE KNOWN MAKE BUILD PROCESS DISPLAY" >>$src/apaci
echo "echo '-DHTTPD_ROOT=\"$prefix\"'" >>$src/apaci
echo "echo '-DSUEXEC_BIN=\"$sbindir/suexec\"'" >>$src/apaci
echo "echo '-DSHARED_CORE_DIR=\"$libexecdir\"'" >>$src/apaci
echo "echo '-DDEFAULT_PIDLOG=\"${runtimedir_relative}${thetarget}.pid\"'" >>$src/apaci
echo "echo '-DDEFAULT_SCOREBOARD=\"${runtimedir_relative}${thetarget}.scoreboard\"'" >>$src/apaci
echo "echo '-DDEFAULT_LOCKFILE=\"${runtimedir_relative}${thetarget}.lock\"'" >>$src/apaci
echo "echo '-DDEFAULT_ERRORLOG=\"${logfiledir_relative}error_log\"'" >>$src/apaci
echo "echo '-DTYPES_CONFIG_FILE=\"${sysconfdir_relative}mime.types\"'" >>$src/apaci
echo "echo '-DSERVER_CONFIG_FILE=\"${sysconfdir_relative}${thetarget}.conf\"'" >>$src/apaci
echo "echo '-DACCESS_CONFIG_FILE=\"${sysconfdir_relative}access.conf\"'" >>$src/apaci
echo "echo '-DRESOURCE_CONFIG_FILE=\"${sysconfdir_relative}srm.conf\"'" >>$src/apaci
chmod a+x $src/apaci
CFLAGS="$CFLAGS \\\`\$(SRCDIR)/apaci\\\`"

##
##  create $src/Configuration.apaci file
##
if [ "x$quiet" = "xno" ]; then
    echo "Creating Configuration.apaci in $src"
fi
rm -f $sedsubst 2>/dev/null
touch $sedsubst

#   generate settings from imported environment variables
OIFS="$IFS"
IFS="$DIFS"
for var in CC CPP OPTIM CFLAGS CFLAGS_SHLIB LDFLAGS LD_SHLIB LDFLAGS_SHLIB \
           LDFLAGS_SHLIB_EXPORT LIBS INCLUDES RANLIB DEPS TARGET; do
    eval "val=\"\$$var\"";
    if [ "x$val" != "x" ]; then
        case $var in 
            CFLAGS|LDFLAGS|LIBS|INCLUDES|DEPS) 
                echo $SEO "s%^#*\\(EXTRA_$var=\\).*%\\1$val%g" >>$sedsubst
                ;;
            *)
                echo $SEO "s%^#*\\($var=\\).*%\\1$val%g" >>$sedsubst
                ;;
        esac
        eval "$var=\"\"; export $var"
    fi
done
IFS="$OIFS"

#   generate rule directives 
OIFS="$IFS"
IFS=':'
for rule in $rules; do
    name="`echo $rule | tr '[a-z]' '[A-Z]'`"
    eval "val=\$rule_$rule"
    echo $SEO "s%^\\(Rule $name=\\).*%\\1$val%g" >>$sedsubst
    if [ "x$verbose" = "xyes" ]; then
        echo " + Rule $name=$val"
    fi
done
IFS="$OIFS"

#   consistency checks for shared object support
some_shares=0
OIFS="$IFS"
IFS=':'
for module in $modules; do
    eval "share=\$shared_$module"
    if [ "x$share" = "xyes" ]; then
        some_shares=1
    fi
done
IFS="$OIFS"
if [ "x$some_shares" = "x1" ]; then
    if [ "x$module_so" = "xno" ]; then
        module_so=yes
        if [ "x$quiet" = "xno" ]; then
            echo " + enabling mod_so for DSO support"
        fi
    fi
fi
if [ "x$shared_so" = "xyes" ]; then
    shared_so=no
    echo "configure:Error: Module mod_so cannot be made a DSO itself" 1>&2
    exit 1
fi

#   module permutation support
if [ "x$permute" != "x" ]; then
    sed -e '/## mod_mmap_static/,$d' <src/Configuration.tmpl >$tplconf
    OIFS="$IFS"
    IFS='
'
    for line in `cat src/Configuration.tmpl $addconf | egrep '^[# ]*(Add|Shared)Module'`; do
        name=`echo "$line" |\
              sed -e 's%^.*/\(.*\)$%\1%' \
                  -e 's/\.[oa]$//' \
                  -e 's/\.module$//' \
                  -e 's/^mod_//' \
                  -e 's/^lib//'`
        echo "${name}:${line}"
    done |\
    $AWK -F: '
        BEGIN { 
            n = 0; 
        }
        { 
            module_pos[$1]  = n; 
            module_list[n]  = $1; 
            module_line[$1] = $2;
            n++; 
        }
        END {
            pn = split(permute, perm, ",");
            for (p = 1; p <= pn; p++) {
                split(perm[p], m, ":")
                m1 = m[1];
                m2 = m[2];
                if (m1 == "BEGIN") {
                    for (i = module_pos[m2]-1; i >= 0; i--) {
                        n1 = module_list[i];
                        n2 = module_list[i+1];
                        module_list[i]   = n2;
                        module_list[i+1] = n1;
                        module_pos[n1]   = i+1;
                        module_pos[n2]   = i;
                    }
                }
                else if (m2 == "END") {
                    for (i = module_pos[m1]; i < n-1; i++) {
                        n1 = module_list[i];
                        n2 = module_list[i+1];
                        module_list[i]   = n2;
                        module_list[i+1] = n1;
                        module_pos[n1]   = i+1;
                        module_pos[n2]   = i;
                    }
                }
                else {
                    p1 = module_pos[m1];
                    p2 = module_pos[m2];
                    n1 = module_list[p1];
                    n2 = module_list[p2];
                    module_list[p1] = n2;
                    module_list[p2] = n1;
                    module_pos[m1] = p2;
                    module_pos[m2] = p1;
                }
            }
            for (i = 0; i < n; i++) {
                name = module_list[i];
                printf("%s\n", module_line[name]);
            }
        }
    ' "permute=$permute" >>$tplconf
    IFS="$OIFS"
else
    cat $src/Configuration.tmpl $addconf >$tplconf
fi

#   generate module directives
#   (paths are modules/foo/mod_bar.ext and modules/foo/libbar.ext)
OIFS="$IFS"
IFS=':'
for module in $modules; do
    eval "add=\$module_$module"
    if [ "x$add" = "xyes" ]; then
        echo $SEO "s%^.*\\(AddModule.*mod_$module\\..*\\)%\\1%g" >>$sedsubst
        echo $SEO "s%^.*\\(AddModule.*lib$module\\..*\\)%\\1%g" >>$sedsubst
        echo $SEO "s%^.*\\(SharedModule.*mod_$module\\..*\\)%\\1%g" >>$sedsubst
        echo $SEO "s%^.*\\(SharedModule.*lib$module\\..*\\)%\\1%g" >>$sedsubst
        m="yes"
    else
        echo $SEO "s%^.*\\(AddModule.*mod_$module\\..*\\)%# \\1%g" >>$sedsubst
        echo $SEO "s%^.*\\(AddModule.*lib$module\\..*\\)%# \\1%g" >>$sedsubst
        echo $SEO "s%^.*\\(SharedModule.*mod_$module\\..*\\)%# \\1%g" >>$sedsubst
        echo $SEO "s%^.*\\(SharedModule.*lib$module\\..*\\)%# \\1%g" >>$sedsubst
        m=no
    fi
    eval "share=\$shared_$module"
    if [ "x$share" = "xyes" ]; then
        echo $SEO "s%^\\(.*\\)AddModule\\(.*mod_$module\\.\\)[oam].*\\(.*\\)%\\1SharedModule\\2so\\3%g" >>$sedsubst
        echo $SEO "s%^\\(.*\\)AddModule\\(.*lib$module\\.\\)[oam].*\\(.*\\)%\\1SharedModule\\2so\\3%g" >>$sedsubst
        m="$m [shared]"
    fi
    if [ "x$verbose" = "xyes" ]; then
        echo " + Module $module: $m"
    fi
done
IFS="$OIFS"

# translate module names to dll names for OS/2 so that they are no more
# than 8 characters long and have an extension of "dll" instead of "so"
case $PLATFORM in
    *OS/2* ) 
        echo $SEO "s%/mod_\\(.\\{1,8\\}\\).*\\.so%/\\1\\.dll%" >>$sedsubst
        echo $SEO "s%/\\(lib.*\\)\\.so$%/\\1.dll%" >>$sedsubst
        ;;
    *cygwin* ) 
        echo $SEO "s%/\\(mod_.*\\)\\.so$%/\\1.dll%" >>$sedsubst
        echo $SEO "s%/\\(lib.*\\)\\.so$%/\\1.dll%" >>$sedsubst
        ;;
esac

#   split sedsubst into chunks of 50 commands
#   to workaround limits in braindead seds
files=`$AWK <$sedsubst '
    BEGIN { line=0; cnt=0; }
    {
        if (line % 50 == 0) {
            file = sedsubst "." cnt;
            printf("%s\n", file);
            cnt++;
        }
        line++;
        print $0 >file;
    }
' "sedsubst=$sedsubst"`
OIFS="$IFS"
IFS="$DIFS"
substcmd=""
for file in $files; do
    substcmd="${substcmd} sed -f $file |"
done
substcmd="${substcmd} cat"
IFS="$OIFS"

#   and finally translate the config template 
#   according to our defined configuration
eval "cat $tplconf | $substcmd >$src/Configuration.apaci"

#   cleanup
rm -f $sedsubst $sedsubst.[0-9] 2>/dev/null
rm -f $addconf 2>/dev/null
rm -f $tplconf 2>/dev/null

##
##  create all other Makefiles by running the proprietary 
##  $src/Configure script with our custom Configuration.apaci file
##
if [ "x$verbose" = "xyes" ]; then
    vflag="-v";
fi
rc=`if [ "x$quiet" = "xyes" ]; then
    (cd $src; ./Configure ${vflag} -file Configuration.apaci >/dev/null; echo $? >&3; );
else
    (cd $src; ( ./Configure ${vflag} -file Configuration.apaci; echo $? >&3; ) |\
     sed -e '/^Using config file:.*/d' \
         -e "s:Makefile in :Makefile in $src\\/:" \
         -e "s:Makefile\$:Makefile in $src:")
fi 3>&1 1>&2`

## Ugly. So far, we've only used -eq, so just in case, use this
## stupid code unless we're *sure* that -ne is also available
if [ $rc -eq 0 ]; then
    :
else
    exit 1
fi

##
##  final hints
##
if [ "x$quiet" = "xno" ]; then
    if [ "x$shadow" != "x" ]; then
        echo "Hint: You now have to build inside $shadow."
        echo "This can be done either by running the canonical commands"
        echo "  \$ cd $shadow"
        echo "  \$ make"
        echo "  \$ make install"
        echo "or by running this alternative commands"
        echo "  \$ make -f $shadow/Makefile"
        echo "  \$ make -f $shadow/Makefile install"
    fi
fi

