]> git.saurik.com Git - bison.git/blame - bootstrap
bootstrap: fix/improve find_tool.
[bison.git] / bootstrap
CommitLineData
01c56de4
AD
1#! /bin/sh
2
bbb44d83 3# Bootstrap this package from checked-out sources.
01c56de4 4
f7e241f4
AD
5# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
6# Free Software Foundation, Inc.
1f65350a 7
f16b0819 8# This program is free software: you can redistribute it and/or modify
1f65350a 9# it under the terms of the GNU General Public License as published by
f16b0819
PE
10# the Free Software Foundation, either version 3 of the License, or
11# (at your option) any later version.
6d8e724d 12
1f65350a
PE
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
6d8e724d 17
1f65350a 18# You should have received a copy of the GNU General Public License
f16b0819 19# along with this program. If not, see <http://www.gnu.org/licenses/>.
1f65350a
PE
20
21# Written by Paul Eggert.
22
3b2942e6
PE
23nl='
24'
5a2baae7 25
62a9592d 26# Ensure file names are sorted consistently across platforms.
b5240ba5 27# Also, ensure diagnostics are in English, e.g., "wget --help" below.
a9f027b9
PE
28LC_ALL=C
29export LC_ALL
30
6d8e724d
PE
31local_gl_dir=gl
32
bbb44d83
PE
33# Temporary directory names.
34bt='._bootmp'
35bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
36bt2=${bt}2
37
e3ddc1e3 38usage() {
78f65418 39 cat <<EOF
e3ddc1e3 40Usage: $0 [OPTION]...
10f429ef 41Bootstrap this package from the checked-out sources.
e3ddc1e3
PE
42
43Options:
44 --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
d7be4085
AD
45 sources reside. Use this if you already
46 have gnulib sources on your machine, and
47 do not want to waste your bandwidth downloading
48 them again.
46356ea4 49 --copy Copy files instead of creating symbolic links.
10f429ef 50 --force Attempt to bootstrap even if the sources seem
d7be4085 51 not to have been checked out.
e3ddc1e3 52 --skip-po Do not download po files.
bbb44d83 53 --cvs-user=USERNAME Set the username to use when checking out
d7be4085 54 sources from the gnulib repository.
e3ddc1e3 55
6d8e724d 56If the file bootstrap.conf exists in the current working directory, its
e3ddc1e3
PE
57contents are read as shell variables to configure the bootstrap.
58
59Running without arguments will suffice in most cases.
78f65418 60EOF
e3ddc1e3 61}
3b2942e6
PE
62
63# Configuration.
64
6d8e724d
PE
65# Name of the Makefile.am
66gnulib_mk=gnulib.mk
67
3b2942e6
PE
68# List of gnulib modules needed.
69gnulib_modules=
70
71# Any gnulib files needed that are not in modules.
72gnulib_files=
73
6d8e724d
PE
74# The command to download all .po files for a specified domain into
75# a specified directory. Fill in the first %s is the domain name, and
76# the second with the destination directory. Use rsync's -L and -r
77# options because the latest/%s directory and the .po files within are
78# all symlinks.
79po_download_command_format=\
80"rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'"
3b2942e6
PE
81
82extract_package_name='
83 /^AC_INIT(/{
84 /.*,.*,.*,/{
85 s///
86 s/[][]//g
87 p
88 q
89 }
90 s/AC_INIT(\[*//
91 s/]*,.*//
92 s/^GNU //
93 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
94 s/[^A-Za-z0-9_]/-/g
95 p
96 }
97'
98package=`sed -n "$extract_package_name" configure.ac` || exit
bbb44d83 99gnulib_name=lib$package
3b2942e6 100
bbb44d83 101build_aux=build-aux
3b2942e6 102# Extra files from gnulib, which override files from other sources.
bbb44d83
PE
103gnulib_extra_files="
104 $build_aux/install-sh
105 $build_aux/missing
106 $build_aux/mdate-sh
107 $build_aux/texinfo.tex
108 $build_aux/depcomp
109 $build_aux/config.guess
110 $build_aux/config.sub
3b2942e6 111 doc/INSTALL
bbb44d83 112"
3b2942e6 113
6d8e724d
PE
114# Additional gnulib-tool options to use. Use "\newline" to break lines.
115gnulib_tool_option_extras=
116
3b2942e6
PE
117# Other locale categories that need message catalogs.
118EXTRA_LOCALE_CATEGORIES=
119
120# Additional xgettext options to use. Use "\\\newline" to break lines.
121XGETTEXT_OPTIONS='\\\
122 --flag=_:1:pass-c-format\\\
123 --flag=N_:1:pass-c-format\\\
124 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
125'
126
127# Files we don't want to import.
128excluded_files=
129
10f429ef
PE
130# File that should exist in the top directory of a checked out hierarchy,
131# but not in a distribution tarball.
f7e241f4 132checkout_only_file=HACKING
e3ddc1e3 133
46356ea4
PE
134# Whether to use copies instead of symlinks.
135copy=false
136
6d8e724d
PE
137# Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
138# those files to be generated in directories like lib/, m4/, and po/.
139# Or set it to 'auto' to make this script select which to use based
140# on which version control system (if any) is used in the source directory.
141vc_ignore=auto
142
d7be4085
AD
143# find_tool ENVVAR NAMES...
144# -------------------------
1deef26d
AD
145# Look for some needed program. Use the value of the ENVVAR if set,
146# otherwise look for the first of the NAMES that can be run (i.e.,
147# supports --version). If found, set ENVVAR to the program name,
148# die otherwise.
d7be4085
AD
149find_tool ()
150{
1deef26d 151 # Find sha1sum, named gsha1sum on MacPorts.
d7be4085
AD
152 find_tool_envvar=$1
153 shift
1deef26d
AD
154 find_tool_names=$@
155 eval "find_tool_res=\$$find_tool_envvar"
156 if test x"$find_tool_res" = x; then
d7be4085
AD
157 for i
158 do
159 if ($i --version </dev/null) >/dev/null 2>&1; then
1deef26d
AD
160 find_tool_res=$i
161 break
d7be4085
AD
162 fi
163 done
1deef26d
AD
164 else
165 find_tool_error_prefix="\$$find_tool_envvar: "
d7be4085
AD
166 fi
167 if test x"$find_tool_res" = x; then
070e6509 168 echo >&2 "$0: one of these is required: $find_tool_names"
d7be4085
AD
169 exit 1
170 fi
171 ($find_tool_res --version </dev/null) >/dev/null 2>&1 || {
1deef26d 172 echo >&2 "$0: ${find_tool_error_prefix}cannot run $find_tool_res --version"
d7be4085
AD
173 exit 1
174 }
1deef26d 175 eval "$find_tool_envvar=\$find_tool_res"
d7be4085
AD
176 eval "export $find_tool_envvar"
177}
178
179# Find sha1sum, named gsha1sum on MacPorts.
180find_tool SHA1SUM sha1sum gsha1sum
181
3b2942e6
PE
182# Override the default configuration, if necessary.
183test -r bootstrap.conf && . ./bootstrap.conf
184
6d8e724d
PE
185if test "$vc_ignore" = auto; then
186 vc_ignore=
187 test -d .git && vc_ignore=.gitignore
188 test -d CVS && vc_ignore="$vc_ignore .cvsignore"
189fi
190
3b2942e6
PE
191# Translate configuration into internal form.
192
1f65350a
PE
193# Parse options.
194
195for option
196do
197 case $option in
198 --help)
e3ddc1e3 199 usage
1f65350a
PE
200 exit;;
201 --gnulib-srcdir=*)
e23d0dd7 202 GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
1f65350a 203 --cvs-user=*)
e23d0dd7 204 CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
1f65350a
PE
205 --skip-po)
206 SKIP_PO=t;;
e3ddc1e3 207 --force)
bbb44d83 208 checkout_only_file=;;
46356ea4
PE
209 --copy)
210 copy=true;;
1f65350a
PE
211 *)
212 echo >&2 "$0: $option: unknown option"
213 exit 1;;
214 esac
215done
216
bbb44d83 217if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
10f429ef 218 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
e3ddc1e3
PE
219 exit 1
220fi
221
9aacab9a 222# If each line in $STR is not already on a line by itself in $FILE, insert it,
bbb44d83
PE
223# sorting the new contents of the file and replacing $FILE with the result.
224insert_sorted_if_absent() {
225 file=$1
226 str=$2
6d8e724d 227 test -f $file || touch $file
bbb44d83
PE
228 echo "$str" | sort -u - $file | cmp -s - $file \
229 || echo "$str" | sort -u - $file -o $file \
230 || exit 1
231}
232
9aacab9a
JD
233# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
234# insert_sorted_if_absent.
235insert_vc_ignore() {
236 vc_ignore_file="$1"
237 case $vc_ignore_file in
238 *.gitignore)
239 # A .gitignore entry that does not start with `/' applies recursively to
240 # subdirectories, so prepend `/' to every .gitignore entry.
241 pattern=`echo "$2" | sed s,^,/,`;;
242 *)
243 pattern="$2";;
244 esac
245 insert_sorted_if_absent "$vc_ignore_file" "$pattern"
246}
247
bbb44d83
PE
248# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
249found_aux_dir=no
250grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
251 >/dev/null && found_aux_dir=yes
252grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
253 >/dev/null && found_aux_dir=yes
254if test $found_aux_dir = no; then
255 echo "$0: expected line not found in configure.ac. Add the following:" >&2
6d8e724d
PE
256 echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2
257 exit 1
bbb44d83
PE
258fi
259
260# If $build_aux doesn't exist, create it now, otherwise some bits
261# below will malfunction. If creating it, also mark it as ignored.
262if test ! -d $build_aux; then
263 mkdir $build_aux
6d8e724d
PE
264 for dot_ig in x $vc_ignore; do
265 test $dot_ig = x && continue
9aacab9a 266 insert_vc_ignore $dot_ig $build_aux
bbb44d83
PE
267 done
268fi
269
270echo "$0: Bootstrapping from checked-out $package sources..."
1f65350a 271
e10a80ee
PE
272cleanup_gnulib() {
273 status=$?
274 rm -fr gnulib
275 exit $status
276}
277
fee2ed87
PB
278# See if we can use gnulib's git-merge-changelog merge driver.
279
280if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
281 if git config merge.merge-changelog.driver >/dev/null ; then
282 :
283 elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
284 echo "initializing git-merge-changelog driver"
285 git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
286 git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
287 else
288 echo "consider installing git-merge-changelog from gnulib"
289 fi
290fi
291
1f65350a
PE
292# Get gnulib files.
293
294case ${GNULIB_SRCDIR--} in
295-)
296 if [ ! -d gnulib ]; then
297 echo "$0: getting gnulib files..."
298
26546b42
PE
299 case ${CVS_AUTH-pserver} in
300 pserver)
301 CVS_PREFIX=':pserver:anonymous@';;
1f65350a
PE
302 ssh)
303 CVS_PREFIX="$CVS_USER${CVS_USER+@}";;
304 *)
305 echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
306 exit 1;;
307 esac
308
309 case $CVS_RSH in
3b2942e6 310 '') CVS_RSH=ssh; export CVS_RSH;;
1f65350a
PE
311 esac
312
e10a80ee
PE
313 trap cleanup_gnulib 1 2 13 15
314
1cfe6375 315 cvs -z3 -q -d ${CVS_PREFIX}pserver.git.sv.gnu.org:/gnulib.git co -d gnulib HEAD ||
e10a80ee 316 cleanup_gnulib
1f65350a 317
e10a80ee 318 trap - 1 2 13 15
1f65350a
PE
319 fi
320 GNULIB_SRCDIR=gnulib
321esac
322
284d8a13
PE
323gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
324<$gnulib_tool || exit
1f65350a 325
1f65350a
PE
326# Get translations.
327
6d8e724d 328download_po_files() {
5a2baae7
PE
329 subdir=$1
330 domain=$2
6d8e724d
PE
331 echo "$0: getting translations into $subdir for $domain..."
332 cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
333 eval "$cmd"
334}
5a2baae7 335
6d8e724d
PE
336# Download .po files to $po_dir/.reference and copy only the new
337# or modified ones into $po_dir. Also update $po_dir/LINGUAS.
338update_po_files() {
339 # Directory containing primary .po files.
340 # Overwrite them only when we're sure a .po file is new.
341 po_dir=$1
342 domain=$2
343
344 # Download *.po files into this dir.
345 # Usually contains *.s1 checksum files.
346 ref_po_dir="$po_dir/.reference"
347
348 test -d $ref_po_dir || mkdir $ref_po_dir || return
349 download_po_files $ref_po_dir $domain \
350 && ls "$ref_po_dir"/*.po 2>/dev/null |
351 sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS"
352
353 for po in `cd $ref_po_dir && echo *.po|sed 's/\.po//g'`; do
354 new_po="$ref_po_dir/$po.po"
355 cksum_file="$ref_po_dir/$po.s1"
d7be4085 356 if ! "$SHA1SUM" -c --status "$cksum_file" < "$new_po" > /dev/null; then
6d8e724d 357 echo "updated $po_dir/$po.po..."
d7be4085 358 cp "$new_po" "$po_dir/$po.po" && "$SHA1SUM" < "$new_po" > "$cksum_file"
6d8e724d
PE
359 fi
360 done
5a2baae7
PE
361}
362
1f65350a
PE
363case $SKIP_PO in
364'')
bbb44d83 365 if test -d po; then
6d8e724d 366 update_po_files po $package || exit
bbb44d83 367 fi
f7ab6a50 368
3b2942e6 369 if test -d runtime-po; then
6d8e724d 370 update_po_files runtime-po $package-runtime || exit
3b2942e6 371 fi;;
1f65350a
PE
372esac
373
1cfe6375
JD
374check_dst_dir()
375{
376 dst=$1
377 # If the destination directory doesn't exist, create it.
378 # This is required at least for "lib/uniwidth/cjk.h".
379 dst_dir=`dirname "$dst"`
380 if ! test -d "$dst_dir"; then
381 mkdir -p "$dst_dir"
382
383 # If we've just created a directory like lib/uniwidth,
384 # tell version control system(s) it's ignorable.
385 # FIXME: for now, this does only one level
386 parent=`dirname "$dst_dir"`
387 for dot_ig in x $vc_ignore; do
388 test $dot_ig = x && continue
389 ig=$parent/$dot_ig
9aacab9a 390 insert_vc_ignore $ig `echo "$dst_dir"|sed 's,.*/,,'`
1cfe6375
JD
391 done
392 fi
393}
394
6d8e724d 395symlink_to_dir()
e70f46d1 396{
6d8e724d
PE
397 src=$1/$2
398 dst=${3-$2}
e70f46d1
PE
399
400 test -f "$src" && {
6d8e724d 401
1cfe6375 402 check_dst_dir "$dst"
6d8e724d 403
46356ea4
PE
404 if $copy; then
405 {
406 test ! -h "$dst" || {
407 echo "$0: rm -f $dst" &&
408 rm -f "$dst"
409 }
410 } &&
411 test -f "$dst" &&
412 cmp -s "$src" "$dst" || {
413 echo "$0: cp -fp $src $dst" &&
414 cp -fp "$src" "$dst"
415 }
416 else
417 test -h "$dst" &&
418 src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
419 dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
420 test "$src_i" = "$dst_i" || {
421 dot_dots=
422 case $src in
423 /*) ;;
424 *)
425 case /$dst/ in
426 *//* | */../* | */./* | /*/*/*/*/*/)
427 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
428 exit 1;;
429 /*/*/*/*/) dot_dots=../../../;;
430 /*/*/*/) dot_dots=../../;;
431 /*/*/) dot_dots=../;;
432 esac;;
433 esac
434
435 echo "$0: ln -fs $dot_dots$src $dst" &&
436 ln -fs "$dot_dots$src" "$dst"
437 }
438 fi
e70f46d1
PE
439 }
440}
441
3b2942e6
PE
442cp_mark_as_generated()
443{
444 cp_src=$1
445 cp_dst=$2
1f65350a 446
e70f46d1 447 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
6d8e724d
PE
448 symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
449 elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
450 symlink_to_dir $local_gl_dir "$cp_dst"
e70f46d1
PE
451 else
452 case $cp_dst in
453 *.[ch]) c1='/* '; c2=' */';;
454 *.texi) c1='@c '; c2= ;;
455 *.m4|*/Make*|Make*) c1='# ' ; c2= ;;
456 *) c1= ; c2= ;;
457 esac
1f65350a 458
e70f46d1
PE
459 if test -z "$c1"; then
460 cmp -s "$cp_src" "$cp_dst" || {
461 echo "$0: cp -f $cp_src $cp_dst" &&
bbb44d83
PE
462 rm -f "$cp_dst" &&
463 sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst"
e70f46d1
PE
464 }
465 else
1cfe6375 466 check_dst_dir "$cp_dst"
e70f46d1
PE
467 # Copy the file first to get proper permissions if it
468 # doesn't already exist. Then overwrite the copy.
469 cp "$cp_src" "$cp_dst-t" &&
470 (
471 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
472 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
bbb44d83 473 sed "s!$bt_regex/!!g" "$cp_src"
e70f46d1
PE
474 ) > $cp_dst-t &&
475 if cmp -s "$cp_dst-t" "$cp_dst"; then
476 rm -f "$cp_dst-t"
477 else
478 echo "$0: cp $cp_src $cp_dst # with edits" &&
479 mv -f "$cp_dst-t" "$cp_dst"
480 fi
481 fi
482 fi
3b2942e6 483}
1f65350a 484
10f429ef
PE
485version_controlled_file() {
486 dir=$1
487 file=$2
488 found=no
489 if test -d CVS; then
490 grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
491 grep '^/[^/]*/[0-9]' > /dev/null && found=yes
492 elif test -d .git; then
493 git-rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
494 else
495 echo "$0: no version control for $dir/$file?" >&2
496 fi
497 test $found = yes
498}
499
3b2942e6
PE
500slurp() {
501 for dir in . `(cd $1 && find * -type d -print)`; do
502 copied=
503 sep=
6d8e724d
PE
504 for file in `ls -a $1/$dir`; do
505 case $file in
506 .|..) continue;;
507 .*) continue;; # FIXME: should all file names starting with "." be ignored?
508 esac
509 test -d $1/$dir/$file && continue
3b2942e6
PE
510 for excluded_file in $excluded_files; do
511 test "$dir/$file" = "$excluded_file" && continue 2
512 done
513 if test $file = Makefile.am; then
d7be4085 514 copied=$copied${sep}$gnulib_mk; sep=$nl
bbb44d83 515 remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
feda5527
AD
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
519 etc/prefix-gnulib-mk $dir/$gnulib_mk
e70f46d1 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'."