| #!/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. |
| |
| # version check for AC_PROG_CC_C99 |
| ac_version=`${AUTOCONF:-autoconf} --version 2>/dev/null|sed -e 's/^[^0-9]*//;s/[a-z]* *$//;q'` |
| case "$ac_version" in |
| # versions older than 2.50 are denied by AC_PREREQ |
| 2.5*) |
| echo WARNING: You are using an outdated version of autoconf. |
| echo WARNING: This may lead to less than optimal performance of httpd. |
| echo WARNING: You should use autoconf 2.60 or newer. |
| sleep 1 |
| ;; |
| esac |
| |
| # 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="" |
| |
| # 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 |
| ;; |
| |
| -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 |
| |
| 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 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 rebuilding $config_h_in |
| rm -f $config_h_in |
| ${AUTOHEADER:-autoheader} 2>&1 | grep -v "$cross_compile_warning" |
| |
| echo rebuilding configure |
| rm -f config.cache |
| ${AUTOCONF:-autoconf} 2>&1 | grep -v "$cross_compile_warning" |
| |
| # 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 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 |