#! /bin/sh # Bootstrap 'tar' from CVS. # Copyright (C) 2003, 2004 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., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, 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/" # Ensure file names are sorted consistently across platforms; # e.g., m4/ulonglong_gl.m4 should follow m4/ulonglong.m4. LC_ALL=C export LC_ALL usage() { cat <<EOF usage: $0 [--gnulib-srcdir=DIR][--paxutils-srcdir=DIR][--cvs-auth=AUTH-METHOD][--cvs-user=USERNAME][--no-po] Options are: --paxutils-srcdir=DIRNAME Specify the local directory where paxutils sources reside. Use this if you already have paxutils sources on your machine, and do not want to waste your bandwidth dowloading them again. --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 dowloading them again. --cvs-auth=METHOD Set the CVS access method used for downloading gnulib files. METHOD is one of the keywords accepted by cvs -d option (see info cvs repository). --cvs-user=USERNAME Set the CVS username to be used when accessing the gnulib repository. --no-po Do not download po files. --update-po[=LANG] Update po file(s) and exit. Running without arguments will suffice in most cases. It is equivalent to ./bootstrap --cvs-auth=ext --cvs-user=anoncvs EOF } update_po() { if [ $# = 1 ]; then case $1 in *.po) POFILE=$1;; *) POFILE=${1}.po;; esac echo "$0: getting translation for $1..." wget -r -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 && rm -f index.html index.html.[0-9]* ls *.po | sed 's/\.po$//' >LINGUAS ) || exit fi } # Parse options. DOWNLOAD_PO=yes for option do case $option in --help) usage exit;; --gnulib-srcdir=*) GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;; --paxutils-srcdir=*) PAXUTILS_SRCDIR=`expr "$option" : '--paxutils-srcdir=\(.*\)'`;; --cvs-auth=*) CVS_AUTH=`expr "$option" : '--cvs-auth=\(.*\)'`;; --cvs-user=*) CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;; --no-po) DOWNLOAD_PO=no;; --update-po=*) DOWNLOAD_PO=`expr "$option" : '--update-po=\(.*\)'`;; --update-po) DOWNLOAD_PO=only;; *) echo >&2 "$0: $option: unknown option" exit 1;; esac done case $DOWNLOAD_PO in only) update_po exit 0 ;; no|yes) ;; *) update_po $DOWNLOAD_PO exit 0 esac echo "$0: Bootstrapping CVS tar..." 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--}" in -) build_cvs_prefix ext anoncvs ;; pserver) build_cvs_prefix $CVS_AUTH ${CVS_USER:-anoncvs} ;; 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 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 trap 0 fi } # Get gnulib files. case ${GNULIB_SRCDIR--} in -) checkout gnulib 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 localcharset memset modechange obstack quote quotearg rmdir safe-read save-cwd savedir stdbool stpcpy strtol strtoul timespec unlocked-io utime xalloc xalloc-die xgetcwd xstrtoumax ' previous_gnulib_modules= while [ "$gnulib_modules" != "$previous_gnulib_modules" ]; do previous_gnulib_modules=$gnulib_modules # In gnulib `alloca-opt' duplicates `alloca', so make sure not # to use it. gnulib_modules=` (echo "$gnulib_modules" for gnulib_module in $gnulib_modules; do $GNULIB_SRCDIR/gnulib-tool --extract-dependencies $gnulib_module done) | sed 's/alloca-opt/alloca/' | sort -u ` done gnulib_files=` (for gnulib_module in $gnulib_modules; do $GNULIB_SRCDIR/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 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 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 done | sed '/AM_GNU_GETTEXT/d' echo "])") > ./m4/gnulib.m4 echo "$0: Creating lib/Makefile.am" (cat lib/Makefile.tmpl for gnulib_module in $gnulib_modules; do echo "# $gnulib_module" $GNULIB_SRCDIR/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 # 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 } copy_files ${PAXUTILS_SRCDIR}/m4 m4 if [ -d rmt ]; then : else mkdir rmt fi copy_files ${PAXUTILS_SRCDIR}/rmt rmt copy_files ${PAXUTILS_SRCDIR}/lib lib copy_files ${PAXUTILS_SRCDIR}/tests tests # Get translations. if test "$DOWNLOAD_PO" = "yes"; then update_po fi # Reconfigure, getting other files. echo "$0: autoreconf --verbose --install --force ..." autoreconf --verbose --install --force echo "$0: done. Now you can run './configure'."