3 # Bootstrap this package from CVS.
5 # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2, or (at your option)
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 # Written by Paul Eggert.
27 # Ensure file names are sorted consistently across platforms.
28 # Also, ensure diagnostics are in English, e.g., "wget --help" below.
35 Bootstrap this package from the CVS sources.
38 --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
39 sources reside. Use this if you already
40 have gnulib sources on your machine, and
41 do not want to waste your bandwidth dowloading
43 --force Bootstrap even if the sources didn't come from CVS.
44 --skip-po Do not download po files.
45 --cvs-user=USERNAME Set the CVS username to be used when accessing
46 the gnulib repository.
48 If the file .bootstrap.conf exists in the current working directory, its
49 contents are read as shell variables to configure the bootstrap.
51 Running without arguments will suffice in most cases.
57 # List of gnulib modules needed.
60 # Any gnulib files needed that are not in modules.
63 # Translation Project URL, for the registry of all projects
64 # and for the translation-team master directory.
65 TP_URL='http://www.iro.umontreal.ca/translation/registry.cgi?domain='
66 TP_PO_URL='http://www.iro.umontreal.ca/translation/teams/PO/'
68 extract_package_name='
79 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
84 package=`sed -n "$extract_package_name" configure.ac` || exit
86 # Extra files from gnulib, which override files from other sources.
93 build-aux/config.guess
98 # Other locale categories that need message catalogs.
99 EXTRA_LOCALE_CATEGORIES=
101 # Additional xgettext options to use. Use "\\\newline" to break lines.
102 XGETTEXT_OPTIONS='\\\
103 --flag=_:1:pass-c-format\\\
104 --flag=N_:1:pass-c-format\\\
105 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
108 # Files we don't want to import.
111 # File that should exist with CVS checkout, but not with
112 # the distributed version.
115 # Override the default configuration, if necessary.
116 test -r bootstrap.conf && . ./bootstrap.conf
118 # Translate configuration into internal form.
129 GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
131 CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
137 echo >&2 "$0: $option: unknown option"
142 if test -n "$CVS_only_file" && test ! -r "$CVS_only_file"; then
143 echo "$0: Bootstrapping from a non-CVS distribution is a bit risky." >&2
147 echo "$0: Bootstrapping CVS $package..."
157 case ${GNULIB_SRCDIR--} in
159 if [ ! -d gnulib ]; then
160 echo "$0: getting gnulib files..."
162 case ${CVS_AUTH-pserver} in
164 CVS_PREFIX=':pserver:anonymous@';;
166 CVS_PREFIX="$CVS_USER${CVS_USER+@}";;
168 echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
173 '') CVS_RSH=ssh; export CVS_RSH;;
176 trap cleanup_gnulib 1 2 13 15
178 cvs -z3 -q -d ${CVS_PREFIX}cvs.savannah.gnu.org:/cvsroot/gnulib co gnulib ||
186 gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
187 <$gnulib_tool || exit
195 case $WGET_COMMAND in
197 echo "$0: wget not available; skipping translations";;
199 echo "$0: getting translations into $subdir for $domain..." &&
201 (cd $subdir && rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'`) &&
202 $WGET_COMMAND -O "$subdir/$domain.html" "$TP_URL$domain" &&
204 sed -n 's|.*"http://[^"]*/translation/teams/PO/\([^/"]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\1.\2|p' <"$subdir/$domain.html" |
205 sort -k 1,1 -k 2,2n -k2,2 -k3,3n -k3,3 -k4,4n -k4,4 -k5,5n -k5.5 |
207 { if (lang && $1 != lang) print lang, ver }
208 { lang = $1; ver = substr($0, index($0, ".") + 1) }
209 END { if (lang) print lang, ver }
210 ' | awk -v domain="$domain" -v subdir="$subdir" '
215 printf "{ $WGET_COMMAND -O %s/%s.po '\'"$TP_PO_URL"'/%s/%s-%s.%s.po'\'' &&\n", subdir, lang, lang, domain, ver, lang
216 printf " msgfmt -c -o /dev/null %s/%s.po || {\n", subdir, lang
217 printf " echo >&2 '\'"$0"': omitting translation for %s'\''\n", lang
218 printf " rm -f %s/%s.po; }; } &&\n", subdir, lang
221 ' | WGET_COMMAND="$WGET_COMMAND" sh;;
223 ls "$subdir"/*.po 2>/dev/null |
224 sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" &&
225 rm -f "$subdir/$domain.html"
230 case `wget --help` in
232 WGET_COMMAND='wget -nv --no-cache';;
234 WGET_COMMAND='wget -nv --cache=off';;
236 WGET_COMMAND='wget -nv';;
241 get_translations po $package || exit
243 if test -d runtime-po; then
244 get_translations runtime-po $package-runtime || exit
250 src=$GNULIB_SRCDIR/$1
258 *//* | */../* | */./* | /*/*/*/*/*/)
259 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
261 /*/*/*/*/) dot_dots=../../../;;
262 /*/*/*/) dot_dots=../../;;
263 /*/*/) dot_dots=../;;
269 src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
270 dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
271 test "$src_i" = "$dst_i" || {
272 echo "$0: ln -fs $dot_dots$src $dst" &&
273 ln -fs "$dot_dots$src" "$dst"
278 cp_mark_as_generated()
283 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
284 symlink_to_gnulib "$cp_dst"
287 *.[ch]) c1='/* '; c2=' */';;
288 *.texi) c1='@c '; c2= ;;
289 *.m4|*/Make*|Make*) c1='# ' ; c2= ;;
293 if test -z "$c1"; then
294 cmp -s "$cp_src" "$cp_dst" || {
295 echo "$0: cp -f $cp_src $cp_dst" &&
296 cp -f "$cp_src" "$cp_dst"
299 # Copy the file first to get proper permissions if it
300 # doesn't already exist. Then overwrite the copy.
301 cp "$cp_src" "$cp_dst-t" &&
303 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
304 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
307 if cmp -s "$cp_dst-t" "$cp_dst"; then
310 echo "$0: cp $cp_src $cp_dst # with edits" &&
311 mv -f "$cp_dst-t" "$cp_dst"
318 for dir in . `(cd $1 && find * -type d -print)`; do
321 for file in `ls $1/$dir`; do
322 test -d $1/$dir/$file && continue
323 for excluded_file in $excluded_files; do
324 test "$dir/$file" = "$excluded_file" && continue 2
326 if test $file = Makefile.am; then
327 copied=$copied${sep}gnulib.mk; sep=$nl
328 remove_intl='/^[^#].*\/intl/s/^/#/'
329 sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/gnulib.mk || {
330 echo "$0: Copying $1/$dir/$file to $dir/gnulib.mk ..." &&
331 rm -f $dir/gnulib.mk &&
332 sed "$remove_intl" $1/$dir/$file >$dir/gnulib.mk
334 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
335 grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
336 grep -q '^/[^/]*/[0-9]'; then
337 echo "$0: $dir/$file overrides $1/$dir/$file"
339 copied=$copied$sep$file; sep=$nl
340 if test $file = gettext.m4; then
341 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
344 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
345 AC_DEFUN([AM_INTL_SUBDIR], [
346 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
347 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
349 AC_DEFUN([gl_LOCK_EARLY], [])
350 ' $1/$dir/$file >$dir/$file
352 cp_mark_as_generated $1/$dir/$file $dir/$file
358 if test -n "$copied" && test -f $ig; then
359 echo "$copied" | sort -u - $ig | cmp -s - $ig ||
360 echo "$copied" | sort -u - $ig -o $ig || exit
366 # Create boot temporary directories to import from gnulib and gettext.
371 mkdir $bt $bt2 || exit
373 # Import from gnulib.
375 gnulib_tool_options="\
378 --aux-dir $bt/build-aux\
382 --source-base $bt/lib/\
383 --tests-base $bt/tests\
385 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
386 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
389 for file in $gnulib_files; do
390 symlink_to_gnulib $file || exit
394 # Import from gettext.
396 echo "$0: (cd $bt2; autopoint) ..."
397 cp configure.ac $bt2 &&
398 (cd $bt2 && autopoint && rm configure.ac) &&
399 slurp $bt2 $bt || exit
401 rm -fr $bt $bt2 || exit
404 # Reconfigure, getting other files.
407 'aclocal --force -I m4' \
409 'autoheader --force' \
410 'automake --add-missing --copy --force-missing';
412 echo "$0: $command ..."
417 # Get some extra files from gnulib, overriding existing files.
419 for file in $gnulib_extra_files; do
421 */INSTALL) dst=INSTALL;;
424 symlink_to_gnulib $file $dst || exit
428 # Create gettext configuration.
429 echo "$0: Creating po/Makevars from po/Makevars.template ..."
432 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
433 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
434 /^XGETTEXT_OPTIONS *=/{
437 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
439 ' po/Makevars.template >po/Makevars
441 if test -d runtime-po; then
442 # Likewise for runtime-po/Makevars, except also change a few other parameters.
443 rm -f runtime-po/Makevars
445 s/^\(DOMAIN\) *=.*/\1 = '"$package"'-runtime/
446 s/^\(subdir\) *=.*/\1 = runtime-po/
447 s/^\(XGETTEXT_OPTIONS\) *=.*/\1 = '"$XGETTEXT_OPTIONS_RUNTIME"'/
448 ' <po/Makevars >runtime-po/Makevars
450 # Copy identical files from po to runtime-po.
451 (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
454 echo "$0: done. Now you can run './configure'."