X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=bootstrap;h=a967cc74f0e6123a01091aed5423d1108264931a;hb=969d2b986b5848fe3d20003ea268690c12ae2ed3;hp=5e7082ad621477ca996b3d39555409a232b58fa3;hpb=c930802f313aa29b479edc6f9782897db608ce64;p=chaz%2Ftar diff --git a/bootstrap b/bootstrap index 5e7082a..a967cc7 100755 --- a/bootstrap +++ b/bootstrap @@ -2,11 +2,11 @@ # Bootstrap this package from CVS. -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006, 2007 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 -# the Free Software Foundation; either version 2, or (at your option) +# the Free Software Foundation; either version 3, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, @@ -49,12 +49,18 @@ Options: --force Attempt to bootstrap even if the sources seem not to have been checked out. --skip-po Do not download po files. + --update-po Update po files and exit. --cvs-user=USERNAME Set the CVS username to be used when accessing - the gnulib repository. + the paxutils repository. -If the file .bootstrap.conf exists in the current working directory, its +If the file bootstrap.conf exists in the current working directory, its contents are read as shell variables to configure the bootstrap. +Local defaults can be provided by placing the file \`.bootstrap' in the +current working directory. The file is read after bootstrap.conf, comments +and empty lines are removed, shell variables expanded and the result is +prepended to the command line options. + Running without arguments will suffice in most cases. " } @@ -63,24 +69,34 @@ checkout() { if [ ! -d $1 ]; then echo "$0: getting $1 files..." - case ${CVS_AUTH-pserver} in - pserver) - CVS_PREFIX=':pserver:anonymous@';; - ssh) - CVS_PREFIX="$CVS_USER${CVS_USER+@}";; - *) - echo "$0: $CVS_AUTH: Unknown CVS access method" >&2 - exit 1;; - esac + case $1 in + paxutils) + case ${CVS_AUTH-pserver} in + pserver) + CVS_PREFIX=':pserver:anonymous@';; + ssh) + CVS_PREFIX="$CVS_USER${CVS_USER+@}";; + *) + echo "$0: $CVS_AUTH: Unknown CVS access method" >&2 + exit 1;; + esac - case $CVS_RSH in - '') CVS_RSH=ssh; export CVS_RSH;; + case $CVS_RSH in + '') CVS_RSH=ssh; export CVS_RSH;; + esac + + CVSURL=${CVS_PREFIX}cvs.savannah.gnu.org:/cvsroot/"$1" + ;; + + gnulib) + CVSURL=:pserver:anonymous@pserver.git.sv.gnu.org:/gnulib.git + ;; + esac trap "cleanup $1" 1 2 13 15 - cvs -z3 -q -d ${CVS_PREFIX}cvs.savannah.gnu.org:/cvsroot/"$1" co $1 || - cleanup $1 + cvs -z3 -q -d $CVSURL co $1 || cleanup $1 trap - 1 2 13 15 fi @@ -100,10 +116,13 @@ gnulib_modules= # Any gnulib files needed that are not in modules. gnulib_files= -# Translation Project URL, for the registry of all projects -# and for the translation-team master directory. -TP_URL='http://www.iro.umontreal.ca/translation/registry.cgi?domain=' -TP_PO_URL='http://www.iro.umontreal.ca/translation/teams/PO/' +# The command to download all .po files for a specified domain into +# a specified directory. Fill in the first %s is the domain name, and +# the second with the destination directory. Use rsync's -L and -r +# 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'" extract_package_name=' /^AC_INIT(/{ @@ -159,6 +178,12 @@ copy=false # Override the default configuration, if necessary. test -r bootstrap.conf && . ./bootstrap.conf +# Read local configuration file +if [ -r .bootstrap ]; then + echo "$0: Reading configuration file .bootstrap" + eval set -- "`sed 's/#.*$//;/^$/d' .bootstrap | tr '\n' ' '` $*" +fi + # Translate configuration into internal form. # Parse options. @@ -176,7 +201,11 @@ do --cvs-user=*) CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;; --skip-po | --no-po) # --no-po is for compatibility with 'tar' tradition. - SKIP_PO=t;; + DOWNLOAD_PO=skip;; + --update-po=*) + DOWNLOAD_PO=`expr "$option" : '--update-po=\(.*\)'`;; + --update-po) + DOWNLOAD_PO=only;; --force) CVS_only_file=;; --copy) @@ -194,6 +223,64 @@ fi echo "$0: Bootstrapping CVS $package..." +# Get translations. + +download_po_files() { + subdir=$1 + domain=$2 + echo "$0: 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 +# or modified ones into $po_dir. Also update $po_dir/LINGUAS. +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. + # 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" + + langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'` + test "$langs" = '*' && langs=x + for po in `cd $ref_po_dir && echo *.po|sed 's/\.po//g'`; do + case $po in x) continue;; esac + new_po="$ref_po_dir/$po.po" + cksum_file="$ref_po_dir/$po.s1" + if ! test -f "$cksum_file" || + ! test -f "$po_dir/$po.po" || + ! 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" + fi + done +} + +case $DOWNLOAD_PO in +'skip') + ;; +'') + if test -d po; then + update_po_files po $package || exit + fi + ;; +'only') + if test -d po; then + update_po_files po $package || exit + fi + exit + ;; +esac + # Get paxutils files. case ${PAXUTILS_SRCDIR--} in @@ -208,6 +295,24 @@ if [ -r $PAXUTILS_SRCDIR/gnulib.modules ]; then ` fi +ignore_file_list= +cleanup_ifl() { + test -n "$ignore_file_list" && rm -f $ignore_file_list +} + +trap 'cleanup_ifl' 1 2 3 15 + +# ignorefile DIR FILE +# add FILE to the temporary ignorelist in the directory DIR +ignorefile() { + file=$1/.ignore.$$ + echo "$2" >> $file + if `echo $ignore_list | grep -qv $file`; then + ignore_file_list="$ignore_file_list +$file" + fi +} + # copy_files srcdir dstdir copy_files() { for file in `cat $1/DISTFILES` @@ -224,30 +329,10 @@ copy_files() { fi echo "$0: Copying file $1/$file to $2/$dst" cp -p $1/$file $2/$dst + ignorefile $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([${package}_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 @@ -259,65 +344,12 @@ esac gnulib_tool=$GNULIB_SRCDIR/gnulib-tool <$gnulib_tool || exit -# Get translations. - -get_translations() { - subdir=$1 - domain=$2 - - case $WGET_COMMAND in - '') - echo "$0: wget not available; skipping translations";; - ?*) - 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 subdir="$subdir" ' - { - lang = $1 - ver = $2 - urlfmt = "" - printf "{ $WGET_COMMAND -O %s/%s.po '\'"$TP_PO_URL"'/%s/%s-%s.%s.po'\'' &&\n", subdir, lang, lang, domain, ver, lang - printf " msgfmt -c -o /dev/null %s/%s.po || {\n", subdir, lang - printf " echo >&2 '\'"$0"': omitting translation for %s'\''\n", lang - printf " rm -f %s/%s.po; }; } &&\n", subdir, lang - } - END { print ":" } - ' | WGET_COMMAND="$WGET_COMMAND" sh;; - esac && - ls "$subdir"/*.po 2>/dev/null | - sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" && - rm -f "$subdir/$domain.html" +ensure_dir_exists() +{ + d=`dirname $dst` + test -d "$d" || mkdir -p -- "$d" } -case $SKIP_PO in -'') - case `wget --help` in - *'--no-cache'*) - WGET_COMMAND='wget -nv --no-cache';; - *'--cache=on/off'*) - WGET_COMMAND='wget -nv --cache=off';; - *'--non-verbose'*) - WGET_COMMAND='wget -nv';; - *) - WGET_COMMAND='';; - esac - - get_translations po $package || exit - - if test -d runtime-po; then - get_translations runtime-po $package-runtime || exit - fi;; -esac - symlink_to_gnulib() { src=$GNULIB_SRCDIR/$1 @@ -334,6 +366,7 @@ symlink_to_gnulib() test -f "$dst" && cmp -s "$src" "$dst" || { echo "$0: cp -fp $src $dst" && + ensure_dir_exists $dst && cp -fp "$src" "$dst" } else @@ -356,6 +389,7 @@ symlink_to_gnulib() esac echo "$0: ln -fs $dot_dots$src $dst" && + ensure_dir_exists $dst && ln -fs "$dot_dots$src" "$dst" } fi @@ -427,7 +461,7 @@ slurp() { done if test $file = Makefile.am; then copied=$copied${sep}gnulib.mk; sep=$nl - remove_intl='/^[^#].*\/intl/s/^/#/' + remove_intl='/^[^#].*\/intl/s/^/#/;'"s,/$bt,,g" 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 && @@ -455,13 +489,43 @@ slurp() { fi || exit done - for dot_ig in .cvsignore .gitignore; do + if test -n "$copied"; then + copied="Makefile +Makefile.in +$copied" + if test -d CVS; then + dot_ig=.cvsignore + else + dor_ig=.gitignore + fi + ig=$dir/$dot_ig - if test -n "$copied" && test -f $ig; then - echo "$copied" | sort -u - $ig | cmp -s - $ig || - echo "$copied" | sort -u - $ig -o $ig || exit + if [ -f $dir/.ignore.$$ ]; then + tfile=$dir/.ignore.$$ + else + tfile= fi - done + if test -f $ig; then + echo "$copied" | sort -u - $ig | cmp -s - $ig || + echo "$copied" | sort -u - $ig $tfile -o $ig + else + copied="$dot_ig +$copied" + if [ "$dir" = "po" ]; then + copied="LINGUAS +Makevars +POTFILES +*.mo +*.gmo +*.po +remove-potcdate.sed +stamp-po +$package.pot +$copied" + fi + echo "$copied" | sort -u - $tfile -o $ig + fi || exit + fi done } @@ -508,6 +572,28 @@ slurp $bt2 $bt || exit rm -fr $bt $bt2 || exit +# Import from paxutils +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([${package}_PAXUTILS],[" + cat ${PAXUTILS_SRCDIR}/m4/DISTFILES | sed '/^#/d;s/\(.*\)\.m4/pu_\1/' | tr a-z A-Z + echo "])") > ./m4/paxutils.m4 +ignorefile 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 # Reconfigure, getting other files. @@ -563,5 +649,5 @@ if test -d runtime-po; then # Copy identical files from po to runtime-po. (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) fi - +cleanup_ifl echo "$0: done. Now you can run './configure'."