so that translators are warned about strings that are formats but don't look like formats. This might help prevent core dumps. * configure.ac (AM_GNU_GETTEXT): Upgrade to need-formatstring-macros. Suggested by Eric Blake to avoid problems like <http://lists.gnu.org/archive/html/bug-coreutils/2006-07/msg00087.html>. (AM_GNU_GETTEXT_VERSION): Upgrade from 0.12.1 to 0.15. The gettext manual says we should use the version number normally expected of maintainers, neither more nor less.
428 lines
11 KiB
Bash
Executable File
428 lines
11 KiB
Bash
Executable File
#! /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([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
|
|
|
|
|
|
# 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'."
|