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 # Whether to use gettext by default.
104 IMPORT_FROM_GETTEXT
=yes
106 # Additional xgettext options to use. Use "\\\newline" to break lines.
107 XGETTEXT_OPTIONS
='\\\
108 --flag=_:1:pass-c-format\\\
109 --flag=N_:1:pass-c-format\\\
110 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
113 # Files we don't want to import.
116 # File that should exist in the top directory of a checked out hierarchy,
117 # but not in a distribution tarball.
118 CVS_only_file
=README-cvs
120 # Whether to use copies instead of symlinks.
123 # Override the default configuration, if necessary.
124 test -r bootstrap.conf
&& . .
/bootstrap.conf
126 # Translate configuration into internal form.
137 GNULIB_SRCDIR
=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
139 CVS_USER
=`expr "$option" : '--cvs-user=\(.*\)'`;;
147 echo >&2 "$0: $option: unknown option"
152 if test -n "$CVS_only_file" && test ! -r "$CVS_only_file"; then
153 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
157 echo "$0: Bootstrapping CVS $package..."
167 case ${GNULIB_SRCDIR--} in
169 if [ ! -d gnulib
]; then
170 echo "$0: getting gnulib files..."
172 case ${CVS_AUTH-pserver} in
174 CVS_PREFIX
=':pserver:anonymous@';;
176 CVS_PREFIX
="$CVS_USER${CVS_USER+@}";;
178 echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
183 '') CVS_RSH
=ssh; export CVS_RSH
;;
186 trap cleanup_gnulib
1 2 13 15
188 cvs
-z3 -q -d ${CVS_PREFIX}cvs.savannah.gnu.org
:/cvsroot
/gnulib co gnulib ||
196 gnulib_tool
=$GNULIB_SRCDIR/gnulib-tool
197 <$gnulib_tool ||
exit
205 case $WGET_COMMAND in
207 echo "$0: wget not available; skipping translations";;
209 echo "$0: getting translations into $subdir for $domain..." &&
211 (cd $subdir && rm -f dummy
`ls | sed -n '/\.gmo$/p; /\.po/p'`) &&
212 $WGET_COMMAND -O "$subdir/$domain.html" "$TP_URL$domain" &&
214 sed -n 's|.*"http://[^"]*/translation/teams/PO/\([^/"]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\1.\2|p' <"$subdir/$domain.html" |
215 sort -k 1,1 -k 2,2n
-k2,2 -k3,3n
-k3,3 -k4,4n
-k4,4 -k5,5n
-k5.5 |
217 { if (lang && $1 != lang) print lang, ver }
218 { lang = $1; ver = substr($0, index($0, ".") + 1) }
219 END { if (lang) print lang, ver }
220 ' |
awk -v domain
="$domain" -v subdir
="$subdir" '
225 printf "{ $WGET_COMMAND -O %s/%s.po '\'"$TP_PO_URL"'/%s/%s-%s.%s.po'\'' &&\n", subdir, lang, lang, domain, ver, lang
226 printf " msgfmt -c -o /dev/null %s/%s.po || {\n", subdir, lang
227 printf " echo >&2 '\'"$0"': omitting translation for %s'\''\n", lang
228 printf " rm -f %s/%s.po; }; } &&\n", subdir, lang
231 ' | WGET_COMMAND
="$WGET_COMMAND" sh
;;
233 ls "$subdir"/*.po
2>/dev
/null |
234 sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" &&
235 rm -f "$subdir/$domain.html"
240 case `wget --help` in
242 WGET_COMMAND
='wget -nv --no-cache';;
244 WGET_COMMAND
='wget -nv --cache=off';;
246 WGET_COMMAND
='wget -nv';;
252 get_translations po
$package ||
exit
255 if test -d runtime-po
; then
256 get_translations runtime-po
$package-runtime ||
exit
262 src
=$GNULIB_SRCDIR/$1
268 test ! -h "$dst" ||
{
269 echo "$0: rm -f $dst" &&
274 cmp -s "$src" "$dst" ||
{
275 echo "$0: cp -fp $src $dst" &&
280 src_ls
=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i
=$1 &&
281 dst_ls
=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i
=$1 &&
282 test "$src_i" = "$dst_i" ||
{
288 *//* |
*/..
/* |
*/.
/* |
/*/*/*/*/*/)
289 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
291 /*/*/*/*/) dot_dots
=..
/..
/..
/;;
292 /*/*/*/) dot_dots
=..
/..
/;;
293 /*/*/) dot_dots
=..
/;;
297 echo "$0: ln -fs $dot_dots$src $dst" &&
298 ln -fs "$dot_dots$src" "$dst"
304 cp_mark_as_generated
()
309 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
310 symlink_to_gnulib
"$cp_dst"
313 *.
[ch
]) c1
='/* '; c2
=' */';;
314 *.texi
) c1
='@c '; c2
= ;;
315 *.
m4|
*/Make
*|Make
*) c1
='# ' ; c2
= ;;
319 if test -z "$c1"; then
320 cmp -s "$cp_src" "$cp_dst" ||
{
321 echo "$0: cp -f $cp_src $cp_dst" &&
322 cp -f "$cp_src" "$cp_dst"
325 # Copy the file first to get proper permissions if it
326 # doesn't already exist. Then overwrite the copy.
327 cp "$cp_src" "$cp_dst-t" &&
329 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
330 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
333 if cmp -s "$cp_dst-t" "$cp_dst"; then
336 echo "$0: cp $cp_src $cp_dst # with edits" &&
337 mv -f "$cp_dst-t" "$cp_dst"
343 version_controlled_file
() {
348 grep -F "/$file/" $dir/CVS
/Entries
2>/dev
/null |
349 grep '^/[^/]*/[0-9]' > /dev
/null
&& found
=yes
350 elif test -d .git
; then
351 git-rm
-n "$dir/$file" > /dev
/null
2>&1 && found
=yes
353 echo "$0: no version control for $dir/$file?" >&2
359 for dir
in .
`(cd $1 && find * -type d -print)`; do
362 for file in `ls $1/$dir`; do
363 test -d $1/$dir/$file && continue
364 for excluded_file
in $excluded_files; do
365 test "$dir/$file" = "$excluded_file" && continue 2
367 if test $file = Makefile.am
; then
368 copied
=$copied${sep}gnulib.mk
; sep
=$nl
369 remove_intl
='/^[^#].*\/intl/s/^/#/'
370 sed "$remove_intl" $1/$dir/$file |
cmp -s - $dir/gnulib.mk ||
{
371 echo "$0: Copying $1/$dir/$file to $dir/gnulib.mk ..." &&
372 rm -f $dir/gnulib.mk
&&
373 sed "$remove_intl" $1/$dir/$file >$dir/gnulib.mk
375 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
376 version_controlled_file
$dir $file; then
377 echo "$0: $dir/$file overrides $1/$dir/$file"
379 copied
=$copied$sep$file; sep
=$nl
380 if test $file = gettext.
m4; then
381 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
384 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
385 AC_DEFUN([AM_INTL_SUBDIR], [
386 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
387 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
389 AC_DEFUN([gl_LOCK_EARLY], [])
390 ' $1/$dir/$file >$dir/$file
392 cp_mark_as_generated
$1/$dir/$file $dir/$file
397 for dot_ig
in .cvsignore .gitignore
; do
399 if test -n "$copied" && test -f $ig; then
400 echo "$copied" |
sort -u - $ig |
cmp -s - $ig ||
401 echo "$copied" |
sort -u - $ig -o $ig ||
exit
408 # Create boot temporary directories to import from gnulib and gettext.
413 mkdir
$bt $bt2 ||
exit
416 # Import from gnulib.
418 gnulib_tool_options
="\
421 --aux-dir $bt/build-aux\
425 --source-base $bt/lib/\
426 --tests-base $bt/tests\
429 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
430 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
433 for file in $gnulib_files; do
434 symlink_to_gnulib
$file ||
exit
438 # Import from gettext.
440 case $IMPORT_FROM_GETTEXT in
442 echo "$0: (cd $bt2; autopoint) ..."
443 cp configure.ac
$bt2 &&
444 (cd $bt2 && autopoint
&& rm configure.ac
) &&
445 slurp
$bt2 $bt ||
exit
447 rm -fr $bt $bt2 ||
exit;;
451 # Reconfigure, getting other files.
454 'aclocal --force -I m4' \
456 'autoheader --force' \
457 'automake --add-missing --copy --force-missing';
459 echo "$0: $command ..."
464 # Get some extra files from gnulib, overriding existing files.
466 for file in $gnulib_extra_files; do
468 */INSTALL
) dst
=INSTALL
;;
471 dstdir
=`dirname $dst` ||
exit
472 test -d $dstdir || mkdir
-p $dstdir ||
exit
473 symlink_to_gnulib
$file $dst ||
exit
477 # Create gettext configuration.
479 echo "$0: Creating po/Makevars from po/Makevars.template ..."
482 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
483 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
484 /^XGETTEXT_OPTIONS *=/{
487 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
489 ' po
/Makevars.template
>po
/Makevars
492 if test -d runtime-po
; then
493 # Likewise for runtime-po/Makevars, except also change a few other parameters.
494 rm -f runtime-po
/Makevars
496 s/^\(DOMAIN\) *=.*/\1 = '"$package"'-runtime/
497 s/^\(subdir\) *=.*/\1 = runtime-po/
498 s/^\(XGETTEXT_OPTIONS\) *=.*/\1 = '"$XGETTEXT_OPTIONS_RUNTIME"'/
499 ' <po
/Makevars
>runtime-po
/Makevars
501 # Copy identical files from po to runtime-po.
502 (cd po
&& cp -p Makefile.
in.
in *-quot *.header
*.
sed *.sin ..
/runtime-po
)
505 echo "$0: done. Now you can run './configure'."