3 # Bootstrap this package from checked-out sources.
5 # Copyright (C) 2003, 2004, 2005, 2006, 2007 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.
32 # Temporary directory names.
34 bt_regex
=`echo "$bt"| sed 's/\./[.]/g'`
40 Bootstrap this package from the checked-out sources.
43 --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
44 sources reside. Use this if you already
45 have gnulib sources on your machine, and
46 do not want to waste your bandwidth downloading
48 --copy Copy files instead of creating symbolic links.
49 --force Attempt to bootstrap even if the sources seem
50 not to have been checked out.
51 --skip-po Do not download po files.
52 --cvs-user=USERNAME Set the username to use when checking out
53 sources from the gnulib repository.
55 If the file .bootstrap.conf exists in the current working directory, its
56 contents are read as shell variables to configure the bootstrap.
58 Running without arguments will suffice in most cases.
64 # List of gnulib modules needed.
67 # Any gnulib files needed that are not in modules.
70 # Translation Project URL, for the registry of all projects
71 # and for the translation-team master directory.
72 TP_URL
='http://www.iro.umontreal.ca/translation/registry.cgi?domain='
73 TP_PO_URL
='http://www.iro.umontreal.ca/translation/teams/PO/'
75 extract_package_name
='
86 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
91 package
=`sed -n "$extract_package_name" configure.ac` ||
exit
92 gnulib_name
=lib
$package
95 # Extra files from gnulib, which override files from other sources.
100 $build_aux/texinfo.tex
102 $build_aux/config.guess
103 $build_aux/config.sub
107 # Other locale categories that need message catalogs.
108 EXTRA_LOCALE_CATEGORIES
=
110 # Additional xgettext options to use. Use "\\\newline" to break lines.
111 XGETTEXT_OPTIONS
='\\\
112 --flag=_:1:pass-c-format\\\
113 --flag=N_:1:pass-c-format\\\
114 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
117 # Files we don't want to import.
120 # File that should exist in the top directory of a checked out hierarchy,
121 # but not in a distribution tarball.
122 checkout_only_file
=README-hacking
124 # Whether to use copies instead of symlinks.
127 # Override the default configuration, if necessary.
128 test -r bootstrap.conf
&& . .
/bootstrap.conf
130 # Translate configuration into internal form.
141 GNULIB_SRCDIR
=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
143 CVS_USER
=`expr "$option" : '--cvs-user=\(.*\)'`;;
147 checkout_only_file
=;;
151 echo >&2 "$0: $option: unknown option"
156 if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
157 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
161 # If $STR is not already on a line by itself in $FILE, insert it,
162 # sorting the new contents of the file and replacing $FILE with the result.
163 insert_sorted_if_absent
() {
166 echo "$str" |
sort -u - $file |
cmp -s - $file \
167 ||
echo "$str" |
sort -u - $file -o $file \
171 # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
173 grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
174 >/dev
/null
&& found_aux_dir
=yes
175 grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
176 >/dev
/null
&& found_aux_dir
=yes
177 if test $found_aux_dir = no
; then
178 echo "$0: expected line not found in configure.ac. Add the following:" >&2
179 echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2.
182 # If $build_aux doesn't exist, create it now, otherwise some bits
183 # below will malfunction. If creating it, also mark it as ignored.
184 if test ! -d $build_aux; then
186 for ig
in .cvsignore .gitignore
; do
187 test -f $ig && insert_sorted_if_absent
$ig $build_aux
191 echo "$0: Bootstrapping from checked-out $package sources..."
201 case ${GNULIB_SRCDIR--} in
203 if [ ! -d gnulib
]; then
204 echo "$0: getting gnulib files..."
206 case ${CVS_AUTH-pserver} in
208 CVS_PREFIX
=':pserver:anonymous@';;
210 CVS_PREFIX
="$CVS_USER${CVS_USER+@}";;
212 echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
217 '') CVS_RSH
=ssh; export CVS_RSH
;;
220 trap cleanup_gnulib
1 2 13 15
222 cvs
-z3 -q -d ${CVS_PREFIX}cvs.savannah.gnu.org
:/cvsroot
/gnulib co gnulib ||
230 gnulib_tool
=$GNULIB_SRCDIR/gnulib-tool
231 <$gnulib_tool ||
exit
239 case $WGET_COMMAND in
241 echo "$0: wget not available; skipping translations";;
243 echo "$0: getting translations into $subdir for $domain..." &&
245 (cd $subdir && rm -f dummy
`ls | sed -n '/\.gmo$/p; /\.po/p'`) &&
246 $WGET_COMMAND -O "$subdir/$domain.html" "$TP_URL$domain" &&
248 sed -n 's|.*"http://[^"]*/translation/teams/PO/\([^/"]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\1.\2|p' <"$subdir/$domain.html" |
249 sort -k 1,1 -k 2,2n
-k2,2 -k3,3n
-k3,3 -k4,4n
-k4,4 -k5,5n
-k5.5 |
251 { if (lang && $1 != lang) print lang, ver }
252 { lang = $1; ver = substr($0, index($0, ".") + 1) }
253 END { if (lang) print lang, ver }
254 ' |
awk -v domain
="$domain" -v subdir
="$subdir" '
259 printf "{ $WGET_COMMAND -O %s/%s.po '\'"$TP_PO_URL"'/%s/%s-%s.%s.po'\'' &&\n", subdir, lang, lang, domain, ver, lang
260 printf " msgfmt -c -o /dev/null %s/%s.po || {\n", subdir, lang
261 printf " echo >&2 '\'"$0"': omitting translation for %s'\''\n", lang
262 printf " rm -f %s/%s.po; }; } &&\n", subdir, lang
265 ' | WGET_COMMAND
="$WGET_COMMAND" sh
;;
267 ls "$subdir"/*.po
2>/dev
/null |
268 sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" &&
269 rm -f "$subdir/$domain.html"
274 case `wget --help` in
276 WGET_COMMAND
='wget -nv --no-cache';;
278 WGET_COMMAND
='wget -nv --cache=off';;
280 WGET_COMMAND
='wget -nv';;
286 get_translations po
$package ||
exit
289 if test -d runtime-po
; then
290 get_translations runtime-po
$package-runtime ||
exit
296 src
=$GNULIB_SRCDIR/$1
302 test ! -h "$dst" ||
{
303 echo "$0: rm -f $dst" &&
308 cmp -s "$src" "$dst" ||
{
309 echo "$0: cp -fp $src $dst" &&
314 src_ls
=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i
=$1 &&
315 dst_ls
=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i
=$1 &&
316 test "$src_i" = "$dst_i" ||
{
322 *//* |
*/..
/* |
*/.
/* |
/*/*/*/*/*/)
323 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
325 /*/*/*/*/) dot_dots
=..
/..
/..
/;;
326 /*/*/*/) dot_dots
=..
/..
/;;
327 /*/*/) dot_dots
=..
/;;
331 echo "$0: ln -fs $dot_dots$src $dst" &&
332 ln -fs "$dot_dots$src" "$dst"
338 cp_mark_as_generated
()
343 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
344 symlink_to_gnulib
"$cp_dst"
347 *.
[ch
]) c1
='/* '; c2
=' */';;
348 *.texi
) c1
='@c '; c2
= ;;
349 *.
m4|
*/Make
*|Make
*) c1
='# ' ; c2
= ;;
353 if test -z "$c1"; then
354 cmp -s "$cp_src" "$cp_dst" ||
{
355 echo "$0: cp -f $cp_src $cp_dst" &&
357 sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst"
360 # Copy the file first to get proper permissions if it
361 # doesn't already exist. Then overwrite the copy.
362 cp "$cp_src" "$cp_dst-t" &&
364 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
365 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
366 sed "s!$bt_regex/!!g" "$cp_src"
368 if cmp -s "$cp_dst-t" "$cp_dst"; then
371 echo "$0: cp $cp_src $cp_dst # with edits" &&
372 mv -f "$cp_dst-t" "$cp_dst"
378 version_controlled_file
() {
383 grep -F "/$file/" $dir/CVS
/Entries
2>/dev
/null |
384 grep '^/[^/]*/[0-9]' > /dev
/null
&& found
=yes
385 elif test -d .git
; then
386 git-rm
-n "$dir/$file" > /dev
/null
2>&1 && found
=yes
388 echo "$0: no version control for $dir/$file?" >&2
394 for dir
in .
`(cd $1 && find * -type d -print)`; do
397 for file in `ls $1/$dir`; do
398 test -d $1/$dir/$file && continue
399 for excluded_file
in $excluded_files; do
400 test "$dir/$file" = "$excluded_file" && continue 2
402 if test $file = Makefile.am
; then
403 copied
=$copied${sep}gnulib.mk
; sep
=$nl
404 remove_intl
='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
405 sed "$remove_intl" $1/$dir/$file |
cmp -s - $dir/gnulib.mk ||
{
406 echo "$0: Copying $1/$dir/$file to $dir/gnulib.mk ..." &&
407 rm -f $dir/gnulib.mk
&&
408 sed "$remove_intl" $1/$dir/$file >$dir/gnulib.mk
410 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
411 version_controlled_file
$dir $file; then
412 echo "$0: $dir/$file overrides $1/$dir/$file"
414 copied
=$copied$sep$file; sep
=$nl
415 if test $file = gettext.
m4; then
416 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
419 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
420 AC_DEFUN([AM_INTL_SUBDIR], [
421 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
422 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
424 AC_DEFUN([gl_LOCK_EARLY], [])
425 ' $1/$dir/$file >$dir/$file
427 cp_mark_as_generated
$1/$dir/$file $dir/$file
432 for dot_ig
in .cvsignore .gitignore
; do
434 if test -n "$copied" && test -f $ig; then
435 insert_sorted_if_absent
$ig "$copied"
436 # If an ignored file name ends with _.h, then also add
437 # the name with just ".h". Many gnulib headers are generated,
438 # e.g., stdint_.h -> stdint.h, dirent_.h ->..., etc.
439 f
=`echo "$copied"|sed 's/_\.h$/.h/'`
440 insert_sorted_if_absent
$ig "$f"
447 # Create boot temporary directories to import from gnulib and gettext.
449 mkdir
$bt $bt2 ||
exit
451 # Import from gnulib.
453 gnulib_tool_options
="\
456 --aux-dir $bt/$build_aux\
460 --source-base $bt/lib/\
461 --tests-base $bt/tests\
464 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
465 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
468 for file in $gnulib_files; do
469 symlink_to_gnulib
$file ||
exit
473 # Import from gettext.
475 grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac
>/dev
/null || \
478 if test $with_gettext = yes; then
479 echo "$0: (cd $bt2; autopoint) ..."
480 cp configure.ac
$bt2 &&
481 (cd $bt2 && autopoint
&& rm configure.ac
) &&
482 slurp
$bt2 $bt ||
exit
484 rm -fr $bt $bt2 ||
exit
487 # Coreutils is unusual in that it generates some of its test-related
488 # Makefile.am files. That must be done before invoking automake.
490 for tool
in cut
head join pr sort tac tail test tr uniq wc; do
491 m
=tests
/$tool/Makefile.am
493 mam_template
=tests
/Makefile.am.
in
495 sed -n '1,/^##test-files-begin/p' $mam_template > $t
496 echo "x = $tool" >> $t
498 $PERL -I$srcdir -w -- tests
/mk-script
$srcdir --list >> $t
499 sed -n '/^##test-files-end/,$p' $mam_template >> $t
504 # Reconfigure, getting other files.
508 'aclocal --force -I m4' \
510 'autoheader --force' \
511 'automake --add-missing --copy --force-missing';
513 if test "$command" = libtool
; then
514 grep '^[ ]*AM_PROG_LIBTOOL\>' configure.ac
>/dev
/null ||
516 command='libtoolize -c -f'
518 echo "$0: $command ..."
523 # Get some extra files from gnulib, overriding existing files.
525 for file in $gnulib_extra_files; do
527 */INSTALL
) dst
=INSTALL
;;
530 symlink_to_gnulib
$file $dst ||
exit
533 if test $with_gettext = yes; then
534 # Create gettext configuration.
535 echo "$0: Creating po/Makevars from po/Makevars.template ..."
538 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
539 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
540 /^XGETTEXT_OPTIONS *=/{
543 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
545 ' po
/Makevars.template
>po
/Makevars
547 if test -d runtime-po
; then
548 # Similarly for runtime-po/Makevars, but not quite the same.
549 rm -f runtime-po
/Makevars
551 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
552 /^subdir *=.*/s/=.*/= runtime-po/
553 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
554 /^XGETTEXT_OPTIONS *=/{
557 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
559 ' <po
/Makevars.template
>runtime-po
/Makevars
561 # Copy identical files from po to runtime-po.
562 (cd po
&& cp -p Makefile.
in.
in *-quot *.header
*.
sed *.sin ..
/runtime-po
)
566 echo "$0: done. Now you can run './configure'."