diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-11-05 11:10:13 -0800 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-11-05 11:10:13 -0800 |
commit | 7be93f2d05131d061bd4790ae33c8d50f50010d7 (patch) | |
tree | 72736c1606f803a92ffa07c9808ffea2521d009e /bootstrap | |
download | m4-7be93f2d05131d061bd4790ae33c8d50f50010d7.tar.gz m4-7be93f2d05131d061bd4790ae33c8d50f50010d7.tar.bz2 m4-7be93f2d05131d061bd4790ae33c8d50f50010d7.zip |
Imported Upstream version 1.4.16upstream/1.4.16
Diffstat (limited to 'bootstrap')
-rwxr-xr-x | bootstrap | 312 |
1 files changed, 312 insertions, 0 deletions
diff --git a/bootstrap b/bootstrap new file mode 100755 index 0000000..d4cf385 --- /dev/null +++ b/bootstrap @@ -0,0 +1,312 @@ +#! /bin/sh + +# bootstrap (GNU M4) version 2010-03-02 +# Written by Gary V. Vaughan <gary@gnu.org> + +# Copyright (C) 2004-2011 Free Software Foundation, Inc. + +# This file is part of GNU M4. +# +# GNU M4 is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GNU M4 is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Usage: $progname [options] + +# -f --force bootstrap even when sources are not from git +# --gnulib-srcdir=DIRNAME +# Specify the local directory where gnulib +# sources reside. Use this if you already +# have gnulib sources on your machine, and +# do not want to waste your bandwidth downloading +# them again. Defaults to $GNULIB_SRCDIR. +# -v --version print version information +# -h,-? --help print short or long help message + +# You can also set the following variables to help $progname +# locate the right tools: +# AUTORECONF, CONFIG_SHELL, GNULIB_SRCDIR, M4, RM, SED + +# This script bootstraps a git checkout of GNU M4 by correctly calling +# out to parts of the GNU Build Platform. See HACKING for a list of +# prerequisite tools and versions required. If you are re-running +# bootstrap on a release tarball rather than using a git checkout, +# then see the release announcement for the prerequisite tools used. + +# Report bugs to <bug-m4@gnu.org> + +: ${AUTORECONF=autoreconf} +: ${CONFIG_SHELL=/bin/sh} +: ${RM='rm -f'} +: ${SED=sed} + +# Ensure file names are sorted consistently across platforms. +LC_ALL=C +export LC_ALL + +config_macro_dir=m4 + +dirname="s,/[^/]*$,," +basename="s,^.*/,,g" + +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh +# is ksh but when the shell is invoked as "sh" and the current value of +# the _XPG environment variable is not equal to 1 (one), the special +# positional parameter $0, within a function call, is the name of the +# function. +progpath="$0" + +# The name of this program: +progname=`echo "$progpath" | $SED "$basename"` +PROGRAM=bootstrap + +# Detect whether this is a version control system checkout or a tarball +vcs_only_file=HACKING + +# func_echo arg... +# Echo program name prefixed message. +func_echo () +{ + echo $progname: ${1+"$@"} +} + + +# func_error arg... +# Echo program name prefixed message to standard error. +func_error () +{ + echo $progname: ${1+"$@"} >&2 +} + +# func_fatal_error arg... +# Echo program name prefixed message to standard error, and exit. +func_fatal_error () +{ + func_error ${1+"$@"} + exit $EXIT_FAILURE +} + +# func_verbose arg... +# Echo program name prefixed message in verbose mode only. +func_verbose () +{ + $opt_verbose && func_error ${1+"$@"} +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1" + exit_cmd=exit +} + +# func_fatal_help arg... +# Echo program name prefixed message to standard error, followed by +# a help hint, and exit. +func_fatal_help () +{ + func_error ${1+"$@"} + func_fatal_error "Try \`$progname --help' for more information." +} + +# func_missing_arg argname +# Echo program name prefixed message to standard error and set global +# exit_cmd. +func_missing_arg () +{ + func_error "missing argument for $1" + exit_cmd=exit +} + +# func_usage +# Echo short help message to standard output and exit. +func_usage () +{ + $SED '/^# Usage:/,/# -h/ { + s/^# //; s/^# *$//; + s/\$progname/'$progname'/; + p; + }; d' < "$progpath" + echo + echo "run \`$progname --help | more' for full usage" + exit $EXIT_SUCCESS +} + +# func_help +# Echo long help message to standard output and exit. +func_help () +{ + $SED '/^# Usage:/,/# Report bugs to/ { + s/^# //; s/^# *$//; + s/\$progname/'$progname'/; + p; + }; d' < "$progpath" + exit $EXIT_SUCCESS +} + +# func_version +# Echo version message to standard output and exit. +func_version () +{ + $SED '/^# '$PROGRAM' (GNU /,/# warranty; / { + s/^# //; s/^# *$//; + s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/; + p; + }; d' < "$progpath" + exit $EXIT_SUCCESS +} + +# func_update +# Copy $1 to $2 if it is newer. +func_update () +{ + if test -f "$2" && cmp -s "$1" "$2" ; then + func_verbose "$2 is up-to-date" + else + func_echo "copying $1 -> $2" + cp "$1" "$2" + fi +} + +# Parse options once, thoroughly. This comes as soon as possible in +# the script to make things like `bootstrap --version' happen quickly. +{ + # sed scripts: + my_sed_single_opt='1s/^\(..\).*$/\1/;q' + my_sed_single_rest='1s/^..\(.*\)$/\1/;q' + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + # this just eases exit handling + while test $# -gt 0; do + opt="$1" + shift + case $opt in + # Separate optargs to short options: + -f|--force) vcs_only_file= ;; + --gnulib-srcdir=*) + GNULIB_SRCDIR=`expr "X$opt" : 'X--gnulib-srcdir=\(.*\)'` ;; + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set -- "$opt" ${1+"$@"}; break ;; + esac + done + + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE + + if test -n "$vcs_only_file" && test ! -r "$vcs_only_file"; then + func_fatal_error \ + "Bootstrapping from a non-version-control distribution is risky." + fi +} + +## ---------------- ## +## Version control. ## +## ---------------- ## + +# gnulib-tool updates m4/.{git,cvs}ignore and lib/.{git,cvs}ignore, and +# keeping generated files under version control does not make sense. +# Since lib is entirely ignored, we only need to prepopulate the m4 ignore +# files with generated files not tracked by gnulib-tool. +if test -f $config_macro_dir/.gitignore ; then + : +else + func_echo "creating initial $config_macro_dir/.cvsignore" + cat > $config_macro_dir/.cvsignore <<\EOF +# files created by gnulib, but that gnulib doesn't track +*~ +.cvsignore +.gitignore +gnulib-comp.m4 +# gnulib-tool edits below here +EOF + func_echo "creating initial $config_macro_dir/.gitignore" + cp $config_macro_dir/.cvsignore $config_macro_dir/.gitignore +fi + +# See if we can use gnulib's git-merge-changelog merge driver. +if test -d .git && (git --version) >/dev/null 2>/dev/null ; then + if git config merge.merge-changelog.driver >/dev/null ; then + : + elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then + func_echo "initializing git-merge-changelog driver" + git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' + git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' + else + func_echo "consider installing git-merge-changelog from gnulib" + fi + if git config diff.texinfo.funcname >/dev/null ; then + : + else + func_echo "initializing git texinfo diff driver" + git config diff.texinfo.funcname '^@node[ \t][ \t]*\\([^,][^,]*\\)' + fi +fi + +## ------------------------------ ## +## Update the gnulib module tree. ## +## ------------------------------ ## + +if test -d .git && (git --version) >/dev/null 2>/dev/null ; then + if test -f gnulib/gnulib-tool ; then + func_echo "updating gnulib submodule" + git submodule update \ + || func_fatal_error "Unable to update gnulib" + else + # A fresh checkout creates an empty subdirectory gnulib. However, + # older git didn't know how to clone into an empty subdir. If the + # user provided GNULIB_SRCDIR, then make the initial clone refer + # to the existing checkout, to save network traffic. + func_echo "importing gnulib submodule" + if test -d "$GNULIB_SRCDIR" ; then + rmdir gnulib 2>/dev/null + git clone --reference "$GNULIB_SRCDIR" git://git.sv.gnu.org/gnulib.git \ + && git submodule init && git submodule update \ + || func_fatal_error "Unable to update gnulib" + else + git submodule update --init \ + || func_fatal_error "Unable to update gnulib" + fi + fi +else + func_echo "git not detected. If needed, update gnulib subdirectory manually" +fi + +## ---------------------- ## +## Import Gnulib modules. ## +## ---------------------- ## + +func_echo "running: $CONFIG_SHELL gnulib/gnulib-tool --update" +$CONFIG_SHELL gnulib/gnulib-tool --update \ + || func_fatal_error "gnulib-tool failed" + +## ----------- ## +## Autoreconf. ## +## ----------- ## + +func_echo "running: $AUTORECONF --verbose --install" +$AUTORECONF --verbose --install || func_fatal_error "autoreconf failed" + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "# bootstrap (GNU M4) version " +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "$" +# End: |