123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- #! /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 <<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.
- 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=pserver
- EOF
- }
- # Read configuration file
- if [ -r .bootstrap ]; then
- echo "$0: Reading configuration file .bootstrap"
- eval set -- "`sed 's/#.*$//;/^$/d' .bootstrap | tr '\n' ' '` $*"
- 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
- # 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 == "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([${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
- -) 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([${package}_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/lib${package}_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/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
- # Create gettext configuration.
- echo "$0: Creating po/Makevars from po/Makevars.template ..."
- sed '
- /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
- /^XGETTEXT_OPTIONS *=/{
- s/$/ \\/
- a\
- --flag=_:1:pass-c-format \\\
- --flag=N_:1:pass-c-format \\\
- --flag=error:3:c-format --flag=error_at_line:5:c-format \\\
- --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format \\\
- --flag=argp_error:2:c-format \\\
- --flag=__argp_error:2:c-format \\\
- --flag=argp_failure:4:c-format \\\
- --flag=__argp_failure:4:c-format \\\
- --flag=argp_fmtstream_printf:2:c-format \\\
- --flag=__argp_fmtstream_printf:2:c-format
- }
- ' po/Makevars.template >po/Makevars
- echo "$0: done. Now you can run './configure'."
|