diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2010-10-08 11:10:06 -0700 |
---|---|---|
committer | Joel E. Denny <joeldenny@joeldenny.org> | 2010-10-16 18:10:48 -0400 |
commit | 86996fca101c629ef197313a1058df26e01df950 (patch) | |
tree | ac606d0913d93865c31a8f944c6949121476c4cb /bootstrap | |
parent | 32dc877a20aba67d3df6bf9dafdb75850073733c (diff) | |
download | bison-86996fca101c629ef197313a1058df26e01df950.tar.gz |
Adjust to recent changes to gnulib bootstrap.
* .cvsignore, build-aux/.cvsignore, doc/.cvsignore, etc/.cvsignore:
* examples/calc++/.cvsignore, lib/.cvsignore, m4/.cvsignore:
* po/.cvsignore, runtime-po/.cvsignore, src/.cvsignore:
* tests/.cvsignore: Remove; I don't use CVS to maintain Bison
anymore and don't know of anybody else who does. If someone needs
these files, they can resurrect them.
* .gitignore, build-aux/.gitignore, doc/.gitignore, lib/.gitignore:
* m4/.gitignore, po/.gitignore, runtime-po/.gitignore:
Omit leading '/', since bootstrap omits it.
Adjust file names to match current contents better.
* bootstrap: Sync from gnulib: this contains the new gnulib_mk_hook
installed just for us.
* bootstrap.conf (excluded_files): Don't exclude codeset.m4,
glibc21.m4, inttypes_h.m4, size_max.m4, xsize.m4, as they are now
needed somehow. Don't have time to look into why.
(gnulib_modules): Change malloc to malloc-gnu. Do we really assume
the GNU malloc behavior, where malloc (0) != NULL unless we're
out of storage? If not, we can omit malloc-gnu; but for now I left
it in to be safe.
(vc_ignore): Remove.
* README-hacking: Renamed from HACKING, since gnulib bootstrap now
uses that convention.
(cherry picked from commit 95aed8db15a0bb0f7819bf77586d0cf6812ffdfd)
Conflicts:
bootstrap
build-aux/.cvsignore
build-aux/.gitignore
doc/.cvsignore
doc/.gitignore
etc/.cvsignore
m4/.cvsignore
m4/.gitignore
src/.cvsignore
src/.gitignore
tests/.cvsignore
Diffstat (limited to 'bootstrap')
-rwxr-xr-x | bootstrap | 234 |
1 files changed, 140 insertions, 94 deletions
@@ -1,9 +1,10 @@ #! /bin/sh +# Print a version string. +scriptversion=2010-10-08.16; # UTC # Bootstrap this package from checked-out sources. -# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free -# Software Foundation, Inc. +# Copyright (C) 2003-2010 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 @@ -18,13 +19,20 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -# Written by Paul Eggert. +# Originally written by Paul Eggert. The canonical version of this +# script is maintained as build-aux/bootstrap in gnulib, however, to +# be useful to your project, you should place a copy of it under +# version control in the top-level directory of your project. The +# intent is that all customization can be done with a bootstrap.conf +# file also maintained in your version control; gnulib comes with a +# template build-aux/bootstrap.conf to get you started. + +# Please report bugs or propose patches to bug-gnulib@gnu.org. nl=' ' # Ensure file names are sorted consistently across platforms. -# Also, ensure diagnostics are in English, e.g., "wget --help" below. LC_ALL=C export LC_ALL @@ -45,7 +53,7 @@ Options: sources reside. Use this if you already have gnulib sources on your machine, and do not want to waste your bandwidth downloading - them again. + them again. Defaults to \$GNULIB_SRCDIR. --copy Copy files instead of creating symbolic links. --force Attempt to bootstrap even if the sources seem not to have been checked out. @@ -72,6 +80,10 @@ gnulib_modules= # Any gnulib files needed that are not in modules. gnulib_files= +# A function to be called to edit gnulib.mk right after it's created. +# Override it via your own definition in bootstrap.conf. +gnulib_mk_hook() { :; } + # A function to be called after everything else in this script. # Override it via your own definition in bootstrap.conf. bootstrap_epilogue() { :; } @@ -82,7 +94,8 @@ bootstrap_epilogue() { :; } # options because the latest/%s directory and the .po files within are # all symlinks. po_download_command_format=\ -"rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'" +"rsync --delete --exclude '*.s1' -Lrtvz \ + 'translationproject.org::tp/latest/%s/' '%s'" extract_package_name=' /^AC_INIT(/{ @@ -135,7 +148,8 @@ XGETTEXT_OPTIONS='\\\ --flag=error:3:c-format --flag=error_at_line:5:c-format\\\ ' -# Package bug report address for gettext files +# Package bug report address and copyright holder for gettext files +COPYRIGHT_HOLDER='Free Software Foundation, Inc.' MSGID_BUGS_ADDRESS=bug-$package@gnu.org # Files we don't want to import. @@ -143,7 +157,7 @@ excluded_files= # File that should exist in the top directory of a checked out hierarchy, # but not in a distribution tarball. -checkout_only_file=HACKING +checkout_only_file=README-hacking # Whether to use copies instead of symlinks. copy=false @@ -162,7 +176,6 @@ vc_ignore=auto # die otherwise. find_tool () { - # Find sha1sum, named gsha1sum on MacPorts. find_tool_envvar=$1 shift find_tool_names=$@ @@ -190,8 +203,8 @@ find_tool () eval "export $find_tool_envvar" } -# Find sha1sum, named gsha1sum on MacPorts. -find_tool SHA1SUM sha1sum gsha1sum +# Find sha1sum, named gsha1sum on MacPorts, and shasum on MacOS 10.6. +find_tool SHA1SUM sha1sum gsha1sum shasum # Override the default configuration, if necessary. # Make sure that bootstrap.conf is sourced from the current directory @@ -248,21 +261,6 @@ insert_sorted_if_absent() { || exit 1 } -# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with -# insert_sorted_if_absent. -insert_vc_ignore() { - vc_ignore_file="$1" - case $vc_ignore_file in - *.gitignore) - # A .gitignore entry that does not start with `/' applies recursively to - # subdirectories, so prepend `/' to every .gitignore entry. - pattern=`echo "$2" | sed s,^,/,`;; - *) - pattern="$2";; - esac - insert_sorted_if_absent "$vc_ignore_file" "$pattern" -} - # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. found_aux_dir=no grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \ @@ -281,7 +279,7 @@ if test ! -d $build_aux; then mkdir $build_aux for dot_ig in x $vc_ignore; do test $dot_ig = x && continue - insert_vc_ignore $dot_ig $build_aux + insert_sorted_if_absent $dot_ig $build_aux done fi @@ -352,8 +350,12 @@ 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 # 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) @@ -376,16 +378,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 "See README-prereq for how to get the prerequisite programs" >&2 + else + echo "Please install the prerequisite programs" >&2 + fi exit 1 fi @@ -407,7 +423,7 @@ fi cleanup_gnulib() { status=$? - rm -fr gnulib + rm -fr "$gnulib_path" exit $status } @@ -415,6 +431,9 @@ git_modules_config () { test -f .gitmodules && git config --file .gitmodules "$@" } +gnulib_path=`git_modules_config submodule.gnulib.path` +: ${gnulib_path=gnulib} + # Get gnulib files. case ${GNULIB_SRCDIR--} in @@ -424,30 +443,44 @@ case ${GNULIB_SRCDIR--} in git submodule init || exit $? git submodule update || exit $? - elif [ ! -d gnulib ]; then + elif [ ! -d "$gnulib_path" ]; then echo "$0: getting gnulib files..." trap cleanup_gnulib 1 2 13 15 - git clone --help|grep depth > /dev/null && shallow='--depth 2' || shallow= - git clone $shallow git://git.sv.gnu.org/gnulib || + 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 trap - 1 2 13 15 fi - GNULIB_SRCDIR=gnulib + GNULIB_SRCDIR=$gnulib_path ;; *) - # Redirect the gnulib submodule to the directory on the command line - # if possible. + # Use GNULIB_SRCDIR as a reference. if test -d "$GNULIB_SRCDIR"/.git && \ git_modules_config submodule.gnulib.url >/dev/null; then - git submodule init - GNULIB_SRCDIR=`cd $GNULIB_SRCDIR && pwd` - git_modules_config --replace-all submodule.gnulib.url $GNULIB_SRCDIR echo "$0: getting gnulib files..." - git submodule update || exit $? - GNULIB_SRCDIR=gnulib + if git submodule -h|grep -- --reference > /dev/null; then + # Prefer the one-liner available in git 1.6.4 or newer. + git submodule update --init --reference "$GNULIB_SRCDIR" \ + "$gnulib_path" || exit $? + else + # This fallback allows at least git 1.5.5. + if test -f "$gnulib_path"/gnulib-tool; then + # Since file already exists, assume submodule init already complete. + git submodule update || exit $? + else + # Older git can't clone into an empty directory. + rmdir "$gnulib_path" 2>/dev/null + git clone --reference "$GNULIB_SRCDIR" \ + "$(git_modules_config submodule.gnulib.url)" "$gnulib_path" \ + && git submodule init && git submodule update \ + || exit $? + fi + fi + GNULIB_SRCDIR=$gnulib_path fi ;; esac @@ -465,22 +498,24 @@ download_po_files() { 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" test -d $ref_po_dir || mkdir $ref_po_dir || return download_po_files $ref_po_dir $domain \ && ls "$ref_po_dir"/*.po 2>/dev/null | - sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" + sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'` test "$langs" = '*' && langs=x @@ -510,27 +545,6 @@ case $SKIP_PO in fi;; esac -check_dst_dir() -{ - dst=$1 - # If the destination directory doesn't exist, create it. - # This is required at least for "lib/uniwidth/cjk.h". - dst_dir=`dirname "$dst"` - if ! test -d "$dst_dir"; then - mkdir -p "$dst_dir" - - # If we've just created a directory like lib/uniwidth, - # tell version control system(s) it's ignorable. - # FIXME: for now, this does only one level - parent=`dirname "$dst_dir"` - for dot_ig in x $vc_ignore; do - test $dot_ig = x && continue - ig=$parent/$dot_ig - insert_vc_ignore $ig `echo "$dst_dir"|sed 's,.*/,,'` - done - fi -} - symlink_to_dir() { src=$1/$2 @@ -538,7 +552,22 @@ symlink_to_dir() test -f "$src" && { - check_dst_dir "$dst" + # If the destination directory doesn't exist, create it. + # This is required at least for "lib/uniwidth/cjk.h". + dst_dir=`dirname "$dst"` + if ! test -d "$dst_dir"; then + mkdir -p "$dst_dir" + + # If we've just created a directory like lib/uniwidth, + # tell version control system(s) it's ignorable. + # FIXME: for now, this does only one level + parent=`dirname "$dst_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,.*/,,'` + done + fi if $copy; then { @@ -595,6 +624,11 @@ cp_mark_as_generated() *) c1= ; c2= ;; esac + # If the destination directory doesn't exist, create it. + # This is required at least for "lib/uniwidth/cjk.h". + dst_dir=`dirname "$cp_dst"` + test -d "$dst_dir" || mkdir -p "$dst_dir" + if test -z "$c1"; then cmp -s "$cp_src" "$cp_dst" || { # Copy the file first to get proper permissions if it @@ -606,7 +640,6 @@ cp_mark_as_generated() mv -f "$cp_dst-t" "$cp_dst" } else - check_dst_dir "$cp_dst" # Copy the file first to get proper permissions if it # doesn't already exist. Then overwrite the copy. cp "$cp_src" "$cp_dst-t" && @@ -649,19 +682,22 @@ 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 test "$dir/$file" = "$excluded_file" && continue 2 done - if test $file = Makefile.am; then + 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 || { + sed "$remove_intl" $1/$dir/$file | + cmp - $dir/$gnulib_mk > /dev/null || { echo "$0: 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 @@ -673,7 +709,7 @@ slurp() { rm -f $dir/$file sed ' /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\ - AC_DEFUN([AM_INTL_SUBDIR], [ + AC_DEFUN([AM_INTL_SUBDIR], []) /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\ AC_DEFUN([gt_INTL_SUBDIR_CORE], []) $a\ @@ -689,18 +725,25 @@ slurp() { test $dot_ig = x && continue ig=$dir/$dot_ig if test -n "$copied"; then - insert_vc_ignore $ig "$copied" + insert_sorted_if_absent $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_vc_ignore $ig "$f" + f=`echo "$copied" | + sed ' + s/\.in\.h$/.h/ + s/\.sin$/.sed/ + s/\.y$/.c/ + s/\.gperf$/.h/ + ' + ` + insert_sorted_if_absent $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_vc_ignore $ig "$f" + insert_sorted_if_absent $ig "$f" fi done done @@ -725,6 +768,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 @@ -767,20 +816,12 @@ grep -E '^[ ]*AC_CONFIG_HEADERS?\>' configure.ac >/dev/null || for command in \ libtool \ - "${ACLOCAL-aclocal} --force -I m4" \ + "${ACLOCAL-aclocal} --force -I m4 $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" @@ -806,13 +847,14 @@ if test $with_gettext = yes; then rm -f po/Makevars sed ' /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ - /^MSGID_BUGS_ADDRESS *=/s/=.*/= '"$MSGID_BUGS_ADDRESS"'/ + /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ + /^MSGID_BUGS_ADDRESS *=/s|=.*|= '"$MSGID_BUGS_ADDRESS"'| /^XGETTEXT_OPTIONS *=/{ s/$/ \\/ a\ '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} } - ' po/Makevars.template >po/Makevars + ' po/Makevars.template >po/Makevars || exit 1 if test -d runtime-po; then # Similarly for runtime-po/Makevars, but not quite the same. @@ -826,7 +868,7 @@ if test $with_gettext = yes; then a\ '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} } - ' <po/Makevars.template >runtime-po/Makevars + ' po/Makevars.template >runtime-po/Makevars || exit 1 # Copy identical files from po to runtime-po. (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) @@ -837,6 +879,10 @@ bootstrap_epilogue echo "$0: done. Now you can run './configure'." -# Local Variables: -# indent-tabs-mode: nil +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: |