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 checked-out 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 --copy Copy files instead of creating symbolic links.
44 --force Attempt to bootstrap even if the sources seem
45 not to have been checked out.
46 --skip-po Do not download po files.
47 --cvs-user=USERNAME Set the CVS username to be used when accessing
48 the gnulib repository.
50 If the file .bootstrap.conf exists in the current working directory, its
51 contents are read as shell variables to configure the bootstrap.
53 Running without arguments will suffice in most cases.
59 # List of gnulib modules needed.
62 # Any gnulib files needed that are not in modules.
65 # Translation Project URL, for the registry of all projects
66 # and for the translation-team master directory.
67 TP_URL
='http://www.iro.umontreal.ca/translation/registry.cgi?domain='
68 TP_PO_URL
='http://www.iro.umontreal.ca/translation/teams/PO/'
70 extract_package_name
='
81 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
86 package
=`sed -n "$extract_package_name" configure.ac` ||
exit
88 # Extra files from gnulib, which override files from other sources.
95 build-aux/config.guess
100 # Other locale categories that need message catalogs.
101 EXTRA_LOCALE_CATEGORIES
=
103 # Additional xgettext options to use. Use "\\\newline" to break lines.
104 XGETTEXT_OPTIONS
='\\\
105 --flag=_:1:pass-c-format\\\
106 --flag=N_:1:pass-c-format\\\
107 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
110 # Files we don't want to import.
113 # File that should exist in the top directory of a checked out hierarchy,
114 # but not in a distribution tarball.
115 CVS_only_file
=README-cvs
117 # Whether to use copies instead of symlinks.
120 # Override the default configuration, if necessary.
121 test -r bootstrap.conf
&& . .
/bootstrap.conf
123 # Translate configuration into internal form.
134 GNULIB_SRCDIR
=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
136 CVS_USER
=`expr "$option" : '--cvs-user=\(.*\)'`;;
144 echo >&2 "$0: $option: unknown option"
149 if test -n "$CVS_only_file" && test ! -r "$CVS_only_file"; then
150 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
154 echo "$0: Bootstrapping CVS $package..."
164 case ${GNULIB_SRCDIR--} in
166 if [ ! -d gnulib
]; then
167 echo "$0: getting gnulib files..."
169 case ${CVS_AUTH-pserver} in
171 CVS_PREFIX
=':pserver:anonymous@';;
173 CVS_PREFIX
="$CVS_USER${CVS_USER+@}";;
175 echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
180 '') CVS_RSH
=ssh; export CVS_RSH
;;
183 trap cleanup_gnulib
1 2 13 15
185 cvs
-z3 -q -d ${CVS_PREFIX}cvs.savannah.gnu.org
:/cvsroot
/gnulib co gnulib ||
193 gnulib_tool
=$GNULIB_SRCDIR/gnulib-tool
194 <$gnulib_tool ||
exit
202 case $WGET_COMMAND in
204 echo "$0: wget not available; skipping translations";;
206 echo "$0: getting translations into $subdir for $domain..." &&
208 (cd $subdir && rm -f dummy
`ls | sed -n '/\.gmo$/p; /\.po/p'`) &&
209 $WGET_COMMAND -O "$subdir/$domain.html" "$TP_URL$domain" &&
211 sed -n 's|.*"http://[^"]*/translation/teams/PO/\([^/"]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\1.\2|p' <"$subdir/$domain.html" |
212 sort -k 1,1 -k 2,2n
-k2,2 -k3,3n
-k3,3 -k4,4n
-k4,4 -k5,5n
-k5.5 |
214 { if (lang && $1 != lang) print lang, ver }
215 { lang = $1; ver = substr($0, index($0, ".") + 1) }
216 END { if (lang) print lang, ver }
217 ' |
awk -v domain
="$domain" -v subdir
="$subdir" '
222 printf "{ $WGET_COMMAND -O %s/%s.po '\'"$TP_PO_URL"'/%s/%s-%s.%s.po'\'' &&\n", subdir, lang, lang, domain, ver, lang
223 printf " msgfmt -c -o /dev/null %s/%s.po || {\n", subdir, lang
224 printf " echo >&2 '\'"$0"': omitting translation for %s'\''\n", lang
225 printf " rm -f %s/%s.po; }; } &&\n", subdir, lang
228 ' | WGET_COMMAND
="$WGET_COMMAND" sh
;;
230 ls "$subdir"/*.po
2>/dev
/null |
231 sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" &&
232 rm -f "$subdir/$domain.html"
237 case `wget --help` in
239 WGET_COMMAND
='wget -nv --no-cache';;
241 WGET_COMMAND
='wget -nv --cache=off';;
243 WGET_COMMAND
='wget -nv';;
248 get_translations po
$package ||
exit
250 if test -d runtime-po
; then
251 get_translations runtime-po
$package-runtime ||
exit
257 src
=$GNULIB_SRCDIR/$1
263 test ! -h "$dst" ||
{
264 echo "$0: rm -f $dst" &&
269 cmp -s "$src" "$dst" ||
{
270 echo "$0: cp -fp $src $dst" &&
275 src_ls
=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i
=$1 &&
276 dst_ls
=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i
=$1 &&
277 test "$src_i" = "$dst_i" ||
{
283 *//* |
*/..
/* |
*/.
/* |
/*/*/*/*/*/)
284 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
286 /*/*/*/*/) dot_dots
=..
/..
/..
/;;
287 /*/*/*/) dot_dots
=..
/..
/;;
288 /*/*/) dot_dots
=..
/;;
292 echo "$0: ln -fs $dot_dots$src $dst" &&
293 ln -fs "$dot_dots$src" "$dst"
299 cp_mark_as_generated
()
304 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
305 symlink_to_gnulib
"$cp_dst"
308 *.
[ch
]) c1
='/* '; c2
=' */';;
309 *.texi
) c1
='@c '; c2
= ;;
310 *.
m4|
*/Make
*|Make
*) c1
='# ' ; c2
= ;;
314 if test -z "$c1"; then
315 cmp -s "$cp_src" "$cp_dst" ||
{
316 echo "$0: cp -f $cp_src $cp_dst" &&
317 cp -f "$cp_src" "$cp_dst"
320 # Copy the file first to get proper permissions if it
321 # doesn't already exist. Then overwrite the copy.
322 cp "$cp_src" "$cp_dst-t" &&
324 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
325 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
328 if cmp -s "$cp_dst-t" "$cp_dst"; then
331 echo "$0: cp $cp_src $cp_dst # with edits" &&
332 mv -f "$cp_dst-t" "$cp_dst"
338 version_controlled_file
() {
343 grep -F "/$file/" $dir/CVS
/Entries
2>/dev
/null |
344 grep '^/[^/]*/[0-9]' > /dev
/null
&& found
=yes
345 elif test -d .git
; then
346 git-rm
-n "$dir/$file" > /dev
/null
2>&1 && found
=yes
348 echo "$0: no version control for $dir/$file?" >&2
354 for dir
in .
`(cd $1 && find * -type d -print)`; do
357 for file in `ls $1/$dir`; do
358 test -d $1/$dir/$file && continue
359 for excluded_file
in $excluded_files; do
360 test "$dir/$file" = "$excluded_file" && continue 2
362 if test $file = Makefile.am
; then
363 copied
=$copied${sep}gnulib.mk
; sep
=$nl
364 remove_intl
='/^[^#].*\/intl/s/^/#/'
365 sed "$remove_intl" $1/$dir/$file |
cmp -s - $dir/gnulib.mk ||
{
366 echo "$0: Copying $1/$dir/$file to $dir/gnulib.mk ..." &&
367 rm -f $dir/gnulib.mk
&&
368 sed "$remove_intl" $1/$dir/$file >$dir/gnulib.mk
370 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
371 version_controlled_file
$dir $file; then
372 echo "$0: $dir/$file overrides $1/$dir/$file"
374 copied
=$copied$sep$file; sep
=$nl
375 if test $file = gettext.
m4; then
376 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
379 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
380 AC_DEFUN([AM_INTL_SUBDIR], [
381 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
382 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
384 AC_DEFUN([gl_LOCK_EARLY], [])
385 ' $1/$dir/$file >$dir/$file
387 cp_mark_as_generated
$1/$dir/$file $dir/$file
393 if test -n "$copied" && test -f $ig; then
394 echo "$copied" |
sort -u - $ig |
cmp -s - $ig ||
395 echo "$copied" |
sort -u - $ig -o $ig ||
exit
401 # Create boot temporary directories to import from gnulib and gettext.
406 mkdir
$bt $bt2 ||
exit
408 # Import from gnulib.
410 gnulib_tool_options
="\
413 --aux-dir $bt/build-aux\
417 --source-base $bt/lib/\
418 --tests-base $bt/tests\
421 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
422 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
425 for file in $gnulib_files; do
426 symlink_to_gnulib
$file ||
exit
430 # Import from gettext.
432 echo "$0: (cd $bt2; autopoint) ..."
433 cp configure.ac
$bt2 &&
434 (cd $bt2 && autopoint
&& rm configure.ac
) &&
435 slurp
$bt2 $bt ||
exit
437 rm -fr $bt $bt2 ||
exit
440 # Reconfigure, getting other files.
443 'aclocal --force -I m4' \
445 'autoheader --force' \
446 'automake --add-missing --copy --force-missing';
448 echo "$0: $command ..."
453 # Get some extra files from gnulib, overriding existing files.
455 for file in $gnulib_extra_files; do
457 */INSTALL
) dst
=INSTALL
;;
460 symlink_to_gnulib
$file $dst ||
exit
464 # Create gettext configuration.
465 echo "$0: Creating po/Makevars from po/Makevars.template ..."
468 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
469 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
470 /^XGETTEXT_OPTIONS *=/{
473 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
475 ' po
/Makevars.template
>po
/Makevars
477 if test -d runtime-po
; then
478 # Similarly for runtime-po/Makevars, but not quite the same.
479 rm -f runtime-po
/Makevars
481 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
482 /^subdir *=.*/s/=.*/= runtime-po/
483 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
484 /^XGETTEXT_OPTIONS *=/{
487 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
489 ' <po
/Makevars.template
>runtime-po
/Makevars
491 # Copy identical files from po to runtime-po.
492 (cd po
&& cp -p Makefile.
in.
in *-quot *.header
*.
sed *.sin ..
/runtime-po
)
495 echo "$0: done. Now you can run './configure'."