]>
git.saurik.com Git - bison.git/blob - bootstrap
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 3 of the License, or
10 # (at your option) any later version.
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, see <http://www.gnu.org/licenses/>.
20 # Written by Paul Eggert.
25 # Ensure file names are sorted consistently across platforms.
26 # Also, ensure diagnostics are in English, e.g., "wget --help" below.
30 # Temporary directory names.
32 bt_regex
=`echo "$bt"| sed 's/\./[.]/g'`
38 Bootstrap this package from the checked-out sources.
41 --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
42 sources reside. Use this if you already
43 have gnulib sources on your machine, and
44 do not want to waste your bandwidth downloading
46 --copy Copy files instead of creating symbolic links.
47 --force Attempt to bootstrap even if the sources seem
48 not to have been checked out.
49 --skip-po Do not download po files.
50 --cvs-user=USERNAME Set the username to use when checking out
51 sources from the gnulib repository.
53 If the file .bootstrap.conf exists in the current working directory, its
54 contents are read as shell variables to configure the bootstrap.
56 Running without arguments will suffice in most cases.
62 # List of gnulib modules needed.
65 # Any gnulib files needed that are not in modules.
68 # Translation Project URL, for the registry of all projects
69 # and for the translation-team master directory.
70 TP_URL
='http://www.iro.umontreal.ca/translation/registry.cgi?domain='
71 TP_PO_URL
='http://www.iro.umontreal.ca/translation/teams/PO/'
73 extract_package_name
='
84 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
89 package
=`sed -n "$extract_package_name" configure.ac` || exit
90 gnulib_name
=lib
$package
93 # Extra files from gnulib, which override files from other sources.
98 $build_aux/texinfo.tex
100 $build_aux/config.guess
101 $build_aux/config.sub
105 # Other locale categories that need message catalogs.
106 EXTRA_LOCALE_CATEGORIES
=
108 # Additional xgettext options to use. Use "\\\newline" to break lines.
109 XGETTEXT_OPTIONS
='\\\
110 --flag=_:1:pass-c-format\\\
111 --flag=N_:1:pass-c-format\\\
112 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
115 # Files we don't want to import.
118 # File that should exist in the top directory of a checked out hierarchy,
119 # but not in a distribution tarball.
120 checkout_only_file
=README
-hacking
122 # Whether to use copies instead of symlinks.
125 # Override the default configuration, if necessary.
126 test -r bootstrap.conf
&& . .
/bootstrap.conf
128 # Translate configuration into internal form.
139 GNULIB_SRCDIR
=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
141 CVS_USER
=`expr "$option" : '--cvs-user=\(.*\)'`;;
145 checkout_only_file
=;;
149 echo >&2 "$0: $option: unknown option"
154 if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
155 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
159 # If $STR is not already on a line by itself in $FILE, insert it,
160 # sorting the new contents of the file and replacing $FILE with the result.
161 insert_sorted_if_absent
() {
164 echo "$str" | sort -u - $file | cmp -s - $file \
165 || echo "$str" | sort -u - $file -o $file \
169 # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
171 grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
172 >/dev
/null
&& found_aux_dir
=yes
173 grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
174 >/dev
/null
&& found_aux_dir
=yes
175 if test $found_aux_dir = no
; then
176 echo "$0: expected line not found in configure.ac. Add the following:" >&2
177 echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2.
180 # If $build_aux doesn't exist, create it now, otherwise some bits
181 # below will malfunction. If creating it, also mark it as ignored.
182 if test ! -d $build_aux; then
184 for ig
in .cvsignore .gitignore
; do
185 test -f $ig && insert_sorted_if_absent
$ig $build_aux
189 echo "$0: Bootstrapping from checked-out $package sources..."
199 case ${GNULIB_SRCDIR--} in
201 if [ ! -d gnulib
]; then
202 echo "$0: getting gnulib files..."
204 case ${CVS_AUTH-pserver} in
206 CVS_PREFIX
=':pserver:anonymous@';;
208 CVS_PREFIX
="$CVS_USER${CVS_USER+@}";;
210 echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
215 '') CVS_RSH
=ssh; export CVS_RSH
;;
218 trap cleanup_gnulib
1 2 13 15
220 cvs
-z3 -q -d ${CVS_PREFIX}cvs.savannah.gnu.org
:/cvsroot
/gnulib co gnulib
||
228 gnulib_tool
=$GNULIB_SRCDIR/gnulib
-tool
229 <$gnulib_tool || exit
237 case $WGET_COMMAND in
239 echo "$0: wget not available; skipping translations";;
241 echo "$0: getting translations into $subdir for $domain..." &&
243 (cd $subdir && rm -f dummy
`ls | sed -n '/\.gmo$/p; /\.po/p'`) &&
244 $WGET_COMMAND -O "$subdir/$domain.html" "$TP_URL$domain" &&
246 sed -n 's|.*"http://[^"]*/translation/teams/PO/\([^/"]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\1.\2|p' <"$subdir/$domain.html" |
247 sort -k 1,1 -k 2,2n
-k2,2 -k3,3n
-k3,3 -k4,4n
-k4,4 -k5,5n
-k5.5
|
249 { if (lang && $1 != lang) print lang, ver }
250 { lang = $1; ver = substr($0, index($0, ".") + 1) }
251 END { if (lang) print lang, ver }
252 ' | awk -v domain
="$domain" -v subdir
="$subdir" '
257 printf "{ $WGET_COMMAND -O %s/%s.po '\'"$TP_PO_URL"'/%s/%s-%s.%s.po'\'' &&\n", subdir, lang, lang, domain, ver, lang
258 printf " msgfmt -c -o /dev/null %s/%s.po || {\n", subdir, lang
259 printf " echo >&2 '\'"$0"': omitting translation for %s'\''\n", lang
260 printf " rm -f %s/%s.po; }; } &&\n", subdir, lang
263 ' | 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"
272 case `wget --help` in
274 WGET_COMMAND
='wget -nv --no-cache';;
276 WGET_COMMAND
='wget -nv --cache=off';;
278 WGET_COMMAND
='wget -nv';;
284 get_translations po
$package || exit
287 if test -d runtime
-po; then
288 get_translations runtime
-po $package-runtime || exit
294 src
=$GNULIB_SRCDIR/$1
300 test ! -h "$dst" || {
301 echo "$0: rm -f $dst" &&
306 cmp -s "$src" "$dst" || {
307 echo "$0: cp -fp $src $dst" &&
312 src_ls
=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i
=$1 &&
313 dst_ls
=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i
=$1 &&
314 test "$src_i" = "$dst_i" || {
320 *//* | */..
/* | */.
/* | /*/*/*/*/*/)
321 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
323 /*/*/*/*/) dot_dots
=..
/..
/..
/;;
324 /*/*/*/) dot_dots
=..
/..
/;;
325 /*/*/) dot_dots
=..
/;;
329 echo "$0: ln -fs $dot_dots$src $dst" &&
330 ln -fs "$dot_dots$src" "$dst"
336 cp_mark_as_generated
()
341 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
342 symlink_to_gnulib
"$cp_dst"
345 *.
[ch
]) c1
='/* '; c2
=' */';;
346 *.texi
) c1
='@c '; c2
= ;;
347 *.
m4|*/Make
*|Make
*) c1
='# ' ; c2
= ;;
351 if test -z "$c1"; then
352 cmp -s "$cp_src" "$cp_dst" || {
353 echo "$0: cp -f $cp_src $cp_dst" &&
355 sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst"
358 # Copy the file first to get proper permissions if it
359 # doesn't already exist. Then overwrite the copy.
360 cp "$cp_src" "$cp_dst-t" &&
362 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
363 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
364 sed "s!$bt_regex/!!g" "$cp_src"
366 if cmp -s "$cp_dst-t" "$cp_dst"; then
369 echo "$0: cp $cp_src $cp_dst # with edits" &&
370 mv -f "$cp_dst-t" "$cp_dst"
376 version_controlled_file
() {
381 grep -F "/$file/" $dir/CVS
/Entries
2>/dev
/null
|
382 grep '^/[^/]*/[0-9]' > /dev
/null
&& found
=yes
383 elif test -d .git
; then
384 git
-rm -n "$dir/$file" > /dev
/null
2>&1 && found
=yes
386 echo "$0: no version control for $dir/$file?" >&2
392 for dir
in .
`(cd $1 && find * -type d -print)`; do
395 for file in `ls $1/$dir`; do
396 if test -d $1/$dir/$file; then
397 if test ! -d $dir/$file; then
398 echo "$0: mkdir $dir/$file" && mkdir $dir/$file || exit
402 for excluded_file
in $excluded_files; do
403 test "$dir/$file" = "$excluded_file" && continue 2
405 if test $file = Makefile.am
; then
406 copied
=$copied${sep}gnulib.mk
; sep
=$nl
407 remove_intl
='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
408 sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/gnulib.mk
|| {
409 echo "$0: Copying $1/$dir/$file to $dir/gnulib.mk ..." &&
410 rm -f $dir/gnulib.mk
&&
411 sed "$remove_intl" $1/$dir/$file >$dir/gnulib.mk
413 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
414 version_controlled_file
$dir $file; then
415 echo "$0: $dir/$file overrides $1/$dir/$file"
417 copied
=$copied$sep$file; sep
=$nl
418 if test $file = gettext.
m4; then
419 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
422 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
423 AC_DEFUN([AM_INTL_SUBDIR], [
424 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
425 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
427 AC_DEFUN([gl_LOCK_EARLY], [])
428 ' $1/$dir/$file >$dir/$file
430 cp_mark_as_generated
$1/$dir/$file $dir/$file
435 for dot_ig
in .cvsignore .gitignore
; do
437 if test -n "$copied" && test -f $ig; then
438 insert_sorted_if_absent
$ig "$copied"
439 # If an ignored file name ends with _.h, then also add
440 # the name with just ".h". Many gnulib headers are generated,
441 # e.g., stdint_.h -> stdint.h, dirent_.h ->..., etc.
442 f
=`echo "$copied"|sed 's/_\.h$/.h/'`
443 insert_sorted_if_absent
$ig "$f"
450 # Create boot temporary directories to import from gnulib and gettext.
452 mkdir $bt $bt2 || exit
454 # Import from gnulib.
456 gnulib_tool_options
="\
459 --aux-dir $bt/$build_aux\
463 --source-base $bt/lib/\
464 --tests-base $bt/tests\
467 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
468 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
471 for file in $gnulib_files; do
472 symlink_to_gnulib
$file || exit
476 # Import from gettext.
478 grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac
>/dev
/null
|| \
481 if test $with_gettext = yes; then
482 echo "$0: (cd $bt2; autopoint) ..."
483 cp configure.ac
$bt2 &&
484 (cd $bt2 && autopoint
&& rm configure.ac
) &&
485 slurp
$bt2 $bt || exit
487 rm -fr $bt $bt2 || exit
491 # Reconfigure, getting other files.
495 'aclocal --force -I m4' \
497 'autoheader --force' \
498 'automake --add-missing --copy --force-missing';
500 if test "$command" = libtool
; then
501 grep '^[ ]*AM_PROG_LIBTOOL\>' configure.ac
>/dev
/null
||
503 command='libtoolize -c -f'
505 echo "$0: $command ..."
510 # Get some extra files from gnulib, overriding existing files.
512 for file in $gnulib_extra_files; do
514 */INSTALL
) dst
=INSTALL
;;
517 symlink_to_gnulib
$file $dst || exit
520 if test $with_gettext = yes; then
521 # Create gettext configuration.
522 echo "$0: Creating po/Makevars from po/Makevars.template ..."
525 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
526 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
527 /^XGETTEXT_OPTIONS *=/{
530 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
532 ' po
/Makevars.template
>po
/Makevars
534 if test -d runtime
-po; then
535 # Similarly for runtime-po/Makevars, but not quite the same.
536 rm -f runtime
-po/Makevars
538 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
539 /^subdir *=.*/s/=.*/= runtime-po/
540 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
541 /^XGETTEXT_OPTIONS *=/{
544 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
546 ' <po
/Makevars.template
>runtime
-po/Makevars
548 # Copy identical files from po to runtime-po.
549 (cd po
&& cp -p Makefile.
in.
in *-quot *.header
*.
sed *.sin ..
/runtime
-po)
553 echo "$0: done. Now you can run './configure'."