X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/6d8e724de2f64116a2d2684fe2f84e4d02b5809b..0f664b89d4aa86146015acd87a770db878d7e5d4:/bootstrap diff --git a/bootstrap b/bootstrap index 295e92a3..9923ff04 100755 --- a/bootstrap +++ b/bootstrap @@ -2,7 +2,8 @@ # Bootstrap this package from checked-out sources. -# Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 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 @@ -41,16 +42,16 @@ Bootstrap this package from the checked-out sources. Options: --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. + sources reside. Use this if you already + have gnulib sources on your machine, and + do not want to waste your bandwidth downloading + them again. --copy Copy files instead of creating symbolic links. --force Attempt to bootstrap even if the sources seem - not to have been checked out. + not to have been checked out. --skip-po Do not download po files. --cvs-user=USERNAME Set the username to use when checking out - sources from the gnulib repository. + sources from the gnulib repository. If the file bootstrap.conf exists in the current working directory, its contents are read as shell variables to configure the bootstrap. @@ -139,6 +140,37 @@ copy=false # on which version control system (if any) is used in the source directory. vc_ignore=auto +# find_tool ENVVAR NAMES... +# ------------------------- +find_tool () +{ + # Find sha1sum, named gsha1sum on MacPorts. + find_tool_envvar=$1 + shift + if eval test x"\$$find_tool_envvar" = x; then + for i + do + if ($i --version /dev/null 2>&1; then + find_tool_res=$i + break + fi + done + fi + if test x"$find_tool_res" = x; then + echo >&2 "$0: $find_tool_name is required" + exit 1 + fi + ($find_tool_res --version /dev/null 2>&1 || { + echo >&2 "$0: cannot run $find_tool_res --version" + exit 1 + } + eval "$find_tool_envvar=\"$find_tool_res\"" + eval "export $find_tool_envvar" +} + +# Find sha1sum, named gsha1sum on MacPorts. +find_tool SHA1SUM sha1sum gsha1sum + # Override the default configuration, if necessary. test -r bootstrap.conf && . ./bootstrap.conf @@ -243,7 +275,7 @@ case ${GNULIB_SRCDIR--} in trap cleanup_gnulib 1 2 13 15 - cvs -z3 -q -d ${CVS_PREFIX}cvs.savannah.gnu.org:/cvsroot/gnulib co gnulib || + cvs -z3 -q -d ${CVS_PREFIX}pserver.git.sv.gnu.org:/gnulib.git co -d gnulib HEAD || cleanup_gnulib trap - 1 2 13 15 @@ -284,9 +316,9 @@ update_po_files() { for po in `cd $ref_po_dir && echo *.po|sed 's/\.po//g'`; do new_po="$ref_po_dir/$po.po" cksum_file="$ref_po_dir/$po.s1" - if ! sha1sum -c --status "$cksum_file" < "$new_po" > /dev/null; then + if ! "$SHA1SUM" -c --status "$cksum_file" < "$new_po" > /dev/null; then echo "updated $po_dir/$po.po..." - cp "$new_po" "$po_dir/$po.po" && sha1sum < "$new_po" > "$cksum_file" + cp "$new_po" "$po_dir/$po.po" && "$SHA1SUM" < "$new_po" > "$cksum_file" fi done } @@ -302,6 +334,27 @@ 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_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'` + done + fi +} + symlink_to_dir() { src=$1/$2 @@ -309,22 +362,7 @@ symlink_to_dir() test -f "$src" && { - # 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 + check_dst_dir "$dst" if $copy; then { @@ -388,6 +426,7 @@ cp_mark_as_generated() sed "s!$bt_regex/!!g" "$cp_src" > "$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" && @@ -435,9 +474,9 @@ slurp() { test "$dir/$file" = "$excluded_file" && continue 2 done if test $file = Makefile.am; then - copied=$copied${sep}$gnulib_mk; sep=$nl + copied=$copied${sep}$gnulib_mk; sep=$nl remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g" - sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/$gnulib_mk || { + sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/$gnulib_mk || { echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." && rm -f $dir/$gnulib_mk && sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk