diff options
author | Jacob Champion <jchampion@apache.org> | 2017-01-26 19:24:58 +0000 |
---|---|---|
committer | Jacob Champion <jchampion@apache.org> | 2017-01-26 19:24:58 +0000 |
commit | b77f2ba33b32846766f94b20bfbdb6974555ce70 (patch) | |
tree | 2bc71dec3ba22271debef11bd5ca37c0dbfdcb0a /buildconf | |
parent | f81f31cb8046a5ec213fe9d48132091c76270322 (diff) | |
download | httpd-b77f2ba33b32846766f94b20bfbdb6974555ce70.tar.gz |
buildconf: allow configuration without APR sources
Previously we required copying the APR (and APR-util) source code into
srclib or some other location on disk in order to build httpd directly
from source. This is annoying if you're on a distribution that already
has the required files in its APR dev packages.
Practically speaking, if you're not building an official distribution
tarball, you only need the following files:
1) config.guess
2) config.sub
3) find_apr.m4
4) find_apu.m4
5) PrintPath
1 and 2 come from automake. 3 and 4 are included in some distributions'
(e.g. Debian's) development packages for APR/-util. That leaves
PrintPath, which has not changed meaningfully in over a decade and is
checked in completely here.
Passing an apr-config executable to buildconf's --with-apr option will
now enable a mode in which the above files (minus PrintPath) are copied
from their respective homes, removing the need for APR sources on disk.
Otherwise, if a source tree is passed, the current behavior is retained
and all of the above files are copied from APR directly.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/trunk-buildconf-noapr@1780441 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'buildconf')
-rwxr-xr-x | buildconf | 73 |
1 files changed, 60 insertions, 13 deletions
@@ -61,10 +61,12 @@ do done # -# Check to be sure that we have the srclib dependencies checked-out +# 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 @@ -76,6 +78,25 @@ do 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 @@ -86,12 +107,18 @@ if [ $apr_found -lt 1 ]; then 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 -if [ $apr_major_version -lt 2 ] ; then +# 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'`" @@ -171,23 +198,43 @@ if [ $apr_major_version -lt 2 ] ; then fi echo copying build files -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 +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) -# 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 +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 |