]> git.saurik.com Git - bison.git/blame - bootstrap
build: require Automake 1.11.1 to avoid a security flaw.
[bison.git] / bootstrap
CommitLineData
01c56de4
AD
1#! /bin/sh
2
bbb44d83 3# Bootstrap this package from checked-out sources.
01c56de4 4
219c26ea 5# Copyright (C) 2003-2010 Free Software Foundation, Inc.
1f65350a 6
f16b0819 7# This program is free software: you can redistribute it and/or modify
1f65350a 8# it under the terms of the GNU General Public License as published by
f16b0819
PE
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
6d8e724d 11
1f65350a
PE
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.
6d8e724d 16
1f65350a 17# You should have received a copy of the GNU General Public License
f16b0819 18# along with this program. If not, see <http://www.gnu.org/licenses/>.
1f65350a
PE
19
20# Written by Paul Eggert.
21
3b2942e6
PE
22nl='
23'
5a2baae7 24
62a9592d 25# Ensure file names are sorted consistently across platforms.
b5240ba5 26# Also, ensure diagnostics are in English, e.g., "wget --help" below.
a9f027b9
PE
27LC_ALL=C
28export LC_ALL
29
6d8e724d
PE
30local_gl_dir=gl
31
bbb44d83
PE
32# Temporary directory names.
33bt='._bootmp'
34bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
35bt2=${bt}2
36
e3ddc1e3 37usage() {
c1455bab 38 cat <<EOF
e3ddc1e3 39Usage: $0 [OPTION]...
10f429ef 40Bootstrap this package from the checked-out sources.
e3ddc1e3
PE
41
42Options:
43 --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
d7be4085
AD
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
47 them again.
46356ea4 48 --copy Copy files instead of creating symbolic links.
10f429ef 49 --force Attempt to bootstrap even if the sources seem
d7be4085 50 not to have been checked out.
e3ddc1e3 51 --skip-po Do not download po files.
bbb44d83 52 --cvs-user=USERNAME Set the username to use when checking out
d7be4085 53 sources from the gnulib repository.
e3ddc1e3 54
6d8e724d 55If the file bootstrap.conf exists in the current working directory, its
e3ddc1e3
PE
56contents are read as shell variables to configure the bootstrap.
57
58Running without arguments will suffice in most cases.
c1455bab 59EOF
e3ddc1e3 60}
3b2942e6
PE
61
62# Configuration.
63
6d8e724d
PE
64# Name of the Makefile.am
65gnulib_mk=gnulib.mk
66
3b2942e6
PE
67# List of gnulib modules needed.
68gnulib_modules=
69
70# Any gnulib files needed that are not in modules.
71gnulib_files=
72
6d8e724d
PE
73# The command to download all .po files for a specified domain into
74# a specified directory. Fill in the first %s is the domain name, and
75# the second with the destination directory. Use rsync's -L and -r
76# options because the latest/%s directory and the .po files within are
77# all symlinks.
78po_download_command_format=\
79"rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'"
3b2942e6
PE
80
81extract_package_name='
82 /^AC_INIT(/{
83 /.*,.*,.*,/{
84 s///
85 s/[][]//g
86 p
87 q
88 }
89 s/AC_INIT(\[*//
90 s/]*,.*//
91 s/^GNU //
92 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
93 s/[^A-Za-z0-9_]/-/g
94 p
95 }
96'
97package=`sed -n "$extract_package_name" configure.ac` || exit
bbb44d83 98gnulib_name=lib$package
3b2942e6 99
bbb44d83 100build_aux=build-aux
3b2942e6 101# Extra files from gnulib, which override files from other sources.
bbb44d83
PE
102gnulib_extra_files="
103 $build_aux/install-sh
104 $build_aux/missing
105 $build_aux/mdate-sh
106 $build_aux/texinfo.tex
107 $build_aux/depcomp
108 $build_aux/config.guess
109 $build_aux/config.sub
3b2942e6 110 doc/INSTALL
bbb44d83 111"
3b2942e6 112
6d8e724d
PE
113# Additional gnulib-tool options to use. Use "\newline" to break lines.
114gnulib_tool_option_extras=
115
3b2942e6
PE
116# Other locale categories that need message catalogs.
117EXTRA_LOCALE_CATEGORIES=
118
119# Additional xgettext options to use. Use "\\\newline" to break lines.
120XGETTEXT_OPTIONS='\\\
121 --flag=_:1:pass-c-format\\\
122 --flag=N_:1:pass-c-format\\\
123 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
124'
125
126# Files we don't want to import.
127excluded_files=
128
10f429ef
PE
129# File that should exist in the top directory of a checked out hierarchy,
130# but not in a distribution tarball.
2075a82a 131checkout_only_file=HACKING
e3ddc1e3 132
46356ea4
PE
133# Whether to use copies instead of symlinks.
134copy=false
135
6d8e724d
PE
136# Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
137# those files to be generated in directories like lib/, m4/, and po/.
138# Or set it to 'auto' to make this script select which to use based
139# on which version control system (if any) is used in the source directory.
140vc_ignore=auto
141
d7be4085
AD
142# find_tool ENVVAR NAMES...
143# -------------------------
397bb393
AD
144# Look for some needed program. Use the value of the ENVVAR if set,
145# otherwise look for the first of the NAMES that can be run (i.e.,
146# supports --version). If found, set ENVVAR to the program name,
147# die otherwise.
d7be4085
AD
148find_tool ()
149{
150 # Find sha1sum, named gsha1sum on MacPorts.
151 find_tool_envvar=$1
152 shift
397bb393
AD
153 find_tool_names=$@
154 eval "find_tool_res=\$$find_tool_envvar"
155 if test x"$find_tool_res" = x; then
d7be4085
AD
156 for i
157 do
158 if ($i --version </dev/null) >/dev/null 2>&1; then
397bb393
AD
159 find_tool_res=$i
160 break
d7be4085
AD
161 fi
162 done
397bb393
AD
163 else
164 find_tool_error_prefix="\$$find_tool_envvar: "
d7be4085
AD
165 fi
166 if test x"$find_tool_res" = x; then
397bb393 167 echo >&2 "$0: one of these is required: $find_tool_names"
d7be4085
AD
168 exit 1
169 fi
170 ($find_tool_res --version </dev/null) >/dev/null 2>&1 || {
397bb393 171 echo >&2 "$0: ${find_tool_error_prefix}cannot run $find_tool_res --version"
d7be4085
AD
172 exit 1
173 }
397bb393 174 eval "$find_tool_envvar=\$find_tool_res"
d7be4085
AD
175 eval "export $find_tool_envvar"
176}
177
178# Find sha1sum, named gsha1sum on MacPorts.
179find_tool SHA1SUM sha1sum gsha1sum
180
3b2942e6
PE
181# Override the default configuration, if necessary.
182test -r bootstrap.conf && . ./bootstrap.conf
183
6d8e724d
PE
184if test "$vc_ignore" = auto; then
185 vc_ignore=
186 test -d .git && vc_ignore=.gitignore
187 test -d CVS && vc_ignore="$vc_ignore .cvsignore"
188fi
189
3b2942e6
PE
190# Translate configuration into internal form.
191
1f65350a
PE
192# Parse options.
193
194for option
195do
196 case $option in
197 --help)
e3ddc1e3 198 usage
1f65350a
PE
199 exit;;
200 --gnulib-srcdir=*)
e23d0dd7 201 GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
1f65350a 202 --cvs-user=*)
e23d0dd7 203 CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
1f65350a
PE
204 --skip-po)
205 SKIP_PO=t;;
e3ddc1e3 206 --force)
bbb44d83 207 checkout_only_file=;;
46356ea4
PE
208 --copy)
209 copy=true;;
1f65350a
PE
210 *)
211 echo >&2 "$0: $option: unknown option"
212 exit 1;;
213 esac
214done
215
bbb44d83 216if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
10f429ef 217 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
e3ddc1e3
PE
218 exit 1
219fi
220
9aacab9a 221# If each line in $STR is not already on a line by itself in $FILE, insert it,
bbb44d83
PE
222# sorting the new contents of the file and replacing $FILE with the result.
223insert_sorted_if_absent() {
224 file=$1
225 str=$2
6d8e724d 226 test -f $file || touch $file
bbb44d83
PE
227 echo "$str" | sort -u - $file | cmp -s - $file \
228 || echo "$str" | sort -u - $file -o $file \
229 || exit 1
230}
231
9aacab9a
JD
232# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
233# insert_sorted_if_absent.
234insert_vc_ignore() {
235 vc_ignore_file="$1"
236 case $vc_ignore_file in
237 *.gitignore)
238 # A .gitignore entry that does not start with `/' applies recursively to
239 # subdirectories, so prepend `/' to every .gitignore entry.
240 pattern=`echo "$2" | sed s,^,/,`;;
241 *)
242 pattern="$2";;
243 esac
244 insert_sorted_if_absent "$vc_ignore_file" "$pattern"
245}
246
bbb44d83
PE
247# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
248found_aux_dir=no
249grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
250 >/dev/null && found_aux_dir=yes
251grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
252 >/dev/null && found_aux_dir=yes
253if test $found_aux_dir = no; then
254 echo "$0: expected line not found in configure.ac. Add the following:" >&2
6d8e724d
PE
255 echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2
256 exit 1
bbb44d83
PE
257fi
258
259# If $build_aux doesn't exist, create it now, otherwise some bits
260# below will malfunction. If creating it, also mark it as ignored.
261if test ! -d $build_aux; then
262 mkdir $build_aux
6d8e724d
PE
263 for dot_ig in x $vc_ignore; do
264 test $dot_ig = x && continue
9aacab9a 265 insert_vc_ignore $dot_ig $build_aux
bbb44d83
PE
266 done
267fi
268
269echo "$0: Bootstrapping from checked-out $package sources..."
1f65350a 270
e10a80ee
PE
271cleanup_gnulib() {
272 status=$?
273 rm -fr gnulib
274 exit $status
275}
276
fee2ed87
PB
277# See if we can use gnulib's git-merge-changelog merge driver.
278
279if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
280 if git config merge.merge-changelog.driver >/dev/null ; then
281 :
282 elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
283 echo "initializing git-merge-changelog driver"
284 git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
285 git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
286 else
287 echo "consider installing git-merge-changelog from gnulib"
288 fi
289fi
290
1f65350a
PE
291# Get gnulib files.
292
293case ${GNULIB_SRCDIR--} in
294-)
295 if [ ! -d gnulib ]; then
296 echo "$0: getting gnulib files..."
297
26546b42
PE
298 case ${CVS_AUTH-pserver} in
299 pserver)
300 CVS_PREFIX=':pserver:anonymous@';;
1f65350a
PE
301 ssh)
302 CVS_PREFIX="$CVS_USER${CVS_USER+@}";;
303 *)
304 echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
305 exit 1;;
306 esac
307
308 case $CVS_RSH in
3b2942e6 309 '') CVS_RSH=ssh; export CVS_RSH;;
1f65350a
PE
310 esac
311
e10a80ee
PE
312 trap cleanup_gnulib 1 2 13 15
313
1cfe6375 314 cvs -z3 -q -d ${CVS_PREFIX}pserver.git.sv.gnu.org:/gnulib.git co -d gnulib HEAD ||
e10a80ee 315 cleanup_gnulib
1f65350a 316
e10a80ee 317 trap - 1 2 13 15
1f65350a
PE
318 fi
319 GNULIB_SRCDIR=gnulib
320esac
321
284d8a13
PE
322gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
323<$gnulib_tool || exit
1f65350a 324
1f65350a
PE
325# Get translations.
326
6d8e724d 327download_po_files() {
5a2baae7
PE
328 subdir=$1
329 domain=$2
6d8e724d
PE
330 echo "$0: getting translations into $subdir for $domain..."
331 cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
332 eval "$cmd"
333}
5a2baae7 334
6d8e724d
PE
335# Download .po files to $po_dir/.reference and copy only the new
336# or modified ones into $po_dir. Also update $po_dir/LINGUAS.
337update_po_files() {
338 # Directory containing primary .po files.
339 # Overwrite them only when we're sure a .po file is new.
340 po_dir=$1
341 domain=$2
342
343 # Download *.po files into this dir.
344 # Usually contains *.s1 checksum files.
345 ref_po_dir="$po_dir/.reference"
346
347 test -d $ref_po_dir || mkdir $ref_po_dir || return
348 download_po_files $ref_po_dir $domain \
349 && ls "$ref_po_dir"/*.po 2>/dev/null |
350 sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS"
351
352 for po in `cd $ref_po_dir && echo *.po|sed 's/\.po//g'`; do
353 new_po="$ref_po_dir/$po.po"
354 cksum_file="$ref_po_dir/$po.s1"
d7be4085 355 if ! "$SHA1SUM" -c --status "$cksum_file" < "$new_po" > /dev/null; then
6d8e724d 356 echo "updated $po_dir/$po.po..."
d7be4085 357 cp "$new_po" "$po_dir/$po.po" && "$SHA1SUM" < "$new_po" > "$cksum_file"
6d8e724d
PE
358 fi
359 done
5a2baae7
PE
360}
361
1f65350a
PE
362case $SKIP_PO in
363'')
bbb44d83 364 if test -d po; then
6d8e724d 365 update_po_files po $package || exit
bbb44d83 366 fi
f7ab6a50 367
3b2942e6 368 if test -d runtime-po; then
6d8e724d 369 update_po_files runtime-po $package-runtime || exit
3b2942e6 370 fi;;
1f65350a
PE
371esac
372
1cfe6375
JD
373check_dst_dir()
374{
375 dst=$1
376 # If the destination directory doesn't exist, create it.
377 # This is required at least for "lib/uniwidth/cjk.h".
378 dst_dir=`dirname "$dst"`
379 if ! test -d "$dst_dir"; then
380 mkdir -p "$dst_dir"
381
382 # If we've just created a directory like lib/uniwidth,
383 # tell version control system(s) it's ignorable.
384 # FIXME: for now, this does only one level
385 parent=`dirname "$dst_dir"`
386 for dot_ig in x $vc_ignore; do
387 test $dot_ig = x && continue
388 ig=$parent/$dot_ig
9aacab9a 389 insert_vc_ignore $ig `echo "$dst_dir"|sed 's,.*/,,'`
1cfe6375
JD
390 done
391 fi
392}
393
6d8e724d 394symlink_to_dir()
e70f46d1 395{
6d8e724d
PE
396 src=$1/$2
397 dst=${3-$2}
e70f46d1
PE
398
399 test -f "$src" && {
6d8e724d 400
1cfe6375 401 check_dst_dir "$dst"
6d8e724d 402
46356ea4
PE
403 if $copy; then
404 {
405 test ! -h "$dst" || {
406 echo "$0: rm -f $dst" &&
407 rm -f "$dst"
408 }
409 } &&
410 test -f "$dst" &&
411 cmp -s "$src" "$dst" || {
412 echo "$0: cp -fp $src $dst" &&
413 cp -fp "$src" "$dst"
414 }
415 else
416 test -h "$dst" &&
417 src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
418 dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
419 test "$src_i" = "$dst_i" || {
420 dot_dots=
421 case $src in
422 /*) ;;
423 *)
424 case /$dst/ in
425 *//* | */../* | */./* | /*/*/*/*/*/)
426 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
427 exit 1;;
428 /*/*/*/*/) dot_dots=../../../;;
429 /*/*/*/) dot_dots=../../;;
430 /*/*/) dot_dots=../;;
431 esac;;
432 esac
433
434 echo "$0: ln -fs $dot_dots$src $dst" &&
435 ln -fs "$dot_dots$src" "$dst"
436 }
437 fi
e70f46d1
PE
438 }
439}
440
3b2942e6
PE
441cp_mark_as_generated()
442{
443 cp_src=$1
444 cp_dst=$2
1f65350a 445
e70f46d1 446 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
6d8e724d
PE
447 symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
448 elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
449 symlink_to_dir $local_gl_dir "$cp_dst"
e70f46d1
PE
450 else
451 case $cp_dst in
452 *.[ch]) c1='/* '; c2=' */';;
453 *.texi) c1='@c '; c2= ;;
454 *.m4|*/Make*|Make*) c1='# ' ; c2= ;;
455 *) c1= ; c2= ;;
456 esac
1f65350a 457
e70f46d1
PE
458 if test -z "$c1"; then
459 cmp -s "$cp_src" "$cp_dst" || {
460 echo "$0: cp -f $cp_src $cp_dst" &&
bbb44d83
PE
461 rm -f "$cp_dst" &&
462 sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst"
e70f46d1
PE
463 }
464 else
1cfe6375 465 check_dst_dir "$cp_dst"
e70f46d1
PE
466 # Copy the file first to get proper permissions if it
467 # doesn't already exist. Then overwrite the copy.
468 cp "$cp_src" "$cp_dst-t" &&
469 (
470 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
471 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
bbb44d83 472 sed "s!$bt_regex/!!g" "$cp_src"
e70f46d1
PE
473 ) > $cp_dst-t &&
474 if cmp -s "$cp_dst-t" "$cp_dst"; then
475 rm -f "$cp_dst-t"
476 else
477 echo "$0: cp $cp_src $cp_dst # with edits" &&
478 mv -f "$cp_dst-t" "$cp_dst"
479 fi
480 fi
481 fi
3b2942e6 482}
1f65350a 483
10f429ef
PE
484version_controlled_file() {
485 dir=$1
486 file=$2
487 found=no
488 if test -d CVS; then
489 grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
490 grep '^/[^/]*/[0-9]' > /dev/null && found=yes
491 elif test -d .git; then
492 git-rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
493 else
494 echo "$0: no version control for $dir/$file?" >&2
495 fi
496 test $found = yes
497}
498
3b2942e6
PE
499slurp() {
500 for dir in . `(cd $1 && find * -type d -print)`; do
501 copied=
502 sep=
6d8e724d
PE
503 for file in `ls -a $1/$dir`; do
504 case $file in
505 .|..) continue;;
506 .*) continue;; # FIXME: should all file names starting with "." be ignored?
507 esac
508 test -d $1/$dir/$file && continue
3b2942e6
PE
509 for excluded_file in $excluded_files; do
510 test "$dir/$file" = "$excluded_file" && continue 2
511 done
512 if test $file = Makefile.am; then
d7be4085 513 copied=$copied${sep}$gnulib_mk; sep=$nl
bbb44d83 514 remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
d7be4085 515 sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/$gnulib_mk || {
6d8e724d
PE
516 echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
517 rm -f $dir/$gnulib_mk &&
518 sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
e70f46d1
PE
519 }
520 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
10f429ef 521 version_controlled_file $dir $file; then
3b2942e6
PE
522 echo "$0: $dir/$file overrides $1/$dir/$file"
523 else
524 copied=$copied$sep$file; sep=$nl
525 if test $file = gettext.m4; then
526 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
527 rm -f $dir/$file
528 sed '
529 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
530 AC_DEFUN([AM_INTL_SUBDIR], [
531 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
532 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
533 $a\
534 AC_DEFUN([gl_LOCK_EARLY], [])
535 ' $1/$dir/$file >$dir/$file
536 else
3b2942e6
PE
537 cp_mark_as_generated $1/$dir/$file $dir/$file
538 fi
539 fi || exit
540 done
541
6d8e724d
PE
542 for dot_ig in x $vc_ignore; do
543 test $dot_ig = x && continue
5691bf57 544 ig=$dir/$dot_ig
6d8e724d 545 if test -n "$copied"; then
9aacab9a 546 insert_vc_ignore $ig "$copied"
bbb44d83
PE
547 # If an ignored file name ends with _.h, then also add
548 # the name with just ".h". Many gnulib headers are generated,
549 # e.g., stdint_.h -> stdint.h, dirent_.h ->..., etc.
6d8e724d
PE
550 # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
551 f=`echo "$copied"|sed 's/_\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'`
9aacab9a 552 insert_vc_ignore $ig "$f"
6d8e724d
PE
553
554 # For files like sys_stat_.h and sys_time_.h, record as
555 # ignorable the directory we might eventually create: sys/.
556 f=`echo "$copied"|sed 's/sys_.*_\.h$/sys/'`
9aacab9a 557 insert_vc_ignore $ig "$f"
5691bf57
PE
558 fi
559 done
3b2942e6
PE
560 done
561}
1f65350a
PE
562
563
3b2942e6 564# Create boot temporary directories to import from gnulib and gettext.
3b2942e6
PE
565rm -fr $bt $bt2 &&
566mkdir $bt $bt2 || exit
567
568# Import from gnulib.
569
570gnulib_tool_options="\
571 --import\
572 --no-changelog\
bbb44d83 573 --aux-dir $bt/$build_aux\
3b2942e6 574 --doc-base $bt/doc\
bbb44d83 575 --lib $gnulib_name\
3b2942e6
PE
576 --m4-base $bt/m4/\
577 --source-base $bt/lib/\
578 --tests-base $bt/tests\
6d8e724d
PE
579 --local-dir $local_gl_dir\
580$gnulib_tool_option_extras\
3b2942e6
PE
581"
582echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
583$gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
584slurp $bt || exit
585
586for file in $gnulib_files; do
6d8e724d 587 symlink_to_dir "$GNULIB_SRCDIR" $file || exit
3b2942e6 588done
1f65350a 589
e23d0dd7 590
3b2942e6 591# Import from gettext.
bbb44d83
PE
592with_gettext=yes
593grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
594 with_gettext=no
62a9592d 595
bbb44d83
PE
596if test $with_gettext = yes; then
597 echo "$0: (cd $bt2; autopoint) ..."
598 cp configure.ac $bt2 &&
599 (cd $bt2 && autopoint && rm configure.ac) &&
600 slurp $bt2 $bt || exit
b4068c7c 601
bbb44d83
PE
602 rm -fr $bt $bt2 || exit
603fi
3b2942e6 604
6d8e724d
PE
605# Coreutils is unusual in that it generates some of its test-related
606# Makefile.am files. That must be done before invoking automake.
607mam_template=tests/Makefile.am.in
608if test -f $mam_template; then
609 PERL=perl
610 for tool in cut head join pr sort tac tail test tr uniq wc; do
611 m=tests/$tool/Makefile.am
612 t=${m}t
613 rm -f $m $t
614 sed -n '1,/^##test-files-begin/p' $mam_template > $t
615 echo "x = $tool" >> $t
616 srcdir=tests/$tool
617 $PERL -I$srcdir -w -- tests/mk-script $srcdir --list >> $t
618 sed -n '/^##test-files-end/,$p' $mam_template >> $t
619 chmod -w $t
620 mv $t $m
621 done
622fi
3b2942e6
PE
623
624# Reconfigure, getting other files.
62a9592d
PE
625
626for command in \
bbb44d83 627 libtool \
62a9592d
PE
628 'aclocal --force -I m4' \
629 'autoconf --force' \
630 'autoheader --force' \
631 'automake --add-missing --copy --force-missing';
632do
bbb44d83
PE
633 if test "$command" = libtool; then
634 grep '^[ ]*AM_PROG_LIBTOOL\>' configure.ac >/dev/null ||
635 continue
636 command='libtoolize -c -f'
637 fi
62a9592d
PE
638 echo "$0: $command ..."
639 $command || exit
640done
641
642
3b2942e6 643# Get some extra files from gnulib, overriding existing files.
3b2942e6 644for file in $gnulib_extra_files; do
3b2942e6 645 case $file in
e70f46d1 646 */INSTALL) dst=INSTALL;;
6d8e724d 647 build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
e70f46d1 648 *) dst=$file;;
3b2942e6 649 esac
6d8e724d 650 symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
3b2942e6
PE
651done
652
bbb44d83
PE
653if test $with_gettext = yes; then
654 # Create gettext configuration.
655 echo "$0: Creating po/Makevars from po/Makevars.template ..."
656 rm -f po/Makevars
3b2942e6 657 sed '
bbb44d83
PE
658 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
659 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
660 /^XGETTEXT_OPTIONS *=/{
661 s/$/ \\/
662 a\
663 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
664 }
665 ' po/Makevars.template >po/Makevars
3b2942e6 666
bbb44d83
PE
667 if test -d runtime-po; then
668 # Similarly for runtime-po/Makevars, but not quite the same.
669 rm -f runtime-po/Makevars
670 sed '
671 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
672 /^subdir *=.*/s/=.*/= runtime-po/
673 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
674 /^XGETTEXT_OPTIONS *=/{
675 s/$/ \\/
676 a\
677 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
678 }
679 ' <po/Makevars.template >runtime-po/Makevars
680
681 # Copy identical files from po to runtime-po.
682 (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
683 fi
3b2942e6 684fi
1f65350a
PE
685
686echo "$0: done. Now you can run './configure'."