maint: support --no-git option during autogen.sh

https://bugzilla.redhat.com/show_bug.cgi?id=562743

Also, fixes gnulib bug in dealing with strerror_r from glibc 2.13.

* .gnulib: Update to latest, for improved bootstrap.
* bootstrap: Resync from gnulib.
* autogen.sh (bootstrap): Add --bootstrap-sync, to make it easier
to keep bootstrap up-to-date.  Pass optional --no-git through.
Reported by Aleksey Avdeev.
This commit is contained in:
Eric Blake
2011-01-21 09:34:35 -07:00
parent 4301b95af7
commit 125978fe3b
3 changed files with 81 additions and 34 deletions

Submodule .gnulib updated: 45d39ca1ca...54c0573c2f

View File

@@ -14,6 +14,11 @@ test -f src/libvirt.c || {
EXTRA_ARGS= EXTRA_ARGS=
no_git=
if test "x$1" = "x--no-git"; then
no_git=" $1"
shift
fi
if test "x$1" = "x--system"; then if test "x$1" = "x--system"; then
shift shift
EXTRA_ARGS="--prefix=/usr --sysconfdir=/etc --localstatedir=/var" EXTRA_ARGS="--prefix=/usr --sysconfdir=/etc --localstatedir=/var"
@@ -47,8 +52,8 @@ if test "$t" = "$(cat $curr_status 2>/dev/null)" \
# good, it's up to date, all we need is autoreconf # good, it's up to date, all we need is autoreconf
autoreconf -if autoreconf -if
else else
echo running bootstrap... echo running bootstrap$no_git...
./bootstrap && bootstrap_hash > $curr_status \ ./bootstrap$no_git --bootstrap-sync && bootstrap_hash > $curr_status \
|| { echo "Failed to bootstrap, please investigate."; exit 1; } || { echo "Failed to bootstrap, please investigate."; exit 1; }
fi fi

104
bootstrap
View File

@@ -1,10 +1,10 @@
#! /bin/sh #! /bin/sh
# Print a version string. # Print a version string.
scriptversion=2010-11-12.21; # UTC scriptversion=2011-01-21.16; # UTC
# Bootstrap this package from checked-out sources. # Bootstrap this package from checked-out sources.
# Copyright (C) 2003-2010 Free Software Foundation, Inc. # Copyright (C) 2003-2011 Free Software Foundation, Inc.
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@@ -42,24 +42,32 @@ local_gl_dir=gl
bt='._bootmp' bt='._bootmp'
bt_regex=`echo "$bt"| sed 's/\./[.]/g'` bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
bt2=${bt}2 bt2=${bt}2
me=$0
usage() { usage() {
cat <<EOF cat <<EOF
Usage: $0 [OPTION]... Usage: $me [OPTION]...
Bootstrap this package from the checked-out sources. Bootstrap this package from the checked-out sources.
Options: Options:
--gnulib-srcdir=DIRNAME Specify the local directory where gnulib --gnulib-srcdir=DIRNAME specify the local directory where gnulib
sources reside. Use this if you already sources reside. Use this if you already
have gnulib sources on your machine, and have gnulib sources on your machine, and
do not want to waste your bandwidth downloading do not want to waste your bandwidth downloading
them again. Defaults to \$GNULIB_SRCDIR. them again. Defaults to \$GNULIB_SRCDIR
--copy Copy files instead of creating symbolic links. --bootstrap-sync if this bootstrap script is not identical to
--force Attempt to bootstrap even if the sources seem the version in the local gnulib sources,
not to have been checked out. update this script, and then restart it with
--skip-po Do not download po files. /bin/sh or the shell \$CONFIG_SHELL
--no-bootstrap-sync do not check whether bootstrap is out of sync
--copy copy files instead of creating symbolic links
--force attempt to bootstrap even if the sources seem
not to have been checked out
--no-git do not use git to update gnulib. Requires that
--gnulib-srcdir point to a correct gnulib snapshot
--skip-po do not download po files
If the file $0.conf exists in the same directory as this script, its If the file $me.conf exists in the same directory as this script, its
contents are read as shell variables to configure the bootstrap. contents are read as shell variables to configure the bootstrap.
For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
@@ -168,6 +176,13 @@ copy=false
# on which version control system (if any) is used in the source directory. # on which version control system (if any) is used in the source directory.
vc_ignore=auto vc_ignore=auto
# Set this to true in bootstrap.conf to enable --bootstrap-sync by
# default.
bootstrap_sync=false
# Use git to update gnulib sources
use_git=true
# find_tool ENVVAR NAMES... # find_tool ENVVAR NAMES...
# ------------------------- # -------------------------
# Search for a required program. Use the value of ENVVAR, if set, # Search for a required program. Use the value of ENVVAR, if set,
@@ -192,11 +207,11 @@ find_tool ()
find_tool_error_prefix="\$$find_tool_envvar: " find_tool_error_prefix="\$$find_tool_envvar: "
fi fi
if test x"$find_tool_res" = x; then if test x"$find_tool_res" = x; then
echo >&2 "$0: one of these is required: $find_tool_names" echo >&2 "$me: one of these is required: $find_tool_names"
exit 1 exit 1
fi fi
($find_tool_res --version </dev/null) >/dev/null 2>&1 || { ($find_tool_res --version </dev/null) >/dev/null 2>&1 || {
echo >&2 "$0: ${find_tool_error_prefix}cannot run $find_tool_res --version" echo >&2 "$me: ${find_tool_error_prefix}cannot run $find_tool_res --version"
exit 1 exit 1
} }
eval "$find_tool_envvar=\$find_tool_res" eval "$find_tool_envvar=\$find_tool_res"
@@ -239,12 +254,25 @@ do
checkout_only_file=;; checkout_only_file=;;
--copy) --copy)
copy=true;; copy=true;;
--bootstrap-sync)
bootstrap_sync=true;;
--no-bootstrap-sync)
bootstrap_sync=false;;
--no-git)
use_git=false;;
*) *)
echo >&2 "$0: $option: unknown option" echo >&2 "$0: $option: unknown option"
exit 1;; exit 1;;
esac esac
done done
if $use_git || test -d "$GNULIB_SRCDIR"; then
:
else
echo "$0: Error: --no-git requires --gnulib-srcdir" >&2
exit 1
fi
if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
exit 1 exit 1
@@ -370,18 +398,22 @@ check_versions() {
if test "$app" = libtool; then if test "$app" = libtool; then
app=libtoolize app=libtoolize
fi fi
# Exempt git if --no-git is in effect.
if test "$app" = git; then
$use_git || continue
fi
# Honor $APP variables ($TAR, $AUTOCONF, etc.) # Honor $APP variables ($TAR, $AUTOCONF, etc.)
appvar=`echo $app | tr '[a-z]-' '[A-Z]_'` appvar=`echo $app | tr '[a-z]-' '[A-Z]_'`
test "$appvar" = TAR && appvar=AMTAR test "$appvar" = TAR && appvar=AMTAR
eval "app=\${$appvar-$app}" eval "app=\${$appvar-$app}"
inst_ver=$(get_version $app) inst_ver=$(get_version $app)
if [ ! "$inst_ver" ]; then if [ ! "$inst_ver" ]; then
echo "Error: '$app' not found" >&2 echo "$me: Error: '$app' not found" >&2
ret=1 ret=1
elif [ ! "$req_ver" = "-" ]; then elif [ ! "$req_ver" = "-" ]; then
latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
if [ ! "$latest_ver" = "$inst_ver" ]; then if [ ! "$latest_ver" = "$inst_ver" ]; then
echo "Error: '$app' version == $inst_ver is too old" >&2 echo "$me: Error: '$app' version == $inst_ver is too old" >&2
echo " '$app' version >= $req_ver is required" >&2 echo " '$app' version >= $req_ver is required" >&2
ret=1 ret=1
fi fi
@@ -414,9 +446,9 @@ fi
if ! printf "$buildreq" | check_versions; then if ! printf "$buildreq" | check_versions; then
echo >&2 echo >&2
if test -f README-prereq; then if test -f README-prereq; then
echo "See README-prereq for how to get the prerequisite programs" >&2 echo "$0: See README-prereq for how to get the prerequisite programs" >&2
else else
echo "Please install the prerequisite programs" >&2 echo "$0: Please install the prerequisite programs" >&2
fi fi
exit 1 exit 1
fi fi
@@ -428,11 +460,11 @@ if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
if git config merge.merge-changelog.driver >/dev/null ; then if git config merge.merge-changelog.driver >/dev/null ; then
: :
elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
echo "initializing git-merge-changelog driver" echo "$0: initializing git-merge-changelog driver"
git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
else else
echo "consider installing git-merge-changelog from gnulib" echo "$0: consider installing git-merge-changelog from gnulib"
fi fi
fi fi
@@ -448,7 +480,7 @@ git_modules_config () {
} }
gnulib_path=`git_modules_config submodule.gnulib.path` gnulib_path=`git_modules_config submodule.gnulib.path`
: ${gnulib_path=gnulib} test -z "$gnulib_path" && gnulib_path=gnulib
# Get gnulib files. # Get gnulib files.
@@ -501,6 +533,16 @@ case ${GNULIB_SRCDIR--} in
;; ;;
esac esac
if $bootstrap_sync; then
cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || {
echo "$0: updating bootstrap and restarting..."
exec sh -c \
'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \
-- "$GNULIB_SRCDIR/build-aux/bootstrap" \
"$0" "$@" --no-bootstrap-sync
}
fi
gnulib_tool=$GNULIB_SRCDIR/gnulib-tool gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
<$gnulib_tool || exit <$gnulib_tool || exit
@@ -509,7 +551,7 @@ gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
download_po_files() { download_po_files() {
subdir=$1 subdir=$1
domain=$2 domain=$2
echo "$0: getting translations into $subdir for $domain..." echo "$me: getting translations into $subdir for $domain..."
cmd=`printf "$po_download_command_format" "$domain" "$subdir"` cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
eval "$cmd" eval "$cmd"
} }
@@ -543,7 +585,7 @@ update_po_files() {
! test -f "$po_dir/$po.po" || ! test -f "$po_dir/$po.po" ||
! $SHA1SUM -c --status "$cksum_file" \ ! $SHA1SUM -c --status "$cksum_file" \
< "$new_po" > /dev/null; then < "$new_po" > /dev/null; then
echo "updated $po_dir/$po.po..." echo "$me: updated $po_dir/$po.po..."
cp "$new_po" "$po_dir/$po.po" \ cp "$new_po" "$po_dir/$po.po" \
&& $SHA1SUM < "$new_po" > "$cksum_file" && $SHA1SUM < "$new_po" > "$cksum_file"
fi fi
@@ -588,13 +630,13 @@ symlink_to_dir()
if $copy; then if $copy; then
{ {
test ! -h "$dst" || { test ! -h "$dst" || {
echo "$0: rm -f $dst" && echo "$me: rm -f $dst" &&
rm -f "$dst" rm -f "$dst"
} }
} && } &&
test -f "$dst" && test -f "$dst" &&
cmp -s "$src" "$dst" || { cmp -s "$src" "$dst" || {
echo "$0: cp -fp $src $dst" && echo "$me: cp -fp $src $dst" &&
cp -fp "$src" "$dst" cp -fp "$src" "$dst"
} }
else else
@@ -608,7 +650,7 @@ symlink_to_dir()
*) *)
case /$dst/ in case /$dst/ in
*//* | */../* | */./* | /*/*/*/*/*/) *//* | */../* | */./* | /*/*/*/*/*/)
echo >&2 "$0: invalid symlink calculation: $src -> $dst" echo >&2 "$me: invalid symlink calculation: $src -> $dst"
exit 1;; exit 1;;
/*/*/*/*/) dot_dots=../../../;; /*/*/*/*/) dot_dots=../../../;;
/*/*/*/) dot_dots=../../;; /*/*/*/) dot_dots=../../;;
@@ -616,7 +658,7 @@ symlink_to_dir()
esac;; esac;;
esac esac
echo "$0: ln -fs $dot_dots$src $dst" && echo "$me: ln -fs $dot_dots$src $dst" &&
ln -fs "$dot_dots$src" "$dst" ln -fs "$dot_dots$src" "$dst"
} }
fi fi
@@ -649,7 +691,7 @@ cp_mark_as_generated()
cmp -s "$cp_src" "$cp_dst" || { cmp -s "$cp_src" "$cp_dst" || {
# Copy the file first to get proper permissions if it # Copy the file first to get proper permissions if it
# doesn't already exist. Then overwrite the copy. # doesn't already exist. Then overwrite the copy.
echo "$0: cp -f $cp_src $cp_dst" && echo "$me: cp -f $cp_src $cp_dst" &&
rm -f "$cp_dst" && rm -f "$cp_dst" &&
cp "$cp_src" "$cp_dst-t" && cp "$cp_src" "$cp_dst-t" &&
sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" && sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" &&
@@ -667,7 +709,7 @@ cp_mark_as_generated()
if cmp -s "$cp_dst-t" "$cp_dst"; then if cmp -s "$cp_dst-t" "$cp_dst"; then
rm -f "$cp_dst-t" rm -f "$cp_dst-t"
else else
echo "$0: cp $cp_src $cp_dst # with edits" && echo "$me: cp $cp_src $cp_dst # with edits" &&
mv -f "$cp_dst-t" "$cp_dst" mv -f "$cp_dst-t" "$cp_dst"
fi fi
fi fi
@@ -686,7 +728,7 @@ version_controlled_file() {
elif test -d .svn; then elif test -d .svn; then
svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
else else
echo "$0: no version control for $dir/$file?" >&2 echo "$me: no version control for $dir/$file?" >&2
fi fi
test $found = yes test $found = yes
} }
@@ -710,18 +752,18 @@ slurp() {
remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g" remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
sed "$remove_intl" $1/$dir/$file | sed "$remove_intl" $1/$dir/$file |
cmp - $dir/$gnulib_mk > /dev/null || { cmp - $dir/$gnulib_mk > /dev/null || {
echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." && echo "$me: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
rm -f $dir/$gnulib_mk && rm -f $dir/$gnulib_mk &&
sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk && sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk &&
gnulib_mk_hook $dir/$gnulib_mk gnulib_mk_hook $dir/$gnulib_mk
} }
elif { test "${2+set}" = set && test -r $2/$dir/$file; } || elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
version_controlled_file $dir $file; then version_controlled_file $dir $file; then
echo "$0: $dir/$file overrides $1/$dir/$file" echo "$me: $dir/$file overrides $1/$dir/$file"
else else
copied=$copied$sep$file; sep=$nl copied=$copied$sep$file; sep=$nl
if test $file = gettext.m4; then if test $file = gettext.m4; then
echo "$0: patching m4/gettext.m4 to remove need for intl/* ..." echo "$me: patching m4/gettext.m4 to remove need for intl/* ..."
rm -f $dir/$file rm -f $dir/$file
sed ' sed '
/^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\ /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\