#!/bin/sh ## ==================================================================== ## Copyright (c) 1998-1999 The Apache Group. All rights reserved. ## ## Redistribution and use in source and binary forms, with or without ## modification, are permitted provided that the following conditions ## are met: ## ## 1. Redistributions of source code must retain the above copyright ## notice, this list of conditions and the following disclaimer. ## ## 2. Redistributions in binary form must reproduce the above copyright ## notice, this list of conditions and the following disclaimer in ## the documentation and/or other materials provided with the ## distribution. ## ## 3. All advertising materials mentioning features or use of this ## software must display the following acknowledgment: ## "This product includes software developed by the Apache Group ## for use in the Apache HTTP server project (http://www.apache.org/)." ## ## 4. The names "Apache Server" and "Apache Group" must not be used to ## endorse or promote products derived from this software without ## prior written permission. For written permission, please contact ## apache@apache.org. ## ## 5. Products derived from this software may not be called "Apache" ## nor may "Apache" appear in their names without prior written ## permission of the Apache Group. ## ## 6. Redistributions of any form whatsoever must retain the following ## acknowledgment: ## "This product includes software developed by the Apache Group ## for use in the Apache HTTP server project (http://www.apache.org/)." ## ## THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY ## EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ## PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE APACHE GROUP OR ## ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT ## NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, ## STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED ## OF THE POSSIBILITY OF SUCH DAMAGE. ## ==================================================================== ## ## This software consists of voluntary contributions made by many ## individuals on behalf of the Apache Group and was originally based ## on public domain software written at the National Center for ## Supercomputing Applications, University of Illinois, Urbana-Champaign. ## For more information on the Apache Group and the Apache HTTP server ## project, please see . ## ## ## configure -- Apache Autoconf-style Interface (APACI) ## ## Initially written by Ralf S. Engelschall ## # default input separator chars: DIFS=' ' ## ## 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 ;; --quiet|*--quiet|*--quiet* ) quiet=yes ;; --verbose|*--verbose|*--verbose*|-v|*-v|*-v* ) verbose=yes ;; * ) ;; esac ## ## display version information ## if [ ".$quiet" = .no ]; then APV=`cat $src/include/httpd.h |\ grep "#define SERVER_BASEVERSION" |\ sed -e 's/^[^"]*"//' -e 's/".*$//' -e 's/^Apache\///'` 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 [ ".$perlpath" != . ]; 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 [ ".$bytes" != .3 ]; then bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'` if [ ".$bytes" != .3 ]; 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 [ ".$awkpath" != . ]; then AWK="$awkpath" 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" # ssl defaults ssl=0 # 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 [ ".`echo $module | grep '^#'`" != . ]; then add=no fi if [ ".`echo $module | grep 'SharedModule'`" != . ]; 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 [ ".$share" = .yes ]; 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 [ ".$val" != . ]; 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" ## ## support for the default layout ## case "$*" in *--with-layout=* ) ;; * ) if [ ".$*" = . ]; then set -- '--with-layout=Apache' else set -- '--with-layout=Apache' "$@" fi ;; esac ## ## 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 [ ".$apc_prev" != . ]; 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 " --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 " --without-support disable the build and installation of support tools" echo " --without-confadjust disable the user/situation adjustments in config" 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 "" 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 [ ".$apc_option" = ".--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 sed -e "1,/[ ]*<[Ll]ayout[ ]*$name[ ]*>[ ]*/d" \ -e '/[ ]*<\/Layout>[ ]*/,$d' \ -e "s/^[ ]*//g" \ -e "s/:[ ]*/=\'/g" \ -e "s/[ ]*$/'/g" \ $file >$pldconf . $pldconf OIFS="$IFS" IFS="$DIFS" for var in prefix exec_prefix bindir sbindir libexecdir mandir \ sysconfdir datadir 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="$OIFS" rm -f $pldconf 2>/dev/null if [ ".$prefix" = .UNSET ]; then echo "configure:Error: Path layout definition not found or incorrect" 1>&2 exit 1 fi if [ ".$quiet" = .no ]; then echo " + using installation path layout: $name ($file)" fi 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='' OIFS1="$IFS" IFS="$DIFS" for apc_option do # if previous option needs an argument, assign it. if [ ".$apc_prev" != . ]; 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 [ .$quiet = .no ]; 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 [ .$quiet = .no ]; then echo " + switching to external package shadow tree ($shadow)" fi cd $shadow ;; esac # determine GNU platform triple gnutriple=`$aux/GuessOS | sed -e 's:/:-:g' | $AWK '{ printf("%s",$1); }'` # create Makefile wrapper (the first time only) if [ ".`ls $top/src.* 2>/dev/null`" = . ]; then if [ .$quiet = .no ]; then echo " + creating Makefile (shadow wrapper)" fi echo "##" > Makefile echo "## Apache Makefile (shadow wrapper)" >> Makefile echo "##" >> Makefile echo "" >> Makefile if [ ".$shadow" != . ]; then echo "SHADOW=$shadow" >> Makefile else echo "SHADOW=." >> Makefile fi 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 [ .$quiet = .no ]; 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 ;; --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 [ ".`echo $file | egrep '/?mod_[a-zA-Z0-9][a-zA-Z0-9_]*\.c$'`" = . ]; 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 [ ".$file" != ".$src/modules/extra/$modfilec" ]; then cp $file $src/modules/extra/$modfilec fi if [ ".$addconf_created" = .0 ]; 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 [ ".$quiet" = .no ]; 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 stay below src/modules/ to be activated" 1>&2 exit 1 ;; esac modfile=`echo $file | sed -e 's;^src/;;'` if [ ".$addconf_created" = .0 ]; 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 [ ".$quiet" = .no ]; 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 [ ".$exists" = . ]; 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 ) OIFS="$IFS" IFS=':' for module in $modules; do eval "module_${module}=yes" done IFS="$OIFS" ;; most ) OIFS="$IFS" IFS=':' for module in $modules; do eval "module_${module}=yes" done IFS="$OIFS" 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_log_agent=no # deprecated module_log_referer=no # deprecated ;; * ) eval "exists=\$module_${apc_optarg}" if [ ".$exists" = . ]; 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 ) OIFS="$IFS" IFS=':' for module in $modules; do eval "shared_${module}=yes" done IFS="$OIFS" shared_so=no # because of bootstrapping ;; remain ) OIFS="$IFS" IFS=':' for module in $modules; do eval "add=\$module_${module}" if [ ".$add" = .no ]; then eval "module_${module}=yes" eval "shared_${module}=yes" fi done IFS="$OIFS" shared_so=no ;; * ) eval "exists=\$module_${apc_optarg}" if [ ".$exists" = . ]; then echo "configure:Error: No such module named '${apc_optarg}'" 1>&2 exit 1 fi eval "shared_${apc_optarg}=yes" ;; esac ;; suexec ) suexec=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 [ ".$exists" = . ]; 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 ) OIFS="$IFS" IFS=':' for module in $modules; do eval "module_${module}=no" done IFS="$OIFS" ;; * ) eval "exists=\$module_${apc_optarg}" if [ ".$exists" = . ]; 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 ) OIFS="$IFS" IFS=':' for module in $modules; do eval "shared_${module}=no" done IFS="$OIFS" ;; * ) eval "exists=\$module_${apc_optarg}" if [ ".$exists" = . ]; then echo "configure:Error: No such module named '${apc_optarg}'" 1>&2 exit 1 fi eval "shared_${apc_optarg}=no" ;; esac ;; 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 [ ".$exists" = . ]; 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" ;; --without-support) support=0 ;; --without-confadjust) confadjust=0 ;; --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 ;; * ) echo "configure:Error: invalid option '$apc_option'" 1>&2 exit 1 ;; esac done IFS="$OIFS1" if [ ".$apc_prev" != . ]; then echo "configure:Error: missing argument to --`echo $apc_prev | sed 's/_/-/g'`" 1>&2 exit 1 fi if [ ".$addconf_created" = .0 ]; 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 SSL_BASE RSA_BASE; do eval "val=\"\$$var\"" if [ ".$val" != . ]; 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 [ ".$suexec" = .1 ]; then if [ ".$suexec_ok" = .0 ]; 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 [ ".`id | grep root`" = . ]; then echo " + Warning: You enabled the suEXEC feature. Be aware that you need" 1>&2 echo " + root privileges for this, at the latest at the installation step." 1>&2 fi fi if [ ".$PERL" = .no-perl-on-this-system ]; then if [ .$quiet = .no ]; then echo " + Warning: no Perl interpreter available for support scripts." echo " + Perhaps you have to select one with --with-perl=FILE." fi fi ## ## SSL support ## if [ ".$module_ssl" = .yes ]; then ssl=1 fi ## ## target name ## if [ ".$TARGET" != . ]; then thetarget=$TARGET else thetarget=httpd fi ## ## expand path variables and make sure ## they do not end with a backslash ## OIFS="$IFS" IFS="$DIFS" for var in prefix exec_prefix bindir sbindir libexecdir mandir \ sysconfdir datadir includedir localstatedir runtimedir \ logfiledir proxycachedir suexec_docroot suexec_logexec; do eval "val=\"\$$var\""; val=`echo $val | sed -e 's:/*$::'` eval "$var=\"$val\"" # expand value eval "val=\$$var" # add target suffix when requested if [ ".`echo $val | grep $thetarget`" = . ]; then eval "autosuffix=\$autosuffix_$var" if [ ".$autosuffix" = .yes ]; then eval "$var=\"\$$var/$thetarget\"" fi fi done IFS="$OIFS" ## ## determine special configurable Makefile targets ## if [ ".$support" = .1 ]; then build_support='build-support' install_support='install-support' clean_support='clean-support' distclean_support='distclean-support' else build_support='' install_support='' clean_support='' distclean_support='' fi ## ## determine special configuration parameters ## conf_group="#-1" conf_port="80" conf_port_ssl="443" conf_serveradmin="you@your.address" conf_servername="new.host.name" if [ ".$confadjust" = .1 ]; then if [ ".`egrep '^nobody:' /etc/group`" != . ]; then conf_group="nobody" else if [ ".`egrep '^nogroup:' /etc/group`" != . ]; then conf_group="nogroup" fi fi if [ ".`id | grep root`" = . ]; then conf_port="8080" conf_port_ssl="8443" fi conf_serveradmin="`$aux/buildinfo.sh -n %u@%h%d`" conf_servername="`$aux/buildinfo.sh -n %h%d`" 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 [ ".$show_layout" = .1 ]; 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 " 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_XFERLOG: ${logfiledir_relative}access_log" 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 " SSL_CERTIFCATE_FILE: ${sysconfdir_relative}ssl.crt/server.crt" echo "" if [ ".$suexec" = .1 ]; 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" echo "" fi exit 0 fi ## ## create Makefile from Makefile.tmpl ## if [ .$quiet = .no ]; then echo "Creating $mkf" fi sed $mkf \ -e "s%@PERL@%$PERL%g" \ -e "s%@SRC@%$src%g" \ -e "s%@MKF@%$mkf%g" \ -e "s%@AUX@%$aux%g" \ -e "s%@TARGET@%$thetarget%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%@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%@ssl@%$ssl%g" \ -e "s%@conf_group@%$conf_group%g" \ -e "s%@conf_port@%$conf_port%g" \ -e "s%@conf_port_ssl@%$conf_port_ssl%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" ## ## 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_XFERLOG=\"${logfiledir_relative}access_log\"'" >>$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 echo "echo '-DSSL_CERTIFCATE_FILE=\"${sysconfdir_relative}ssl.crt/server.crt\"'" >>$src/apaci chmod a+x $src/apaci CFLAGS="$CFLAGS \\\`\$(SRCDIR)/apaci\\\`" ## ## create $src/Configuration.apaci file ## if [ .$quiet = .no ]; 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 SSL_BASE RSA_BASE; do eval "val=\"\$$var\""; if [ ".$val" != . ]; 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 [ $verbose = yes ]; 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 [ $share = yes ]; then some_shares=1 fi done IFS="$OIFS" if [ $some_shares = 1 ]; then if [ $module_so = no ]; then module_so=yes if [ .$quiet = .no ]; then echo " + enabling mod_so for DSO support" fi fi fi if [ ".$shared_so" = .yes ]; 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 [ ".$permute" != . ]; then sed -e '/## mod_mmap_static/,$d' $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 OIFS="$IFS" IFS=':' for module in $modules; do eval "add=\$module_$module" if [ $add = yes ]; then echo $SEO "s%^.*\\(AddModule.*[_b/]$module\\..*\\)%\\1%g" >>$sedsubst echo $SEO "s%^.*\\(SharedModule.*[_b/]$module\\..*\\)%\\1%g" >>$sedsubst m="yes [static]" else echo $SEO "s%^.*\\(AddModule.*[_b/]$module\\..*\\)%# \\1%g" >>$sedsubst echo $SEO "s%^.*\\(SharedModule.*[_b/]$module\\..*\\)%# \\1%g" >>$sedsubst m=no fi eval "share=\$shared_$module" if [ $share = yes ]; then echo $SEO "s%^\\(.*\\)AddModule\\(.*[_b/]$module\\.\\)[oam].*\\(.*\\)%\\1SharedModule\\2so\\3%g" >>$sedsubst m="yes [shared]" fi if [ $verbose = yes ]; then echo " + Module $module: $m" fi done IFS="$OIFS" # 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 [ .$quiet = .yes ]; then (cd $src; ./Configure -file Configuration.apaci >/dev/null); else (cd $src; ./Configure -file Configuration.apaci |\ sed -e '/^Using config file:.*/d' \ -e "s:Makefile in :Makefile in $src\\/:" \ -e "s:Makefile\$:Makefile in $src:") fi ## ## final hints ## if [ .$quiet = .no ]; then if [ ".$shadow" != . ]; 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