#!/bin/sh
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


##
##  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."
        echo
        echo " + NOTE: You may also need to edit the shell invoked by"
        echo " +       'configure'. Some shells (e.g. dash) have a"
        echo " +       faulty echo builtin."
    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=0$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

