#!/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. # # ### Run this to produce everything needed for configuration. ### # Some shells can produce output when running 'cd' which interferes # with the construct 'abs=`cd dir && pwd`'. shell {unset CDPATH} >/dev/null 2>&1 && unset CDPATH # Run tests to ensure that our build requirements are met setglobal RELEASE_MODE = ''"" setglobal RELEASE_ARGS = ''"" setglobal SKIP_DEPS = ''"" while test $Argc != 0 { match $1 { with --release setglobal RELEASE_MODE = $1 setglobal RELEASE_ARGS = '"--release'" shift with -s setglobal SKIP_DEPS = '"yes'" shift with -- # end of option parsing break with * echo "invalid parameter: '$1'" exit 1 } } # ### The order of parameters is important; buildcheck.sh depends on it and # ### we don't want to copy the fancy option parsing loop there. For the # ### same reason, all parameters should be quoted, so that buildcheck.sh # ### sees an empty arg rather than missing one. ./build/buildcheck.sh $RELEASE_MODE || exit 1 # Handle some libtool helper files # # ### eventually, we can/should toss this in favor of simply using # ### APR's libtool. deferring to a second round of change... # # Much like APR except we do not prefer libtool 1 over libtool 2. setglobal libtoolize = $[./build/PrintPath glibtoolize libtoolize glibtoolize1 libtoolize15 libtoolize14] setglobal lt_major_version = $[$libtoolize --version !2 >/dev/null | sed -e 's/^[^0-9]*//' -e 's/\..*//' -e '/^$/d' -e 1q] if test "x$libtoolize" = "x" { echo "libtoolize not found in path" exit 1 } rm -f build/config.guess build/config.sub $libtoolize --copy --automake --force setglobal ltpath = $[dirname $libtoolize] if test "x$LIBTOOL_M4" = "x" { setglobal ltm4_error = ''(try setting the LIBTOOL_M4 environment variable)'' if test -d "$ltpath/../share/aclocal/." { setglobal ltm4 = $[cd "$ltpath/../share/aclocal" && pwd] } else { echo "Libtool helper path not found $ltm4_error" echo " expected at: '$ltpath/../share/aclocal'" exit 1 } } else { setglobal ltm4_error = ""(the LIBTOOL_M4 environment variable is: $LIBTOOL_M4)"" setglobal ltm4 = $LIBTOOL_M4 } setglobal ltfile = ""$ltm4/libtool.m4"" if test ! -f $ltfile { echo "$ltfile not found $ltm4_error" exit 1 } echo "Copying libtool helper: $ltfile" # An ancient helper might already be present from previous builds, # and it might be write-protected (e.g. mode 444, seen on FreeBSD). # This would cause cp to fail and print an error message, but leave # behind a potentially outdated libtool helper. So, remove before # copying: rm -f build/libtool.m4 cp $ltfile build/libtool.m4 for file in [ltoptions.m4 ltsugar.m4 ltversion.m4 lt~obsolete.m4] { rm -f build/$file if test $lt_major_version -ge 2 { setglobal ltfile = ""$ltm4/$file"" if test ! -f $ltfile { echo "$ltfile not found $ltm4_error" exit 1 } echo "Copying libtool helper: $ltfile" cp $ltfile "build/$file" } } if test $lt_major_version -ge 2 { if test "x$LIBTOOL_CONFIG" = "x" { setglobal ltconfig_error = ''(try setting the LIBTOOL_CONFIG environment variable)'' if test -d "$ltpath/../share/libtool/config/." { setglobal ltconfig = $[cd "$ltpath/../share/libtool/config" && pwd] } elif test -d "$ltpath/../share/libtool/build-aux/." { setglobal ltconfig = $[cd "$ltpath/../share/libtool/build-aux" && pwd] } else { echo "Autoconf helper path not found $ltconfig_error" echo " expected at: '$ltpath/../share/libtool/config'" echo " or: '$ltpath/../share/libtool/build-aux'" exit 1 } } else { setglobal ltconfig_error = ""(the LIBTOOL_CONFIG environment variable is: $LIBTOOL_CONFIG)"" setglobal ltconfig = $LIBTOOL_CONFIG } for file in [config.guess config.sub] { setglobal configfile = ""$ltconfig/$file"" if test ! -f $configfile { echo "$configfile not found $ltconfig_error" exit 1 } echo "Copying autoconf helper: $configfile" cp $configfile build/$file } } # Create the file detailing all of the build outputs for SVN. # # Note: this dependency on Python is fine: only SVN developers use autogen.sh # and we can state that dev people need Python on their machine. Note # that running gen-make.py requires Python 2.7 or newer. setglobal PYTHON = $[./build/find_python.sh] if test -z $PYTHON { echo "Python 2.7 or later is required to run autogen.sh" echo "If you have a suitable Python installed, but not on the" echo "PATH, set the environment variable PYTHON to the full path" echo "to the Python executable, and re-run autogen.sh" exit 1 } # Compile SWIG headers into standalone C files if we are in release mode if test -n $RELEASE_MODE { echo "Generating SWIG code..." # Generate build-outputs.mk in non-release-mode, so that we can # build the SWIG-related files $PYTHON ./gen-make.py build.conf || setglobal gen_failed = '1' # Build the SWIG-related files make -f autogen-standalone.mk autogen-swig # Remove the .swig_checked file rm -f .swig_checked } if test -n $SKIP_DEPS { echo "Creating build-outputs.mk (no dependencies)..." $PYTHON ./gen-make.py $RELEASE_ARGS -s build.conf || setglobal gen_failed = '1' } else { echo "Creating build-outputs.mk..." $PYTHON ./gen-make.py $RELEASE_ARGS build.conf || setglobal gen_failed = '1' } if test -n $RELEASE_MODE { find build/ -name '*.pyc' -exec rm {} ';' } rm autogen-standalone.mk if test -n $gen_failed { echo "ERROR: gen-make.py failed" exit 1 } # Produce config.h.in echo "Creating svn_private_config.h.in..." $(AUTOHEADER:-autoheader) # If there's a config.cache file, we may need to delete it. # If we have an existing configure script, save a copy for comparison. if test -f config.cache && test -f configure { cp configure configure.$Pid.tmp } # Produce ./configure echo "Creating configure..." $(AUTOCONF:-autoconf) # If we have a config.cache file, toss it if the configure script has # changed, or if we just built it for the first time. if test -f config.cache { shell { test -f configure.$Pid.tmp && cmp configure configure.$Pid.tmp > /dev/null !2 > !1 } || shell { echo "Tossing config.cache, since configure has changed." rm config.cache } rm -f configure.$Pid.tmp } # Remove autoconf 2.5x's cache directory rm -rf autom4te*.cache echo "" echo "You can run ./configure now." echo "" echo "Running autogen.sh implies you are a maintainer. You may prefer" echo "to run configure in one of the following ways:" echo "" echo "./configure --enable-maintainer-mode" echo "./configure --disable-shared" echo "./configure --enable-maintainer-mode --disable-shared" echo "./configure --disable-optimize --enable-debug" echo "./configure CFLAGS='--flags-for-C' CXXFLAGS='--flags-for-C++'" echo "" echo "Note: If you wish to run a Subversion HTTP server, you will need" echo "Apache 2.x. See the INSTALL file for details." echo ""