From 910ec4641eaebe5b262895fae71a001f8f62eb3e Mon Sep 17 00:00:00 2001 From: Giuseppe Scrivano Date: Mon, 21 Mar 2011 11:53:52 +0100 Subject: [PATCH] Update bootstrap script. --- ChangeLog | 4 + bootstrap | 228 +++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 163 insertions(+), 69 deletions(-) diff --git a/ChangeLog b/ChangeLog index fc6b794e..31b22249 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2011-03-21 Giuseppe Scrivano + + * bootstrap: Update from gnulib. + 2011-03-19 Giuseppe Scrivano * bootstrap.conf (buildreq): Update build prerequisites list. diff --git a/bootstrap b/bootstrap index 1ffaaa94..f004ad32 100755 --- a/bootstrap +++ b/bootstrap @@ -1,11 +1,10 @@ #! /bin/sh # Print a version string. -scriptversion=2010-05-14.09; # UTC +scriptversion=2011-03-03.12; # UTC # Bootstrap this package from checked-out sources. -# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 -# Free Software Foundation, Inc. +# Copyright (C) 2003-2011 Free Software Foundation, Inc. # 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 @@ -43,24 +42,32 @@ local_gl_dir=gl bt='._bootmp' bt_regex=`echo "$bt"| sed 's/\./[.]/g'` bt2=${bt}2 +me=$0 usage() { cat </dev/null 2>&1 || return 1 $app --version 2>&1 | - sed -n '# extract version within line - s/.*[v ]\{1,\}\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/ - t done + sed -n '# Move version to start of line. + s/.*[v ]\([0-9]\)/\1/ + + # Skip lines that do not start with version. + /^[0-9]/!d - # extract version at start of line - s/^\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/ - t done + # Remove characters after the version. + s/[^.a-z0-9-].*// - d + # The first component must be digits only. + s/^\([0-9]*\)[a-z-].*/\1/ - :done #the following essentially does s/5.005/5.5/ s/\.0*\([1-9]\)/.\1/g p @@ -346,18 +394,26 @@ check_versions() { ret=0 while read app req_ver; do + # We only need libtoolize from the libtool package. + if test "$app" = libtool; then + app=libtoolize + fi + # Exempt git if --no-git is in effect. + if test "$app" = git; then + $use_git || continue + fi # 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 eval "app=\${$appvar-$app}" inst_ver=$(get_version $app) if [ ! "$inst_ver" ]; then - echo "Error: '$app' not found" >&2 + echo "$me: Error: '$app' not found" >&2 ret=1 elif [ ! "$req_ver" = "-" ]; then latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) 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 ret=1 fi @@ -370,16 +426,30 @@ check_versions() { print_versions() { echo "Program Min_version" echo "----------------------" - printf "$buildreq" + printf %s "$buildreq" echo "----------------------" # can't depend on column -t } +use_libtool=0 +# We'd like to use grep -E, to see if any of LT_INIT, +# AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, +# but that's not portable enough (e.g., for Solaris). +grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ + && use_libtool=1 +grep '^[ ]*LT_INIT' configure.ac >/dev/null \ + && use_libtool=1 +if test $use_libtool = 1; then + find_tool LIBTOOLIZE glibtoolize libtoolize +fi + if ! printf "$buildreq" | check_versions; then - test -f README-prereq && - echo "See README-prereq for notes on obtaining these prerequisite programs:" >&2 - echo - print_versions + echo >&2 + if test -f README-prereq; then + echo "$0: See README-prereq for how to get the prerequisite programs" >&2 + else + echo "$0: Please install the prerequisite programs" >&2 + fi exit 1 fi @@ -390,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 : 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.driver 'git-merge-changelog %O %A %B' else - echo "consider installing git-merge-changelog from gnulib" + echo "$0: consider installing git-merge-changelog from gnulib" fi fi @@ -410,7 +480,7 @@ git_modules_config () { } gnulib_path=`git_modules_config submodule.gnulib.path` -test -n "$gnulib_path" || gnulib_path="gnulib" +test -z "$gnulib_path" && gnulib_path=gnulib # Get gnulib files. @@ -426,8 +496,8 @@ case ${GNULIB_SRCDIR--} in trap cleanup_gnulib 1 2 13 15 - git clone 2>&1 -h|grep -- --depth > /dev/null \ - && shallow='--depth 2'|| shallow= + shallow= + git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' git clone $shallow git://git.sv.gnu.org/gnulib "$gnulib_path" || cleanup_gnulib @@ -463,6 +533,16 @@ case ${GNULIB_SRCDIR--} in ;; 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 || exit @@ -471,20 +551,22 @@ gnulib_tool=$GNULIB_SRCDIR/gnulib-tool download_po_files() { subdir=$1 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"` eval "$cmd" } -# Download .po files to $po_dir/.reference and copy only the new +# Mirror .po files to $po_dir/.reference and copy only the new # or modified ones into $po_dir. Also update $po_dir/LINGUAS. +# Note po files that exist locally only are left in $po_dir but will +# not be included in LINGUAS and hence will not be distributed. update_po_files() { # Directory containing primary .po files. # Overwrite them only when we're sure a .po file is new. po_dir=$1 domain=$2 - # Download *.po files into this dir. + # Mirror *.po files into this dir. # Usually contains *.s1 checksum files. ref_po_dir="$po_dir/.reference" @@ -503,7 +585,7 @@ update_po_files() { ! test -f "$po_dir/$po.po" || ! $SHA1SUM -c --status "$cksum_file" \ < "$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" \ && $SHA1SUM < "$new_po" > "$cksum_file" fi @@ -541,20 +623,20 @@ symlink_to_dir() for dot_ig in x $vc_ignore; do test $dot_ig = x && continue ig=$parent/$dot_ig - insert_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'` + insert_vc_ignore $ig `echo "$dst_dir"|sed 's,.*/,,'` done fi if $copy; then { test ! -h "$dst" || { - echo "$0: rm -f $dst" && + echo "$me: rm -f $dst" && rm -f "$dst" } } && test -f "$dst" && cmp -s "$src" "$dst" || { - echo "$0: cp -fp $src $dst" && + echo "$me: cp -fp $src $dst" && cp -fp "$src" "$dst" } else @@ -568,7 +650,7 @@ symlink_to_dir() *) case /$dst/ in *//* | */../* | */./* | /*/*/*/*/*/) - echo >&2 "$0: invalid symlink calculation: $src -> $dst" + echo >&2 "$me: invalid symlink calculation: $src -> $dst" exit 1;; /*/*/*/*/) dot_dots=../../../;; /*/*/*/) dot_dots=../../;; @@ -576,7 +658,7 @@ symlink_to_dir() esac;; esac - echo "$0: ln -fs $dot_dots$src $dst" && + echo "$me: ln -fs $dot_dots$src $dst" && ln -fs "$dot_dots$src" "$dst" } fi @@ -609,7 +691,7 @@ cp_mark_as_generated() cmp -s "$cp_src" "$cp_dst" || { # Copy the file first to get proper permissions if it # 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" && cp "$cp_src" "$cp_dst-t" && sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" && @@ -627,7 +709,7 @@ cp_mark_as_generated() if cmp -s "$cp_dst-t" "$cp_dst"; then rm -f "$cp_dst-t" 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" fi fi @@ -646,7 +728,7 @@ version_controlled_file() { elif test -d .svn; then svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes else - echo "$0: no version control for $dir/$file?" >&2 + echo "$me: no version control for $dir/$file?" >&2 fi test $found = yes } @@ -658,7 +740,8 @@ slurp() { for file in `ls -a $1/$dir`; do case $file in .|..) continue;; - .*) continue;; # FIXME: should all file names starting with "." be ignored? + # FIXME: should all file names starting with "." be ignored? + .*) continue;; esac test -d $1/$dir/$file && continue for excluded_file in $excluded_files; do @@ -667,18 +750,20 @@ slurp() { if test $file = Makefile.am && test "X$gnulib_mk" != XMakefile.am; then copied=$copied${sep}$gnulib_mk; sep=$nl remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g" - sed "$remove_intl" $1/$dir/$file | cmp - $dir/$gnulib_mk > /dev/null || { - echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." && + sed "$remove_intl" $1/$dir/$file | + cmp - $dir/$gnulib_mk > /dev/null || { + echo "$me: Copying $1/$dir/$file to $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 } elif { test "${2+set}" = set && test -r $2/$dir/$file; } || version_controlled_file $dir $file; then - echo "$0: $dir/$file overrides $1/$dir/$file" + echo "$me: $dir/$file overrides $1/$dir/$file" else copied=$copied$sep$file; sep=$nl 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 sed ' /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\ @@ -698,18 +783,25 @@ slurp() { test $dot_ig = x && continue ig=$dir/$dot_ig if test -n "$copied"; then - insert_sorted_if_absent $ig "$copied" + insert_vc_ignore $ig "$copied" # If an ignored file name ends with .in.h, then also add # the name with just ".h". Many gnulib headers are generated, # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc. # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed - f=`echo "$copied"|sed 's/\.in\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'` - insert_sorted_if_absent $ig "$f" + f=`echo "$copied" | + sed ' + s/\.in\.h$/.h/ + s/\.sin$/.sed/ + s/\.y$/.c/ + s/\.gperf$/.h/ + ' + ` + insert_vc_ignore $ig "$f" # For files like sys_stat.in.h and sys_time.in.h, record as # ignorable the directory we might eventually create: sys/. f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'` - insert_sorted_if_absent $ig "$f" + insert_vc_ignore $ig "$f" fi done done @@ -734,6 +826,12 @@ gnulib_tool_options="\ --local-dir $local_gl_dir\ $gnulib_tool_option_extras\ " +if test $use_libtool = 1; then + case "$gnulib_tool_options " in + *' --libtool '*) ;; + *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; + esac +fi echo "$0: $gnulib_tool $gnulib_tool_options --import ..." $gnulib_tool $gnulib_tool_options --import $gnulib_modules && slurp $bt || exit @@ -776,26 +874,18 @@ grep -E '^[ ]*AC_CONFIG_HEADERS?\>' configure.ac >/dev/null || for command in \ libtool \ - "${ACLOCAL-aclocal} --force -I m4" \ + "${ACLOCAL-aclocal} --force -I '$m4_base' $ACLOCAL_FLAGS" \ "${AUTOCONF-autoconf} --force" \ "${AUTOHEADER-autoheader} --force" \ "${AUTOMAKE-automake} --add-missing --copy --force-missing" do if test "$command" = libtool; then - use_libtool=0 - # We'd like to use grep -E, to see if any of LT_INIT, - # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, - # but that's not portable enough (e.g., for Solaris). - grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ - && use_libtool=1 - grep '^[ ]*LT_INIT' configure.ac >/dev/null \ - && use_libtool=1 test $use_libtool = 0 \ && continue command="${LIBTOOLIZE-libtoolize} -c -f" fi echo "$0: $command ..." - $command || exit + eval "$command" || exit done -- 2.39.2