#! /bin/sh # Bootstrap this package from CVS. # 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 # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # 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., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # Written by Paul Eggert and Sergey Poznyakoff. package=tar # 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 usage() { cat <&2 "$0: $option: unknown option" exit 1;; esac done # Get translations. get_translations() { subdir=$1 domain=$2 po_file=$3 echo "$0: getting translations into $subdir for $domain..." case $po_file in '') (cd $subdir && rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'`);; esac && $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 && 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 == "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" 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 ;; no|yes) ;; *) update_po $DOWNLOAD_PO exit esac echo "$0: Bootstrapping CVS $package..." build_cvs_prefix() { CVS_PREFIX=:${1}: if [ "${2}" != - ]; then CVS_PREFIX=${CVS_PREFIX}${2}@ fi if [ "$1" = "ext" ]; then if [ -z "${CVS_RSH}" ]; then CVS_RSH=ssh export CVS_RSH fi fi } # checkout package checkout() { if [ ! -d $1 ]; then echo "$0: getting $1 files..." trap exit 1 2 13 15 trap 'rm -fr $1; exit 1' 0 case "${CVS_AUTH-pserver}" in pserver) build_cvs_prefix pserver ${CVS_USER:-anonymous} ;; gserver|server) build_cvs_prefix $CVS_AUTH ${CVS_USER--} ;; ext) build_cvs_prefix $CVS_AUTH ${CVS_USER--} ;; *) echo "$0: Unknown CVS access method" >&2 exit 1;; esac cvs -q -d ${CVS_PREFIX}cvs.sv.gnu.org:/cvsroot/$1 co $1 || exit 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 -) checkout gnulib GNULIB_SRCDIR=gnulib esac 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_tool --extract-dependencies $gnulib_module done) | sort -u ` done gnulib_files=` (for gnulib_module in $gnulib_modules; do $gnulib_tool --extract-filelist $gnulib_module done) | sort -u ` gnulib_dirs=`echo "$gnulib_files" | sed 's,/[^/]*$,,' | sort -u` mkdir -p $gnulib_dirs || exit for gnulib_file in $gnulib_files; do dest=$gnulib_file 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_tool --extract-autoconf-snippet $gnulib_module done | sed '/AM_GNU_GETTEXT/d' echo "])") > ./m4/gnulib.m4 echo "$0: Creating lib/Makefile.am" (echo "# This file is generated automatically. Do not edit!" cat lib/Makefile.tmpl for gnulib_module in $gnulib_modules; do echo "# $gnulib_module" $gnulib_tool --extract-automake-snippet $gnulib_module done | sed 's/lib_SOURCES/libtar_a_SOURCES/g' ) > lib/Makefile.am # Get translations. if test "$DOWNLOAD_PO" = "yes"; then update_po fi # Reconfigure, getting other files. 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 # 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 # Make sure aclocal.m4 is not older than input files. sleep 1 for command in \ 'aclocal --force -I m4' \ 'autoconf --force' \ 'autoheader --force' \ 'automake --add-missing --copy --force-missing'; do echo "$0: $command ..." $command || exit done # 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'."