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 no_dep
=no-dependencies
330 remove_no_dep
="/^AUTOMAKE_OPTIONS =.* $no_dep/s/ $no_dep//"
331 sed_xform
="$remove_intl;$remove_no_dep"
332 sed "$sed_xform" $1/$dir/$file |
cmp -s - $dir/gnulib.mk ||
{
333 echo "$0: Copying $1/$dir/$file to $dir/gnulib.mk ..." &&
334 rm -f $dir/gnulib.mk
&&
335 sed "$sed_xform" $1/$dir/$file >$dir/gnulib.mk
337 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
338 grep -F "/$file/" $dir/CVS
/Entries
2>/dev
/null |
339 grep -q '^/[^/]*/[0-9]'; then
340 echo "$0: $dir/$file overrides $1/$dir/$file"
342 copied
=$copied$sep$file; sep
=$nl
343 if test $file = gettext.
m4; then
344 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
347 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
348 AC_DEFUN([AM_INTL_SUBDIR], [
349 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
350 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
352 AC_DEFUN([gl_LOCK_EARLY], [])
353 ' $1/$dir/$file >$dir/$file
355 cp_mark_as_generated
$1/$dir/$file $dir/$file
361 if test -n "$copied" && test -f $ig; then
362 echo "$copied" |
sort -u - $ig |
cmp -s - $ig ||
363 echo "$copied" |
sort -u - $ig -o $ig ||
exit
369 # Create boot temporary directories to import from gnulib and gettext.
374 mkdir
$bt $bt2 ||
exit
376 # Import from gnulib.
378 gnulib_tool_options
="\
381 --aux-dir $bt/build-aux\
385 --source-base $bt/lib/\
386 --tests-base $bt/tests\
389 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
390 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
393 for file in $gnulib_files; do
394 symlink_to_gnulib
$file ||
exit
398 # Import from gettext.
400 echo "$0: (cd $bt2; autopoint) ..."
401 cp configure.ac
$bt2 &&
402 (cd $bt2 && autopoint
&& rm configure.ac
) &&
403 slurp
$bt2 $bt ||
exit
405 rm -fr $bt $bt2 ||
exit
408 # Reconfigure, getting other files.
411 'aclocal --force -I m4' \
413 'autoheader --force' \
414 'automake --add-missing --copy --force-missing';
416 echo "$0: $command ..."
421 # Get some extra files from gnulib, overriding existing files.
423 for file in $gnulib_extra_files; do
425 */INSTALL
) dst
=INSTALL
;;
428 symlink_to_gnulib
$file $dst ||
exit
432 # Create gettext configuration.
433 echo "$0: Creating po/Makevars from po/Makevars.template ..."
436 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
437 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
438 /^XGETTEXT_OPTIONS *=/{
441 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
443 ' po
/Makevars.template
>po
/Makevars
445 if test -d runtime-po
; then
446 # Likewise for runtime-po/Makevars, except also change a few other parameters.
447 rm -f runtime-po
/Makevars
449 s/^\(DOMAIN\) *=.*/\1 = '"$package"'-runtime/
450 s/^\(subdir\) *=.*/\1 = runtime-po/
451 s/^\(XGETTEXT_OPTIONS\) *=.*/\1 = '"$XGETTEXT_OPTIONS_RUNTIME"'/
452 ' <po
/Makevars
>runtime-po
/Makevars
454 # Copy identical files from po to runtime-po.
455 (cd po
&& cp -p Makefile.
in.
in *-quot *.header
*.
sed *.sin ..
/runtime-po
)
458 echo "$0: done. Now you can run './configure'."