X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=bootstrap;h=8cdc00cc8a14304243c7c4eca7719e6a170248fb;hb=94de7c4c776ec523af4c2eb6a91e6c5361675be3;hp=c767442c0ccd58eae83851991608f925cec135cf;hpb=7347b4f5d51c15bb19637ea52e9bf7dff832cc52;p=chaz%2Ftar diff --git a/bootstrap b/bootstrap index c767442..8cdc00c 100755 --- a/bootstrap +++ b/bootstrap @@ -1,8 +1,8 @@ #! /bin/sh -# Bootstrap 'tar' from CVS. +# Bootstrap this package from CVS. -# Copyright (C) 2003, 2004 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006 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 @@ -16,16 +16,18 @@ # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. # Written by Paul Eggert and Sergey Poznyakoff. -# URL of our text domain page in Translation Project -TP_URL="http://www2.iro.umontreal.ca/~gnutra/po/maint/tar/" +package=tar -# Ensure file names are sorted consistently across platforms; -# e.g., m4/ulonglong_gl.m4 should follow m4/ulonglong.m4. +# Translation Project URL, for the registry of all projects. +TP_URL='http://www.iro.umontreal.ca/translation/registry.cgi?domain=' + +# 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 @@ -51,32 +53,24 @@ usage() { the gnulib repository. --no-po Do not download po files. --update-po[=LANG] Update po file(s) and exit. - + +If the file \`.bootstrap' exists in the current working directory, its +contents is read, comments and empty lines removed, shell variables expanded +and the result is prepended to the command line options. + Running without arguments will suffice in most cases. It is equivalent to - ./bootstrap --cvs-auth=ext --cvs-user=anoncvs + ./bootstrap --cvs-auth=pserver EOF } -update_po() { - if [ $# = 1 ]; then - case $1 in - *.po) POFILE=$1;; - *) POFILE=${1}.po;; - esac - echo "$0: getting translation for $1..." - wget -C off $TP_URL/$POFILE - else - echo "$0: getting translations into po..." - (cd po && - rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'` && - wget -nv -nd -r -l 1 -A .po -C off $TP_URL && - ls *.po | sed 's/\.po$//' >LINGUAS - ) || exit - fi -} +# Read configuration file +if [ -r .bootstrap ]; then + echo "$0: Reading configuration file .bootstrap" + eval set -- "`sed 's/#.*$//;/^$/d' .bootstrap | tr '\n' ' '` $*" +fi # Parse options. @@ -107,16 +101,87 @@ do esac done +# Get translations. + +get_translations() { + subdir=$1 + domain=$2 + po_file=$3 + + echo "$0: getting translations into $subdir for $domain..." + (cd $subdir && rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'`) && + + $WGET_COMMAND -O "$subdir/$domain.html" "$TP_URL$domain" && + + sed -n 's|.*"http://[^"]*/translation/teams/PO/\([^/"]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\1.\2|p' <"$subdir/$domain.html" | + sort -k 1,1 -k 2,2n -k2,2 -k3,3n -k3,3 -k4,4n -k4,4 -k5,5n -k5.5 | + awk -F. ' + { if (lang && $1 != lang) print lang, ver } + { lang = $1; ver = substr($0, index($0, ".") + 1) } + END { if (lang) print lang, ver } + ' | + awk -v domain="$domain" -v po_file="$po_file" -v subdir="$subdir" ' + { + lang = $1 + if (po_file == (lang ".po")) next + + # Work around bugs in translations uncovered by gettext 0.15. + # This workaround can be removed once the translations are fixed. + if (lang == "hu" || lang == "ja" || lang == "ky" || lang == "zh_TW") next + + ver = $2 + urlfmt = "" + printf "$WGET_COMMAND -O %s/%s.po 'http://www.iro.umontreal.ca/translation/teams/PO/%s/%s-%s.%s.po' &&\n", subdir, lang, lang, domain, ver, lang + } + END { print ":" } + ' | + sh && + ls "$subdir"/*.po | sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" && +: rm "$subdir/$domain.html" +} + +update_po() { + if [ $# = 1 ]; then + case $1 in + *.po) POFILE=$1;; + *) POFILE=${1}.po;; + esac + get_translations po $package "$POFILE" && + LANG=`expr $POFILE : '\(.*\)\.po'` && + { grep -q $LANG po/LINGUAS || + (echo $LANG; cat po/LINGUAS) | sort -o po/LINGUAS; } + else + get_translations po $package + fi +} + +case $DOWNLOAD_PO in +no) ;; +*) + case `wget --help` in + *'--no-cache'*) + no_cache='--no-cache';; + *'--cache=on/off'*) + no_cache='--cache=off';; + *) + no_cache='';; + esac + + WGET_COMMAND="wget -nv $no_cache" + export WGET_COMMAND +esac + case $DOWNLOAD_PO in only) update_po - exit 0 + exit ;; no|yes) ;; -*) update_po $DOWNLOAD_PO - exit 0 +*) update_po $DOWNLOAD_PO + exit esac -echo "$0: Bootstrapping CVS tar..." + +echo "$0: Bootstrapping CVS $package..." build_cvs_prefix() { CVS_PREFIX=:${1}: @@ -139,10 +204,8 @@ checkout() { trap exit 1 2 13 15 trap 'rm -fr $1; exit 1' 0 - case "${CVS_AUTH--}" in - -) build_cvs_prefix ext anoncvs - ;; - pserver) build_cvs_prefix $CVS_AUTH ${CVS_USER:-anoncvs} + case "${CVS_AUTH-pserver}" in + pserver) build_cvs_prefix pserver ${CVS_USER:-anonymous} ;; gserver|server) build_cvs_prefix $CVS_AUTH ${CVS_USER--} @@ -152,15 +215,74 @@ checkout() { *) echo "$0: Unknown CVS access method" >&2 exit 1;; esac - if [ "${CVS_AUTH--}" = "pserver" ]; then - cvs -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/$1 login || exit - fi - cvs -q -d ${CVS_PREFIX}subversions.gnu.org:/cvsroot/$1 co $1 || exit + cvs -q -d ${CVS_PREFIX}cvs.sv.gnu.org:/cvsroot/$1 co $1 || exit - trap 0 + trap - 0 fi } +gnulib_modules= +newline=' +' + +get_modules() { + new_gnulib_modules=`sed '/^[ ]*#/d; /^[ ]*$/d' $*` + case $gnulib_modules,$new_gnulib_modules in + ?*,?*) new_gnulib_modules=$newline$new_gnulib_modules;; + esac + gnulib_modules=$gnulib_modules$new_gnulib_modules +} + +# Get paxutils files +case ${PAXUTILS_SRCDIR--} in +-) checkout paxutils + PAXUTILS_SRCDIR=paxutils +esac + +if [ -r $PAXUTILS_SRCDIR/gnulib.modules ]; then + get_modules $PAXUTILS_SRCDIR/gnulib.modules +fi + +# copy_files srcdir dstdir +copy_files() { + for file in `cat $1/DISTFILES` + do + case $file in + "#*") continue;; + esac + dst=`echo $file | sed 's^.*/^^'` + if [ $# -eq 3 ]; then + case $dst in + ${3}*) ;; + *) dst=${3}$dst;; + esac + fi + echo "$0: Copying file $1/$file to $2/$dst" + cp -p $1/$file $2/$dst + done +} + +copy_files ${PAXUTILS_SRCDIR}/m4 m4 +echo "$0: Creating m4/paxutils.m4" +(echo "# This file is generated automatically. Please, do not edit." + echo "#" + echo "AC_DEFUN([tar_PAXUTILS],[" + cat ${PAXUTILS_SRCDIR}/m4/DISTFILES | sed '/^#/d;s/\(.*\)\.m4/pu_\1/' | tr a-z A-Z + echo "])") > ./m4/paxutils.m4 + +if [ -d rmt ]; then + : +else + mkdir rmt +fi + +for dir in doc rmt lib tests +do + copy_files ${PAXUTILS_SRCDIR}/$dir $dir +done + +copy_files ${PAXUTILS_SRCDIR}/paxlib lib pax + # Get gnulib files. case ${GNULIB_SRCDIR--} in @@ -168,65 +290,26 @@ case ${GNULIB_SRCDIR--} in GNULIB_SRCDIR=gnulib esac -<$GNULIB_SRCDIR/gnulib-tool || exit - -gnulib_modules=' -alloca -argmatch -argp -backupfile -dirname -error -exclude -fileblocks -fnmatch-gnu -ftruncate -full-write -getdate -getline -getopt -getpagesize -gettext -gettime -hash -human -lchown -memset -modechange -obstack -quote -quotearg -rmdir -safe-read -save-cwd -savedir -stdbool -stpcpy -strtol -strtoul -timespec -unlocked-io -utime -xalloc -xalloc-die -xgetcwd -xstrtoumax -' +gnulib_tool=$GNULIB_SRCDIR/gnulib-tool +<$gnulib_tool || exit +get_modules gnulib.modules + +gnulib_modules=`echo "$gnulib_modules" | sort -u` previous_gnulib_modules= while [ "$gnulib_modules" != "$previous_gnulib_modules" ]; do previous_gnulib_modules=$gnulib_modules gnulib_modules=` (echo "$gnulib_modules" for gnulib_module in $gnulib_modules; do - $GNULIB_SRCDIR/gnulib-tool --extract-dependencies $gnulib_module + $gnulib_tool --extract-dependencies $gnulib_module done) | sort -u ` done gnulib_files=` (for gnulib_module in $gnulib_modules; do - $GNULIB_SRCDIR/gnulib-tool --extract-filelist $gnulib_module + $gnulib_tool --extract-filelist $gnulib_module done) | sort -u ` @@ -235,84 +318,95 @@ mkdir -p $gnulib_dirs || exit for gnulib_file in $gnulib_files; do dest=$gnulib_file - - case $gnulib_file in - m4/codeset.m4) continue;; - m4/intdiv0.m4) continue;; - m4/inttypes-pri.m4) continue;; - m4/isc-posix.m4) continue;; - m4/lcmessage.m4) continue;; - m4/onceonly_2_57.m4) dest=m4/onceonly.m4;; - # These will be overwritten by autopoint, which still uses - # old jm_.* macro names, so we have to keep both copies. - m4/gettext.m4 | m4/glibc21.m4 | m4/inttypes_h.m4 | m4/lib-ld.m4 | \ - m4/lib-prefix.m4 | m4/po.m4 | m4/stdint_h.m4 | m4/uintmax_t.m4 | \ - m4/ulonglong.m4) - dest=`expr $gnulib_file : '\(.*\).m4'`_gl.m4;; - esac - rm -f $dest && echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file" && cp -p $GNULIB_SRCDIR/$gnulib_file $dest || exit done +# This suppresses a bogus diagnostic +# "warning: macro `AM_LANGINFO_CODESET' not found in library". +echo "$0: patching m4/gettext.m4 to remove need for intl/* ..." +sed ' + /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\ + AC_DEFUN([AM_INTL_SUBDIR], []) + /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\ + AC_DEFUN([gt_INTL_SUBDIR_CORE], []) +' m4/gettext.m4 >m4/gettext_gl.m4 || exit + echo "$0: Creating m4/gnulib.m4" (echo "# This file is generated automatically. Please, do not edit." echo "#" echo "AC_DEFUN([tar_GNULIB],[" for gnulib_module in $gnulib_modules; do echo "# $gnulib_module" - $GNULIB_SRCDIR/gnulib-tool --extract-autoconf-snippet $gnulib_module + $gnulib_tool --extract-autoconf-snippet $gnulib_module done | sed '/AM_GNU_GETTEXT/d' echo "])") > ./m4/gnulib.m4 echo "$0: Creating lib/Makefile.am" -(cat lib/Makefile.tmpl - +(echo "# This file is generated automatically. Do not edit!" + cat lib/Makefile.tmpl + for gnulib_module in $gnulib_modules; do echo "# $gnulib_module" - $GNULIB_SRCDIR/gnulib-tool --extract-automake-snippet $gnulib_module + $gnulib_tool --extract-automake-snippet $gnulib_module done | sed 's/lib_SOURCES/libtar_a_SOURCES/g' ) > lib/Makefile.am -# Get paxutils files -case ${PAXUTILS_SRCDIR--} in --) checkout paxutils - PAXUTILS_SRCDIR=paxutils -esac +# Get translations. +if test "$DOWNLOAD_PO" = "yes"; then + update_po +fi -# copy_files srcdir dstdir -copy_files() { - for file in `cat $1/DISTFILES` - do - case $file in - "#*") continue;; - esac - echo "$0: Copying file $1/$file" - cp -p $1/$file $2/`expr $file : '.*/\(.*\)'` - done -} +# Reconfigure, getting other files. -copy_files ${PAXUTILS_SRCDIR}/m4 m4 +echo "$0: autopoint --force ..." +autopoint --force || exit + +# We don't need intl, so remove it. +intl_files_to_remove=' + intl + m4/gettext.m4 + m4/glibc2.m4 + m4/intdiv0.m4 + m4/intmax.m4 + m4/inttypes-h.m4 + m4/inttypes-pri.m4 + m4/lcmessage.m4 + m4/lock.m4 + m4/printf-posix.m4 + m4/visibility.m4 +' +echo $0: rm -fr $intl_files_to_remove ... +rm -fr $intl_files_to_remove || exit -if [ -d rmt ]; then - : -else - mkdir rmt -fi -copy_files ${PAXUTILS_SRCDIR}/rmt rmt +# Undo changes to gnulib files that autoreconf made. +for gnulib_file in $gnulib_files; do + test ! -f $gnulib_file || cmp -s $gnulib_file $GNULIB_SRCDIR/$gnulib_file || { + rm -f $gnulib_file && + echo "$0: Copying file $GNULIB_SRCDIR/$gnulib_file again" && + cp -p $GNULIB_SRCDIR/$gnulib_file $gnulib_file || exit + } +done -copy_files ${PAXUTILS_SRCDIR}/lib lib +# Make sure aclocal.m4 is not older than input files. +sleep 1 -# Get translations. -if test "$DOWNLOAD_PO" = "yes"; then - update_po -fi +for command in \ + 'aclocal --force -I m4' \ + 'autoconf --force' \ + 'autoheader --force' \ + 'automake --add-missing --copy --force-missing'; +do + echo "$0: $command ..." + $command || exit +done -# Reconfigure, getting other files. -echo "$0: autoreconf --verbose --install --force ..." -autoreconf --verbose --install --force +# Put bug-reporting address into po/Makevars. +echo "$0: sed '/^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-$package@gnu.org/' po/Makevars.template >po/Makevars ..." +sed '/^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/' po/Makevars.template >po/Makevars + echo "$0: done. Now you can run './configure'."