]> git.saurik.com Git - bison.git/blame_incremental - bootstrap
Fix testsuite for ./configure --enable-gcc-warnings:
[bison.git] / bootstrap
... / ...
CommitLineData
1#! /bin/sh
2
3# Bootstrap this package from CVS.
4
5# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
6
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)
10# any later version.
11
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.
16
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
20# 02110-1301, USA.
21
22# Written by Paul Eggert.
23
24nl='
25'
26
27# Ensure file names are sorted consistently across platforms.
28# Also, ensure diagnostics are in English, e.g., "wget --help" below.
29LC_ALL=C
30export LC_ALL
31
32usage() {
33 echo >&2 "\
34Usage: $0 [OPTION]...
35Bootstrap this package from the CVS sources.
36
37Options:
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
42 them again.
43 --copy Copy files instead of creating symbolic links.
44 --force Bootstrap even if the sources didn't come from CVS.
45 --skip-po Do not download po files.
46 --cvs-user=USERNAME Set the CVS username to be used when accessing
47 the gnulib repository.
48
49If the file .bootstrap.conf exists in the current working directory, its
50contents are read as shell variables to configure the bootstrap.
51
52Running without arguments will suffice in most cases.
53"
54}
55
56# Configuration.
57
58# List of gnulib modules needed.
59gnulib_modules=
60
61# Any gnulib files needed that are not in modules.
62gnulib_files=
63
64# Translation Project URL, for the registry of all projects
65# and for the translation-team master directory.
66TP_URL='http://www.iro.umontreal.ca/translation/registry.cgi?domain='
67TP_PO_URL='http://www.iro.umontreal.ca/translation/teams/PO/'
68
69extract_package_name='
70 /^AC_INIT(/{
71 /.*,.*,.*,/{
72 s///
73 s/[][]//g
74 p
75 q
76 }
77 s/AC_INIT(\[*//
78 s/]*,.*//
79 s/^GNU //
80 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
81 s/[^A-Za-z0-9_]/-/g
82 p
83 }
84'
85package=`sed -n "$extract_package_name" configure.ac` || exit
86
87# Extra files from gnulib, which override files from other sources.
88gnulib_extra_files='
89 build-aux/install-sh
90 build-aux/missing
91 build-aux/mdate-sh
92 build-aux/texinfo.tex
93 build-aux/depcomp
94 build-aux/config.guess
95 build-aux/config.sub
96 doc/INSTALL
97'
98
99# Other locale categories that need message catalogs.
100EXTRA_LOCALE_CATEGORIES=
101
102# Additional xgettext options to use. Use "\\\newline" to break lines.
103XGETTEXT_OPTIONS='\\\
104 --flag=_:1:pass-c-format\\\
105 --flag=N_:1:pass-c-format\\\
106 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
107'
108
109# Files we don't want to import.
110excluded_files=
111
112# File that should exist with CVS checkout, but not with
113# the distributed version.
114CVS_only_file=CVS
115
116# Whether to use copies instead of symlinks.
117copy=false
118
119# Override the default configuration, if necessary.
120test -r bootstrap.conf && . ./bootstrap.conf
121
122# Translate configuration into internal form.
123
124# Parse options.
125
126for option
127do
128 case $option in
129 --help)
130 usage
131 exit;;
132 --gnulib-srcdir=*)
133 GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
134 --cvs-user=*)
135 CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
136 --skip-po)
137 SKIP_PO=t;;
138 --force)
139 CVS_only_file=;;
140 --copy)
141 copy=true;;
142 *)
143 echo >&2 "$0: $option: unknown option"
144 exit 1;;
145 esac
146done
147
148if test -n "$CVS_only_file" && test ! -r "$CVS_only_file"; then
149 echo "$0: Bootstrapping from a non-CVS distribution is a bit risky." >&2
150 exit 1
151fi
152
153echo "$0: Bootstrapping CVS $package..."
154
155cleanup_gnulib() {
156 status=$?
157 rm -fr gnulib
158 exit $status
159}
160
161# Get gnulib files.
162
163case ${GNULIB_SRCDIR--} in
164-)
165 if [ ! -d gnulib ]; then
166 echo "$0: getting gnulib files..."
167
168 case ${CVS_AUTH-pserver} in
169 pserver)
170 CVS_PREFIX=':pserver:anonymous@';;
171 ssh)
172 CVS_PREFIX="$CVS_USER${CVS_USER+@}";;
173 *)
174 echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
175 exit 1;;
176 esac
177
178 case $CVS_RSH in
179 '') CVS_RSH=ssh; export CVS_RSH;;
180 esac
181
182 trap cleanup_gnulib 1 2 13 15
183
184 cvs -z3 -q -d ${CVS_PREFIX}cvs.savannah.gnu.org:/cvsroot/gnulib co gnulib ||
185 cleanup_gnulib
186
187 trap - 1 2 13 15
188 fi
189 GNULIB_SRCDIR=gnulib
190esac
191
192gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
193<$gnulib_tool || exit
194
195# Get translations.
196
197get_translations() {
198 subdir=$1
199 domain=$2
200
201 case $WGET_COMMAND in
202 '')
203 echo "$0: wget not available; skipping translations";;
204 ?*)
205 echo "$0: getting translations into $subdir for $domain..." &&
206
207 (cd $subdir && rm -f dummy `ls | sed -n '/\.gmo$/p; /\.po/p'`) &&
208 $WGET_COMMAND -O "$subdir/$domain.html" "$TP_URL$domain" &&
209
210 sed -n 's|.*"http://[^"]*/translation/teams/PO/\([^/"]*\)/'"$domain"'-\([^/"]*\)\.[^."]*\.po".*|\1.\2|p' <"$subdir/$domain.html" |
211 sort -k 1,1 -k 2,2n -k2,2 -k3,3n -k3,3 -k4,4n -k4,4 -k5,5n -k5.5 |
212 awk -F. '
213 { if (lang && $1 != lang) print lang, ver }
214 { lang = $1; ver = substr($0, index($0, ".") + 1) }
215 END { if (lang) print lang, ver }
216 ' | awk -v domain="$domain" -v subdir="$subdir" '
217 {
218 lang = $1
219 ver = $2
220 urlfmt = ""
221 printf "{ $WGET_COMMAND -O %s/%s.po '\'"$TP_PO_URL"'/%s/%s-%s.%s.po'\'' &&\n", subdir, lang, lang, domain, ver, lang
222 printf " msgfmt -c -o /dev/null %s/%s.po || {\n", subdir, lang
223 printf " echo >&2 '\'"$0"': omitting translation for %s'\''\n", lang
224 printf " rm -f %s/%s.po; }; } &&\n", subdir, lang
225 }
226 END { print ":" }
227 ' | WGET_COMMAND="$WGET_COMMAND" sh;;
228 esac &&
229 ls "$subdir"/*.po 2>/dev/null |
230 sed 's|.*/||; s|\.po$||' >"$subdir/LINGUAS" &&
231 rm -f "$subdir/$domain.html"
232}
233
234case $SKIP_PO in
235'')
236 case `wget --help` in
237 *'--no-cache'*)
238 WGET_COMMAND='wget -nv --no-cache';;
239 *'--cache=on/off'*)
240 WGET_COMMAND='wget -nv --cache=off';;
241 *'--non-verbose'*)
242 WGET_COMMAND='wget -nv';;
243 *)
244 WGET_COMMAND='';;
245 esac
246
247 get_translations po $package || exit
248
249 if test -d runtime-po; then
250 get_translations runtime-po $package-runtime || exit
251 fi;;
252esac
253
254symlink_to_gnulib()
255{
256 src=$GNULIB_SRCDIR/$1
257 dst=${2-$1}
258
259 test -f "$src" && {
260 if $copy; then
261 {
262 test ! -h "$dst" || {
263 echo "$0: rm -f $dst" &&
264 rm -f "$dst"
265 }
266 } &&
267 test -f "$dst" &&
268 cmp -s "$src" "$dst" || {
269 echo "$0: cp -fp $src $dst" &&
270 cp -fp "$src" "$dst"
271 }
272 else
273 test -h "$dst" &&
274 src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
275 dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
276 test "$src_i" = "$dst_i" || {
277 dot_dots=
278 case $src in
279 /*) ;;
280 *)
281 case /$dst/ in
282 *//* | */../* | */./* | /*/*/*/*/*/)
283 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
284 exit 1;;
285 /*/*/*/*/) dot_dots=../../../;;
286 /*/*/*/) dot_dots=../../;;
287 /*/*/) dot_dots=../;;
288 esac;;
289 esac
290
291 echo "$0: ln -fs $dot_dots$src $dst" &&
292 ln -fs "$dot_dots$src" "$dst"
293 }
294 fi
295 }
296}
297
298cp_mark_as_generated()
299{
300 cp_src=$1
301 cp_dst=$2
302
303 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
304 symlink_to_gnulib "$cp_dst"
305 else
306 case $cp_dst in
307 *.[ch]) c1='/* '; c2=' */';;
308 *.texi) c1='@c '; c2= ;;
309 *.m4|*/Make*|Make*) c1='# ' ; c2= ;;
310 *) c1= ; c2= ;;
311 esac
312
313 if test -z "$c1"; then
314 cmp -s "$cp_src" "$cp_dst" || {
315 echo "$0: cp -f $cp_src $cp_dst" &&
316 cp -f "$cp_src" "$cp_dst"
317 }
318 else
319 # Copy the file first to get proper permissions if it
320 # doesn't already exist. Then overwrite the copy.
321 cp "$cp_src" "$cp_dst-t" &&
322 (
323 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
324 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
325 cat "$cp_src"
326 ) > $cp_dst-t &&
327 if cmp -s "$cp_dst-t" "$cp_dst"; then
328 rm -f "$cp_dst-t"
329 else
330 echo "$0: cp $cp_src $cp_dst # with edits" &&
331 mv -f "$cp_dst-t" "$cp_dst"
332 fi
333 fi
334 fi
335}
336
337slurp() {
338 for dir in . `(cd $1 && find * -type d -print)`; do
339 copied=
340 sep=
341 for file in `ls $1/$dir`; do
342 test -d $1/$dir/$file && continue
343 for excluded_file in $excluded_files; do
344 test "$dir/$file" = "$excluded_file" && continue 2
345 done
346 if test $file = Makefile.am; then
347 copied=$copied${sep}gnulib.mk; sep=$nl
348 remove_intl='/^[^#].*\/intl/s/^/#/'
349 sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/gnulib.mk || {
350 echo "$0: Copying $1/$dir/$file to $dir/gnulib.mk ..." &&
351 rm -f $dir/gnulib.mk &&
352 sed "$remove_intl" $1/$dir/$file >$dir/gnulib.mk
353 }
354 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
355 grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
356 grep -q '^/[^/]*/[0-9]'; then
357 echo "$0: $dir/$file overrides $1/$dir/$file"
358 else
359 copied=$copied$sep$file; sep=$nl
360 if test $file = gettext.m4; then
361 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
362 rm -f $dir/$file
363 sed '
364 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
365 AC_DEFUN([AM_INTL_SUBDIR], [
366 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
367 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
368 $a\
369 AC_DEFUN([gl_LOCK_EARLY], [])
370 ' $1/$dir/$file >$dir/$file
371 else
372 cp_mark_as_generated $1/$dir/$file $dir/$file
373 fi
374 fi || exit
375 done
376
377 ig=$dir/.cvsignore
378 if test -n "$copied" && test -f $ig; then
379 echo "$copied" | sort -u - $ig | cmp -s - $ig ||
380 echo "$copied" | sort -u - $ig -o $ig || exit
381 fi
382 done
383}
384
385
386# Create boot temporary directories to import from gnulib and gettext.
387
388bt='.#bootmp'
389bt2=${bt}2
390rm -fr $bt $bt2 &&
391mkdir $bt $bt2 || exit
392
393# Import from gnulib.
394
395gnulib_tool_options="\
396 --import\
397 --no-changelog\
398 --aux-dir $bt/build-aux\
399 --doc-base $bt/doc\
400 --lib lib$package\
401 --m4-base $bt/m4/\
402 --source-base $bt/lib/\
403 --tests-base $bt/tests\
404 --local-dir gl\
405"
406echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
407$gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
408slurp $bt || exit
409
410for file in $gnulib_files; do
411 symlink_to_gnulib $file || exit
412done
413
414
415# Import from gettext.
416
417echo "$0: (cd $bt2; autopoint) ..."
418cp configure.ac $bt2 &&
419(cd $bt2 && autopoint && rm configure.ac) &&
420slurp $bt2 $bt || exit
421
422rm -fr $bt $bt2 || exit
423
424
425# Reconfigure, getting other files.
426
427for command in \
428 'aclocal --force -I m4' \
429 'autoconf --force' \
430 'autoheader --force' \
431 'automake --add-missing --copy --force-missing';
432do
433 echo "$0: $command ..."
434 $command || exit
435done
436
437
438# Get some extra files from gnulib, overriding existing files.
439
440for file in $gnulib_extra_files; do
441 case $file in
442 */INSTALL) dst=INSTALL;;
443 *) dst=$file;;
444 esac
445 symlink_to_gnulib $file $dst || exit
446done
447
448
449# Create gettext configuration.
450echo "$0: Creating po/Makevars from po/Makevars.template ..."
451rm -f po/Makevars
452sed '
453 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
454 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
455 /^XGETTEXT_OPTIONS *=/{
456 s/$/ \\/
457 a\
458 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
459 }
460' po/Makevars.template >po/Makevars
461
462if test -d runtime-po; then
463 # Similarly for runtime-po/Makevars, but not quite the same.
464 rm -f runtime-po/Makevars
465 sed '
466 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
467 /^subdir *=.*/s/=.*/= runtime-po/
468 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
469 /^XGETTEXT_OPTIONS *=/{
470 s/$/ \\/
471 a\
472 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
473 }
474 ' <po/Makevars.template >runtime-po/Makevars
475
476 # Copy identical files from po to runtime-po.
477 (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
478fi
479
480echo "$0: done. Now you can run './configure'."