#!/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 ## # default input separator chars: 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 $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' $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