3 # Bootstrap this package from CVS.
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 3, 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 and Sergey Poznyakoff.
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 --paxutils-srcdir=DIRNAME Specify the local directory where paxutils
39 sources reside. Use this if you already
40 have paxutils sources on your machine, and
41 do not want to waste your bandwidth dowloading
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 dowloading
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 --update-po[=LANG] Update po file(s) and exit.
53 --cvs-user=USERNAME Set the CVS username to be used when accessing
54 the paxutils repository.
56 If the file bootstrap.conf exists in the current working directory, its
57 contents are read as shell variables to configure the bootstrap.
59 Local defaults can be provided by placing the file \`.bootstrap' in the
60 current working directory. The file is read after bootstrap.conf, comments
61 and empty lines are removed, shell variables expanded and the result is
62 prepended to the command line options.
64 Running without arguments will suffice in most cases.
70 echo "$0: getting $1 files..."
74 case ${CVS_AUTH-pserver} in
76 CVS_PREFIX
=':pserver:anonymous@';;
78 CVS_PREFIX
="$CVS_USER${CVS_USER+@}";;
80 echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
85 '') CVS_RSH
=ssh; export CVS_RSH
;;
88 CVSURL
=${CVS_PREFIX}cvs.savannah.gnu.org
:/cvsroot
/"$1"
92 CVSURL
=:pserver
:anonymous@pserver.git.sv.gnu.org
:/gnulib.git
97 trap "cleanup $1" 1 2 13 15
99 cvs
-z3 -q -d $CVSURL co
$1 || cleanup
$1
113 # List of gnulib modules needed.
116 # Any gnulib files needed that are not in modules.
119 # Translation Project URL, for the registry of all projects
120 # and for the translation-team master directory.
122 echo "http://translationproject.org/domain/$1.html"
125 extract_package_name
='
136 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
141 package
=`sed -n "$extract_package_name" configure.ac` ||
exit
143 # Extra files from gnulib, which override files from other sources.
145 build-aux/announce-gen
149 build-aux/texinfo.tex
151 build-aux/config.guess
156 # Other locale categories that need message catalogs.
157 EXTRA_LOCALE_CATEGORIES
=
159 # Additional xgettext options to use. Use "\\\newline" to break lines.
160 XGETTEXT_OPTIONS
='\\\
161 --flag=_:1:pass-c-format\\\
162 --flag=N_:1:pass-c-format\\\
163 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
166 # Files we don't want to import.
169 # File that should exist in the top directory of a checked out hierarchy,
170 # but not in a distribution tarball.
171 CVS_only_file
=README-cvs
173 # Whether to use copies instead of symlinks.
176 # Override the default configuration, if necessary.
177 test -r bootstrap.conf
&& . .
/bootstrap.conf
179 # Read local configuration file
180 if [ -r .bootstrap
]; then
181 echo "$0: Reading configuration file .bootstrap"
182 eval set -- "`sed 's/#.*$//;/^$/d' .bootstrap | tr '\n' ' '` $*"
185 # Translate configuration into internal form.
196 PAXUTILS_SRCDIR
=`expr "$option" : '--paxutils-srcdir=\(.*\)'`;;
198 GNULIB_SRCDIR
=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
200 CVS_USER
=`expr "$option" : '--cvs-user=\(.*\)'`;;
201 --skip-po |
--no-po) # --no-po is for compatibility with 'tar' tradition.
204 DOWNLOAD_PO
=`expr "$option" : '--update-po=\(.*\)'`;;
212 echo >&2 "$0: $option: unknown option"
217 if test -n "$CVS_only_file" && test ! -r "$CVS_only_file"; then
218 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
222 echo "$0: Bootstrapping CVS $package..."
231 case $WGET_COMMAND in
233 echo "$0: wget not available; skipping translations";;
236 baseurl
=`expr "$url" : '\(.*\)/.*'`
237 echo "$0: getting translations into $subdir for $domain..." &&
239 '') (cd $subdir && rm -f dummy
`ls | sed -n '/\.gmo$/p; /\.po/p'`);;
242 $WGET_COMMAND -O "$subdir/$domain.html" "$url" &&
244 sed -n 's|.*href="\(.*\)/\([^/][^/]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\2:\3:\1|p' <"$subdir/$domain.html" |
245 sort -t: -k 1,1 -k 2,2n
-k2,2 -k3,3n
-k3,3 -k4,4n
-k4,4 -k5,5n
-k5.5 |
247 { if (lang && $1 != lang) print lang, ver, $3 }
248 { lang = $1; ver = $2 }
249 END { if (lang) print lang, ver, $3 }
250 ' |
awk -v domain
="$domain" -v baseurl
="$baseurl" -v subdir
="$subdir" \
251 -v po_file
="$po_file" '
254 if (po_file && po_file != (lang ".po")) next
256 printf "{ $WGET_COMMAND -O %s/%s.po %s/%s/%s/%s-%s.%s.po &&\n", subdir, lang, baseurl, $3, lang, domain, ver, lang
257 printf " msgfmt -c -o /dev/null %s/%s.po || {\n", subdir, lang
258 printf " echo >&2 '\'"$0"': omitting translation for %s'\''\n", lang
259 printf " rm -f %s/%s.po; }; } &&\n", subdir, lang
262 ' | WGET_COMMAND
="$WGET_COMMAND" sh
265 ls "$subdir"/*.po
2>/dev
/null |
266 sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" &&
267 rm -f "$subdir/$domain.html"
270 case `wget --help` in
272 WGET_COMMAND
='wget -nv --no-cache';;
274 WGET_COMMAND
='wget -nv --cache=off';;
276 WGET_COMMAND
='wget -nv';;
285 get_translations po
$package ||
exit
288 get_translations po
$package
292 get_translations po
$package "$DOWNLOAD_PO"
296 get_translations po
$package "${DOWNLOAD_PO}.po"
300 # Get paxutils files.
302 case ${PAXUTILS_SRCDIR--} in
304 PAXUTILS_SRCDIR
=paxutils
307 if [ -r $PAXUTILS_SRCDIR/gnulib.modules
]; then
309 (echo "$gnulib_modules"; grep '^[^#]' $PAXUTILS_SRCDIR/gnulib.modules) |
316 test -n "$ignore_file_list" && rm -f $ignore_file_list
319 trap 'cleanup_ifl' 1 2 3 15
321 # ignorefile DIR FILE
322 # add FILE to the temporary ignorelist in the directory DIR
326 if `echo $ignore_list | grep -qv $file`; then
327 ignore_file_list
="$ignore_file_list
332 # copy_files srcdir dstdir
334 for file in `cat $1/DISTFILES`
339 dst
=`echo $file | sed 's^.*/^^'`
340 if [ $# -eq 3 ]; then
346 echo "$0: Copying file $1/$file to $2/$dst"
347 cp -p $1/$file $2/$dst
354 case ${GNULIB_SRCDIR--} in
360 gnulib_tool
=$GNULIB_SRCDIR/gnulib-tool
361 <$gnulib_tool ||
exit
366 test -d "$d" || mkdir
-p -- "$d"
371 src
=$GNULIB_SRCDIR/$1
377 test ! -h "$dst" ||
{
378 echo "$0: rm -f $dst" &&
383 cmp -s "$src" "$dst" ||
{
384 echo "$0: cp -fp $src $dst" &&
385 ensure_dir_exists
$dst &&
390 src_ls
=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i
=$1 &&
391 dst_ls
=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i
=$1 &&
392 test "$src_i" = "$dst_i" ||
{
398 *//* |
*/..
/* |
*/.
/* |
/*/*/*/*/*/)
399 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
401 /*/*/*/*/) dot_dots
=..
/..
/..
/;;
402 /*/*/*/) dot_dots
=..
/..
/;;
403 /*/*/) dot_dots
=..
/;;
407 echo "$0: ln -fs $dot_dots$src $dst" &&
408 ensure_dir_exists
$dst &&
409 ln -fs "$dot_dots$src" "$dst"
415 cp_mark_as_generated
()
420 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
421 symlink_to_gnulib
"$cp_dst"
424 *.
[ch
]) c1
='/* '; c2
=' */';;
425 *.texi
) c1
='@c '; c2
= ;;
426 *.
m4|
*/Make
*|Make
*) c1
='# ' ; c2
= ;;
430 if test -z "$c1"; then
431 cmp -s "$cp_src" "$cp_dst" ||
{
432 echo "$0: cp -f $cp_src $cp_dst" &&
433 cp -f "$cp_src" "$cp_dst"
436 # Copy the file first to get proper permissions if it
437 # doesn't already exist. Then overwrite the copy.
438 cp "$cp_src" "$cp_dst-t" &&
440 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
441 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
444 if cmp -s "$cp_dst-t" "$cp_dst"; then
447 echo "$0: cp $cp_src $cp_dst # with edits" &&
448 mv -f "$cp_dst-t" "$cp_dst"
454 version_controlled_file
() {
459 grep -F "/$file/" $dir/CVS
/Entries
2>/dev
/null |
460 grep '^/[^/]*/[0-9]' > /dev
/null
&& found
=yes
461 elif test -d .git
; then
462 git-rm
-n "$dir/$file" > /dev
/null
2>&1 && found
=yes
464 echo "$0: no version control for $dir/$file?" >&2
470 for dir
in .
`(cd $1 && find * -type d -print)`; do
473 for file in `ls $1/$dir`; do
474 test -d $1/$dir/$file && continue
475 for excluded_file
in $excluded_files; do
476 test "$dir/$file" = "$excluded_file" && continue 2
478 if test $file = Makefile.am
; then
479 copied
=$copied${sep}gnulib.mk
; sep
=$nl
480 remove_intl
='/^[^#].*\/intl/s/^/#/;'"s,/$bt,,g"
481 sed "$remove_intl" $1/$dir/$file |
cmp -s - $dir/gnulib.mk ||
{
482 echo "$0: Copying $1/$dir/$file to $dir/gnulib.mk ..." &&
483 rm -f $dir/gnulib.mk
&&
484 sed "$remove_intl" $1/$dir/$file >$dir/gnulib.mk
486 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
487 version_controlled_file
$dir $file; then
488 echo "$0: $dir/$file overrides $1/$dir/$file"
490 copied
=$copied$sep$file; sep
=$nl
491 if test $file = gettext.
m4; then
492 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
495 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
496 AC_DEFUN([AM_INTL_SUBDIR], [
497 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
498 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
500 AC_DEFUN([gl_LOCK_EARLY], [])
501 ' $1/$dir/$file >$dir/$file
503 cp_mark_as_generated
$1/$dir/$file $dir/$file
508 if test -n "$copied"; then
519 if [ -f $dir/.ignore.$$
]; then
520 tfile
=$dir/.ignore.$$
525 echo "$copied" |
sort -u - $ig |
cmp -s - $ig ||
526 echo "$copied" |
sort -u - $ig $tfile -o $ig
530 if [ "$dir" = "po" ]; then
542 echo "$copied" |
sort -u - $tfile -o $ig
549 # Create boot temporary directories to import from gnulib and gettext.
554 mkdir
$bt $bt2 ||
exit
556 # Import from gnulib.
558 test -d build-aux ||
{
559 echo "$0: mkdir build-aux ..." &&
562 gnulib_tool_options
="\
565 --aux-dir $bt/build-aux\
569 --source-base $bt/lib/\
570 --tests-base $bt/tests\
573 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
574 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
577 for file in $gnulib_files; do
578 symlink_to_gnulib
$file ||
exit
582 # Import from gettext.
584 echo "$0: (cd $bt2; autopoint) ..."
585 cp configure.ac
$bt2 &&
586 (cd $bt2 && autopoint
&& rm configure.ac
) &&
587 slurp
$bt2 $bt ||
exit
589 rm -fr $bt $bt2 ||
exit
591 # Import from paxutils
592 copy_files
${PAXUTILS_SRCDIR}/m4 m4
593 echo "$0: Creating m4/paxutils.m4"
594 (echo "# This file is generated automatically. Please, do not edit."
596 echo "AC_DEFUN([${package}_PAXUTILS],["
597 cat ${PAXUTILS_SRCDIR}/m
4/DISTFILES |
sed '/^#/d;s/\(.*\)\.m4/pu_\1/' |
tr a-z A-Z
598 echo "])") > .
/m
4/paxutils.
m4
599 ignorefile
m4 paxutils.
m4
607 for dir
in doc rmt lib tests
609 copy_files
${PAXUTILS_SRCDIR}/$dir $dir
612 copy_files
${PAXUTILS_SRCDIR}/paxlib lib pax
614 # Reconfigure, getting other files.
617 'aclocal --force -I m4' \
619 'autoheader --force' \
620 'automake --add-missing --copy --force-missing';
622 echo "$0: $command ..."
627 # Get some extra files from gnulib, overriding existing files.
629 for file in $gnulib_extra_files; do
631 */INSTALL
) dst
=INSTALL
;;
634 symlink_to_gnulib
$file $dst ||
exit
638 # Create gettext configuration.
639 echo "$0: Creating po/Makevars from po/Makevars.template ..."
642 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
643 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
644 /^XGETTEXT_OPTIONS *=/{
647 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
649 ' po
/Makevars.template
>po
/Makevars
651 if test -d runtime-po
; then
652 # Similarly for runtime-po/Makevars, but not quite the same.
653 rm -f runtime-po
/Makevars
655 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
656 /^subdir *=.*/s/=.*/= runtime-po/
657 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
658 /^XGETTEXT_OPTIONS *=/{
661 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
663 ' <po
/Makevars.template
>runtime-po
/Makevars
665 # Copy identical files from po to runtime-po.
666 (cd po
&& cp -p Makefile.
in.
in *-quot *.header
*.
sed *.sin ..
/runtime-po
)
669 echo "$0: done. Now you can run './configure'."