| #!/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. | |
| # | |
| # | |
| # buildconf: Build the support scripts needed to compile from a | |
| # checked-out version of the source code. | |
| # set a couple of defaults for where we should be looking for our support libs. | |
| # can be overridden with --with-apr=[dir] and --with-apr-util=[dir] | |
| apr_src_dir="srclib/apr ../apr" | |
| apu_src_dir="" | |
| autoconf_args="-Wall" | |
| # By default, touch the checked-in sources to suppress regeneration of | |
| # the ap_expr parser. | |
| regen_expr=no | |
| while test $# -gt 0 | |
| do | |
| # Normalize | |
| case "$1" in | |
| -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; | |
| *) optarg= ;; | |
| esac | |
| case "$1" in | |
| --with-apr=*) | |
| apr_src_dir=$optarg | |
| ;; | |
| --with-apr-util=*) | |
| apu_src_dir=$optarg | |
| ;; | |
| --with-regen-expr) | |
| regen_expr=yes | |
| ;; | |
| --with-errors) | |
| autoconf_args="$autoconf_args -Werror" | |
| ;; | |
| -h|--help) | |
| cat <<EOF | |
| buildconf: generates the files needed to configure httpd. | |
| Usage: $0 [OPTION]... | |
| Configuration: | |
| -h, --help display this help and exit | |
| --with-apr=SRCDIR define a space-separated list of directories to | |
| search for the APR source code. If, instead of a | |
| directory, an apr-config executable name is passed, | |
| APR-Config Mode is enabled (see below). Defaults to | |
| "srclib/apr ../apr" | |
| --with-apr-util=SRCDIR define a space-separated list of directories to | |
| search for the APR-util source code. Defaults to the | |
| same location as the --with-apr SRCDIR, but with | |
| "apr" replaced with "apr-util" or "aprutil". Ignored | |
| in APR-Config Mode. | |
| --with-regen-expr suppress the timestamp adjustment which prevents the | |
| rebuild of the ap_expr expression parser | |
| --with-errors fail on autoconf generation warnings | |
| APR-Config Mode: | |
| When passing an apr-config executable to --with-apr, buildconf will attempt to | |
| copy build scripts from various installed locations on your system instead of | |
| an APR source tree. This allows you to configure httpd from source without | |
| also requiring you to download the APR and/or APR-util sources. | |
| For example: | |
| ./buildconf --with-apr=apr-1-config | |
| For this functionality to work reliably, you must have automake >= 1.12 and be | |
| using a distribution that includes both find_apr.m4 and find_apu.m4 in the | |
| --installbuilddir pointed to by apr-config. | |
| Environment variables used by buildconf: | |
| AUTOCONF autoconf executable name [autoconf] | |
| AUTOMAKE automake executable name [automake] | |
| AUTOHEADER autoheader executable name [autoheader] | |
| EOF | |
| exit | |
| ;; | |
| *) | |
| echo "unknown option $1 (try --help for usage)" | |
| exit 1 | |
| ;; | |
| esac | |
| shift | |
| done | |
| # | |
| # Check to be sure that we have the srclib dependencies checked-out, or that a | |
| # working apr-config installation has been specified. | |
| # | |
| should_exit=0 | |
| apr_config= # path to apr-config (empty if using a source directory) | |
| apr_found=0 | |
| apu_found=0 | |
| apr_major_version=2 | |
| for dir in $apr_src_dir | |
| do | |
| if [ -f "${dir}/build/apr_common.m4" ]; then | |
| echo "found apr source: ${dir}" | |
| apr_src_dir=$dir | |
| apr_found=1 | |
| break | |
| elif which "${dir}" >/dev/null 2>&1; then | |
| # We're using apr-config. Do a sanity check. | |
| apr_config=`which "${dir}"` | |
| echo "testing apr-config executable: ${apr_config}" | |
| version=`"${apr_config}" --version` | |
| version=`echo "${version}" | sed -n '/^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$/p'` | |
| if [ -z "${version}" ]; then | |
| echo "apr-config gave us an invalid --version" | |
| apr_config= | |
| continue | |
| fi | |
| echo "using apr-config version ${version}" | |
| apr_major_version=${version} # we'll make a real "major version" later | |
| apr_src_dir=`"${apr_config}" --installbuilddir` | |
| apr_found=1 | |
| break | |
| fi | |
| done | |
| if [ $apr_found -lt 1 ]; then | |
| echo "" | |
| echo "APR could not be found automatically." | |
| echo "" | |
| echo "Please refer to the documentation on APR in the httpd INSTALL file." | |
| echo "" | |
| should_exit=1 | |
| elif [ -n "${apr_config}" ]; then | |
| apr_major_version=`echo "${apr_major_version}" | sed 's/\..*//'` | |
| else | |
| apr_major_version=`grep "#define APR_MAJOR_VERSION" \ | |
| $apr_src_dir/include/apr_version.h | sed 's/[^0-9]//g'` | |
| fi | |
| # Find APR-util. Note: if we're using apr-config, we can completely skip this, | |
| # even if APR is version 1. That's because we only end up caring about | |
| # find_apu.m4, which is not actually installed in the standard APR-util | |
| # distribution to begin with. | |
| if [ -z "${apr_config}" -a $apr_major_version -lt 2 ] ; then | |
| if test -z "$apu_src_dir"; then | |
| apu_src_dir=`echo $apr_src_dir | sed -e 's#/apr#/apr-util#g;'` | |
| apu_src_dir="$apu_src_dir `echo $apr_src_dir | sed -e 's#/apr#/aprutil#;g'`" | |
| apu_src_dir="$apu_src_dir srclib/apr-util ../apr-util" | |
| fi | |
| for dir in $apu_src_dir | |
| do | |
| if [ -f "${dir}/Makefile.in" ]; then | |
| echo "found apr-util source: ${dir}" | |
| apu_src_dir=$dir | |
| apu_found=1 | |
| break | |
| fi | |
| done | |
| if [ $apu_found -lt 1 ]; then | |
| echo "" | |
| echo "You are using APR 1.x but APR-util 1.x was not found." | |
| echo "" | |
| echo "Please refer to the documentation on APR in the httpd INSTALL file." | |
| echo "" | |
| should_exit=1 | |
| fi | |
| fi | |
| if [ $should_exit -gt 0 ]; then | |
| exit 1 | |
| fi | |
| # These are temporary until Roy finishes the other build changes | |
| # | |
| touch .deps | |
| rm -f aclocal.m4 | |
| rm -f generated_lists | |
| # Remove autoconf 2.5x cache directories | |
| rm -rf autom4te*.cache | |
| case "`uname`" in | |
| *BSD/OS*) | |
| ./build/bsd_makefile;; | |
| esac | |
| # | |
| # end temporary stuff | |
| apr_configure="$apr_src_dir/configure" | |
| if [ $apr_major_version -lt 2 ] ; then | |
| aprutil_configure="$apu_src_dir/configure" | |
| fi | |
| config_h_in="include/ap_config_auto.h.in" | |
| cross_compile_warning="warning: AC_TRY_RUN called without default to allow cross compiling" | |
| if [ "$apr_src_dir" = "srclib/apr" ]; then | |
| echo rebuilding $apr_configure | |
| (cd srclib/apr && ./buildconf) || { | |
| echo "./buildconf failed for apr" | |
| exit 1 | |
| } | |
| rm -f srclib/apr/apr.spec | |
| fi | |
| apr_src_dir=`cd $apr_src_dir && pwd` | |
| if [ $apr_major_version -lt 2 ] ; then | |
| if [ "$apu_src_dir" = "srclib/apr-util" ]; then | |
| echo rebuilding $aprutil_configure | |
| (cd srclib/apr-util && ./buildconf --with-apr=$apr_src_dir) || { | |
| echo "./buildconf failed for apr-util" | |
| exit 1 | |
| } | |
| rm -f srclib/apr-util/apr-util.spec | |
| fi | |
| apu_src_dir=`cd $apu_src_dir && pwd` | |
| fi | |
| echo buildconf: copying build files | |
| if [ -n "${apr_config}" ]; then | |
| # If we're using apr-config, we switch things up a little bit: | |
| # - use automake's config.* scripts instead of APR's | |
| # - use the included PrintPath instead of copying from APR | |
| # - assume find_apu.m4 is also in APR's --installbuilddir | |
| # Figure out where to copy config.* from. | |
| automake=${AUTOMAKE:-automake} | |
| am_libdir=`"${automake}" --print-libdir` | |
| cp "${am_libdir}/config.guess" "${am_libdir}/config.sub" build | |
| # Remember that in this case, $apr_src_dir points to the build directory. | |
| cp "$apr_src_dir/apr_common.m4" "$apr_src_dir/find_apr.m4" build | |
| if [ $apr_major_version -lt 2 ] ; then | |
| cp "$apr_src_dir/find_apu.m4" build | |
| fi | |
| else | |
| cp $apr_src_dir/build/config.guess $apr_src_dir/build/config.sub \ | |
| $apr_src_dir/build/PrintPath $apr_src_dir/build/apr_common.m4 \ | |
| $apr_src_dir/build/find_apr.m4 build | |
| if [ $apr_major_version -lt 2 ] ; then | |
| cp $apu_src_dir/build/find_apu.m4 build | |
| fi | |
| fi | |
| # Remove any libtool files so one can switch between libtool 1.3 | |
| # and libtool 1.4 by simply rerunning the buildconf script. | |
| (cd build ; rm -f ltconfig ltmain.sh) | |
| if [ -z "${apr_config}" ]; then | |
| # Optionally copy libtool-1.3.x files | |
| if [ -f $apr_src_dir/build/ltconfig ]; then | |
| cp $apr_src_dir/build/ltconfig build | |
| fi | |
| if [ -f $apr_src_dir/build/ltmain.sh ]; then | |
| cp $apr_src_dir/build/ltmain.sh build | |
| fi | |
| fi | |
| echo buildconf: rebuilding $config_h_in | |
| rm -f $config_h_in | |
| if ${AUTOHEADER:-autoheader} ${autoconf_args}; then | |
| : | |
| else | |
| echo buildconf: ERROR: autoheader failed, bailing out. | |
| exit 1 | |
| fi | |
| # The PACKAGE_* definitions are unused here since AC_INIT is not given | |
| # the package arguments, and only pollute the namespace of anything | |
| # which includes the installed header. | |
| echo buildconf: removing PACKAGE_ definitions from $config_h_in | |
| sed -i -e '/^#undef PACKAGE_/d' $config_h_in | |
| echo buildconf: rebuilding configure | |
| rm -f config.cache | |
| if ${AUTOCONF:-autoconf} ${autoconf_args}; then | |
| : | |
| else | |
| echo buildconf: ERROR: autoconf failed, bailing out. | |
| exit 2 | |
| fi | |
| # Remove autoconf 2.5x cache directories | |
| rm -rf autom4te*.cache | |
| # Remove possible bsd_converted file | |
| rm -rf bsd_converted | |
| if [ -f `which cut` ]; then | |
| echo buildconf: rebuilding rpm spec file | |
| ( VMMN=`build/get-version.sh mmn include/ap_mmn.h MODULE_MAGIC_NUMBER` | |
| EPOCH=`build/get-version.sh epoch include/ap_release.h AP_SERVER` | |
| REVISION=`build/get-version.sh all include/ap_release.h AP_SERVER` | |
| VERSION=`echo $REVISION | cut -d- -s -f1` | |
| RELEASE=`echo $REVISION | cut -d- -s -f2` | |
| if [ "x$VERSION" = "x" ]; then | |
| VERSION=$REVISION | |
| RELEASE=1 | |
| fi | |
| cat ./build/rpm/httpd.spec.in | \ | |
| sed -e "s/APACHE_VERSION/$VERSION/" \ | |
| -e "s/APACHE_RELEASE/$RELEASE/" \ | |
| -e "s/APACHE_MMN/$VMMN/" \ | |
| -e "s/APACHE_EPOCH/$EPOCH/" \ | |
| > httpd.spec ) | |
| fi | |
| if [ x$regen_expr = xno ]; then | |
| # ensure that the ap_expr expression parser sources are never regenerated | |
| # when running make | |
| echo buildconf: Fixing timestamps for ap_expr sources to prevent regeneration | |
| cd server | |
| touch util_expr_parse.y util_expr_scan.l | |
| sleep 1 | |
| touch util_expr_parse.c util_expr_parse.h util_expr_scan.c | |
| cd .. | |
| else | |
| echo buildconf: Fixing timestamps for ap_expr sources to ensure regeneration | |
| touch server/util_expr_parse.[yl] | |
| fi | |
| exit 0 |