diff options
author | Christopher Lenz <cmlenz@apache.org> | 2008-03-28 23:32:19 +0000 |
---|---|---|
committer | Christopher Lenz <cmlenz@apache.org> | 2008-03-28 23:32:19 +0000 |
commit | 544a38dd45f6a58d34296c6c768afd086eb2ac70 (patch) | |
tree | c84cc02340b06aae189cff0dbfaee698f273f1f5 /bootstrap | |
parent | 804cbbe033b8e7a3e8d7058aaf31bdf69ef18ac5 (diff) |
Imported trunk.
git-svn-id: https://svn.apache.org/repos/asf/incubator/couchdb/trunk@642432 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'bootstrap')
-rwxr-xr-x | bootstrap | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/bootstrap b/bootstrap new file mode 100755 index 00000000..21137381 --- /dev/null +++ b/bootstrap @@ -0,0 +1,325 @@ +#! /bin/sh -e + +# Licensed 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. + +# Bootstrap the pristine source ready for distribution. + +SCRIPT_OK=0 +SCRIPT_ERROR=1 + +CHANGELOG_PREDICATE=true + +ACINCLUDE_FILE="acinclude.m4" +ACINCLUDE_IN_FILE="acinclude.m4.in" +AC_CHECK_ICU_COMPRESSED_FILE="build-contrib/ac_check_icu.m4_2007-09-12.gz" +AUTHORS_FILE="authors.xml" +BUILD_AUX_DIRECTORY="build-aux" +CHANGELOG_FILE="ChangeLog" +CONFIG_GUESS_COMPRESSED_FILE="build-contrib/config.guess_2007-09-12.gz" +CONFIG_GUESS_FILE="build-aux/config.guess" +CONFIG_SUB_COMPRESSED_FILE="build-contrib/config.sub_2007-09-12.gz" +CONFIG_SUB_FILE="build-aux/config.sub" +COPYING_FILE="COPYING" +LICENSE_COMPRESSED_FILE="build-contrib/apache_2.txt.gz" +M4_DIRECTORY="m4" +M4_AC_CHECK_ICU_FILE="m4/ac_check_icu.m4" +REPOSITORY_URI="http://couchdb.googlecode.com/svn/trunk/" + +ACLOCAL_EXECUTABLE=$(which aclocal || true) +AUTOCONF_EXECUTABLE=$(which autoconf || true) +AUTOHEADER_EXECUTABLE=$(which autoheader || true) +AUTOMAKE_EXECUTABLE=$(which automake || true) +GLIBTOOLIZE_EXECUTABLE=$(which glibtoolize || true) +LIBTOOLIZE_EXECUTABLE=$(which libtoolize || true) +SVN_EXECUTABLE=$(which svn || true) +SVN2CL_EXECUTABLE=$(which svn2cl || true) + +basename=$(basename $0) + +extract_configuration_variable () { + # Extract variables from the local M4 configuration. + + variable_name=$1 + temporary_file=$(mktemp) + if [ $? -ne 0 ]; then + echo "Error: Unable to create a temporary file." + exit $SCRIPT_ERROR + fi + echo "changequote(\`[', \`]')" > $temporary_file + sed "s/m4_//" < $ACINCLUDE_IN_FILE >> $temporary_file + echo $variable_name >> $temporary_file + m4 $temporary_file | grep -v "^$" + rm -f $temporary_file +} + +display_version () { + # Display version and copyright information. + + package_name=$(extract_configuration_variable LOCAL_PACKAGE_NAME) + version=$(extract_configuration_variable LOCAL_VERSION) + cat << EOF +$basename - $package_name $version + +Licensed 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. +EOF +} + +display_help () { + # Display a short description of the script's behaviour. + + list_address=$(extract_configuration_variable LOCAL_LIST_ADDRESS) + list_uri=$(extract_configuration_variable LOCAL_LIST_URI) + cat << EOF +Usage: $basename [OPTION]... + +The $basename script bootstraps the pristeen source so that it can be built. + +The exit status is 0 for success or 1 for failure. + +Options: + + -h display a short help message and exit + -v display version information and exit + -C do not generate a ChangeLog from Subversion + +Environment variables: + + REPOSITORY_REVISION manual override for revision information + +Report bugs via the web at <$list_uri>. + +Report bugs via email to <$list_address>. +EOF +} + +display_error () { + # Display a short instruction referring users to further documentation. + + if test -n "$1"; then + echo $1 >&2 + fi + echo >&2 + echo "Try \`"$basename" -h' for more information." >&2 + exit $SCRIPT_ERROR +} + +generate_dummy_changelog () { + # Generate a dummy ChangLog file. + + echo "Warning: Generating a dummy ChangeLog file." + touch $CHANGELOG_FILE +} + +check_svn_environment () { + # Check the Subversion environment for sanity. + + if test -z "$SVN_EXECUTABLE"; then + echo "Warning: Unable to find the svn command." + return $SCRIPT_ERROR + fi + if test -n "$REPOSITORY_REVISION"; then + return + fi + if test -n "$($SVN_EXECUTABLE info . 2> /dev/null)"; then + SVN_CHECKOUT_BOOLEAN="true" + fi > /dev/null + if test "$SVN_CHECKOUT_BOOLEAN" != "true"; then + echo "Warning: Unable to determine checkout information." + fi +} + +generate_changelog () { + # Generate the ChangLog file using the Subversion repository. + + if test "$SVN_CHECKOUT_BOOLEAN" = "true"; then + SVN2CL_COMMAND_ARGUMENT="." + fi + if test -n "$REPOSITORY_REVISION"; then + SVN2CL_COMMAND_ARGUMENT="--revision $REPOSITORY_REVISION:1 $REPOSITORY_URI" + fi + if test -z "$SVN2CL_COMMAND_ARGUMENT"; then + return + fi + if test ! -x "$SVN2CL_EXECUTABLE"; then + echo "Warning: Unable to find the svn2cl command." + generate_dummy_changelog + else + echo "Generating \`"$CHANGELOG_FILE"' (may take a while)" + $SVN2CL_EXECUTABLE --authors=$AUTHORS_FILE $SVN2CL_COMMAND_ARGUMENT + fi +} + +generate_acinclude () { + # Generate the acinclude.m4 file using the Subversion repository. + + release_code=$(sed -e "s/\[//g" -e "s/\]//g" -e "s/(//g" -e "s/)//g" \ + < $ACINCLUDE_IN_FILE | awk "/LOCAL_VERSION_STAGE, /{print \$2}") + repository_boolean=false + if test -n "$REPOSITORY_REVISION" -o "$SVN_CHECKOUT_BOOLEAN" = "true"; then + repository_boolean=true + fi + if test -z "$release_code" -o "$repository_boolean" = "false"; then + sed "s/%release%//" < $ACINCLUDE_IN_FILE > $ACINCLUDE_FILE + else + if test "$SVN_CHECKOUT_BOOLEAN" = "true"; then + revision_number=$($SVN_EXECUTABLE info . | \ + awk "/Revision:/{print \$2}") + fi + if test -n "$REPOSITORY_REVISION"; then + revision_number="$REPOSITORY_REVISION" + fi + sed "s/%release%/$revision_number/" \ + < $ACINCLUDE_IN_FILE > $ACINCLUDE_FILE + fi +} + +process_file_collection () { + # Process files required to complete the bootstrap. + + echo "Installing \`"$COPYING_FILE"'" + gzip --decompress --stdout $LICENSE_COMPRESSED_FILE > $COPYING_FILE + echo "Installing \`"$BUILD_AUX_DIRECTORY"'" + mkdir -p $BUILD_AUX_DIRECTORY + echo "Installing \`"$CONFIG_GUESS_FILE"'" + gzip --decompress --stdout \ + $CONFIG_GUESS_COMPRESSED_FILE > $CONFIG_GUESS_FILE + echo "Installing \`"$CONFIG_SUB_FILE"'" + gzip --decompress --stdout \ + $CONFIG_SUB_COMPRESSED_FILE > $CONFIG_SUB_FILE + echo "Installing \`"$M4_DIRECTORY"'" + mkdir -p $M4_DIRECTORY + echo "Installing \`"$M4_AC_CHECK_ICU_FILE"'" + gzip --decompress --stdout \ + $AC_CHECK_ICU_COMPRESSED_FILE > $M4_AC_CHECK_ICU_FILE +} + +run_aclocal () { + # Run the correct version of aclocal. + + if test -x "$ACLOCAL_EXECUTABLE"; then + echo "Running $ACLOCAL_EXECUTABLE" + $ACLOCAL_EXECUTABLE -I m4 + else + echo "Can't find aclocal" + exit $SCRIPT_ERROR + fi +} + +run_libtoolize () { + # Run the correct version of libtoolize. + + if test -x "$LIBTOOLIZE_EXECUTABLE"; then + echo "Running $LIBTOOLIZE_EXECUTABLE" + $LIBTOOLIZE_EXECUTABLE -f -c + else + if test -x "`which $GLIBTOOLIZE_EXECUTABLE`"; then + echo "Running $GLIBTOOLIZE_EXECUTABLE" + $GLIBTOOLIZE_EXECUTABLE -f -c + else + echo "Can't find libtoolize or glibtoolize" + exit $SCRIPT_ERROR + fi + fi +} + +run_autoheader () { + # Run the correct version of autoheader. + + if test -x "$AUTOHEADER_EXECUTABLE"; then + echo "Running $AUTOHEADER_EXECUTABLE" + $AUTOHEADER_EXECUTABLE -f + else + echo "Can't find autoheader" + exit $SCRIPT_ERROR + fi +} + +run_automake () { + # Run the correct version of automake. + + AUTOMAKE_OPTION_COLLECTION="" + if test -x "$AUTOMAKE_EXECUTABLE"; then + echo "Running $AUTOMAKE_EXECUTABLE" + $AUTOMAKE_EXECUTABLE -f -c -a --gnits + else + echo "Can't find automake" + exit $SCRIPT_ERROR + fi +} + +run_autoconf () { + # Run the correct version of autoconf. + + if test -x "$AUTOCONF_EXECUTABLE"; then + echo "Running $AUTOCONF_EXECUTABLE" + $AUTOCONF_EXECUTABLE -f + else + echo "Can't find autoconf" + exit $SCRIPT_ERROR + fi +} + +run_command_collection () { + # Run commands required to complete the bootstrap. + + run_libtoolize + run_aclocal + run_autoheader + run_automake + run_autoconf + cat << EOF + +You have bootstrapped Apache CouchDB. Time to relax. + +Run \`./configure' to configure the source before you install. +EOF +} + +parse_script_option_list () { + # Parse the script option list and take the appropriate action. + + if ! argument_list=$(getopt vhC $@); then + display_error + fi + eval set -- "$argument_list" + while [ $# -gt 0 ]; do + case "$1" in + -v) shift; display_version; exit $SCRIPT_OK;; + -h) shift; display_help; exit $SCRIPT_OK;; + -C) shift; CHANGELOG_PREDICATE=false;; + --) shift; break;; + *) display_error "Unknown option: $1" >&2;; + esac + done + cd $(dirname $0) + process_file_collection + check_svn_environment || true + if test "$CHANGELOG_PREDICATE" = "true"; then + generate_changelog + else + generate_dummy_changelog + fi + generate_acinclude + run_command_collection +} + +parse_script_option_list $@ |