]> git.saurik.com Git - bison.git/blame - bootstrap
* HACKING (Release Procedure): Recommend a secure automake.
[bison.git] / bootstrap
CommitLineData
01c56de4
AD
1#! /bin/sh
2
bbb44d83 3# Bootstrap this package from checked-out sources.
01c56de4 4
2075a82a
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() {
c1455bab 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.
c1455bab 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.
2075a82a 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# -------------------------
397bb393
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{
151 # Find sha1sum, named gsha1sum on MacPorts.
152 find_tool_envvar=$1
153 shift
397bb393
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
397bb393
AD
160 find_tool_res=$i
161 break
d7be4085
AD
162 fi
163 done
397bb393
AD
164 else
165 find_tool_error_prefix="\$$find_tool_envvar: "
d7be4085
AD
166 fi
167 if test x"$find_tool_res" = x; then
397bb393 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 || {
397bb393 172 echo >&2 "$0: ${find_tool_error_prefix}cannot run $find_tool_res --version"
d7be4085
AD
173 exit 1
174 }
397bb393 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"
d7be4085 516 sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/$gnulib_mk || {
6d8e724d
PE
517 echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
518 rm -f $dir/$gnulib_mk &&
519 sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
e70f46d1
PE
520 }
521 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
10f429ef 522 version_controlled_file $dir $file; then
3b2942e6
PE
523 echo "$0: $dir/$file overrides $1/$dir/$file"
524 else
525 copied=$copied$sep$file; sep=$nl
526 if test $file = gettext.m4; then
527 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
528 rm -f $dir/$file
529 sed '
530 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
531 AC_DEFUN([AM_INTL_SUBDIR], [
532 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
533 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
534 $a\
535 AC_DEFUN([gl_LOCK_EARLY], [])
536 ' $1/$dir/$file >$dir/$file
537 else
3b2942e6
PE
538 cp_mark_as_generated $1/$dir/$file $dir/$file
539 fi
540 fi || exit
541 done
542
6d8e724d
PE
543 for dot_ig in x $vc_ignore; do
544 test $dot_ig = x && continue
5691bf57 545 ig=$dir/$dot_ig
6d8e724d 546 if test -n "$copied"; then
9aacab9a 547 insert_vc_ignore $ig "$copied"
bbb44d83
PE
548 # If an ignored file name ends with _.h, then also add
549 # the name with just ".h". Many gnulib headers are generated,
550 # e.g., stdint_.h -> stdint.h, dirent_.h ->..., etc.
6d8e724d
PE
551 # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
552 f=`echo "$copied"|sed 's/_\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'`
9aacab9a 553 insert_vc_ignore $ig "$f"
6d8e724d
PE
554
555 # For files like sys_stat_.h and sys_time_.h, record as
556 # ignorable the directory we might eventually create: sys/.
557 f=`echo "$copied"|sed 's/sys_.*_\.h$/sys/'`
9aacab9a 558 insert_vc_ignore $ig "$f"
5691bf57
PE
559 fi
560 done
3b2942e6
PE
561 done
562}
1f65350a
PE
563
564
3b2942e6 565# Create boot temporary directories to import from gnulib and gettext.
3b2942e6
PE
566rm -fr $bt $bt2 &&
567mkdir $bt $bt2 || exit
568
569# Import from gnulib.
570
571gnulib_tool_options="\
572 --import\
573 --no-changelog\
bbb44d83 574 --aux-dir $bt/$build_aux\
3b2942e6 575 --doc-base $bt/doc\
bbb44d83 576 --lib $gnulib_name\
3b2942e6
PE
577 --m4-base $bt/m4/\
578 --source-base $bt/lib/\
579 --tests-base $bt/tests\
6d8e724d
PE
580 --local-dir $local_gl_dir\
581$gnulib_tool_option_extras\
3b2942e6
PE
582"
583echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
584$gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
585slurp $bt || exit
586
587for file in $gnulib_files; do
6d8e724d 588 symlink_to_dir "$GNULIB_SRCDIR" $file || exit
3b2942e6 589done
1f65350a 590
e23d0dd7 591
3b2942e6 592# Import from gettext.
bbb44d83
PE
593with_gettext=yes
594grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
595 with_gettext=no
62a9592d 596
bbb44d83
PE
597if test $with_gettext = yes; then
598 echo "$0: (cd $bt2; autopoint) ..."
599 cp configure.ac $bt2 &&
600 (cd $bt2 && autopoint && rm configure.ac) &&
601 slurp $bt2 $bt || exit
b4068c7c 602
bbb44d83
PE
603 rm -fr $bt $bt2 || exit
604fi
3b2942e6 605
6d8e724d
PE
606# Coreutils is unusual in that it generates some of its test-related
607# Makefile.am files. That must be done before invoking automake.
608mam_template=tests/Makefile.am.in
609if test -f $mam_template; then
610 PERL=perl
611 for tool in cut head join pr sort tac tail test tr uniq wc; do
612 m=tests/$tool/Makefile.am
613 t=${m}t
614 rm -f $m $t
615 sed -n '1,/^##test-files-begin/p' $mam_template > $t
616 echo "x = $tool" >> $t
617 srcdir=tests/$tool
618 $PERL -I$srcdir -w -- tests/mk-script $srcdir --list >> $t
619 sed -n '/^##test-files-end/,$p' $mam_template >> $t
620 chmod -w $t
621 mv $t $m
622 done
623fi
3b2942e6
PE
624
625# Reconfigure, getting other files.
62a9592d
PE
626
627for command in \
bbb44d83 628 libtool \
62a9592d
PE
629 'aclocal --force -I m4' \
630 'autoconf --force' \
631 'autoheader --force' \
632 'automake --add-missing --copy --force-missing';
633do
bbb44d83
PE
634 if test "$command" = libtool; then
635 grep '^[ ]*AM_PROG_LIBTOOL\>' configure.ac >/dev/null ||
636 continue
637 command='libtoolize -c -f'
638 fi
62a9592d
PE
639 echo "$0: $command ..."
640 $command || exit
641done
642
643
3b2942e6 644# Get some extra files from gnulib, overriding existing files.
3b2942e6 645for file in $gnulib_extra_files; do
3b2942e6 646 case $file in
e70f46d1 647 */INSTALL) dst=INSTALL;;
6d8e724d 648 build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
e70f46d1 649 *) dst=$file;;
3b2942e6 650 esac
6d8e724d 651 symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
3b2942e6
PE
652done
653
bbb44d83
PE
654if test $with_gettext = yes; then
655 # Create gettext configuration.
656 echo "$0: Creating po/Makevars from po/Makevars.template ..."
657 rm -f po/Makevars
3b2942e6 658 sed '
bbb44d83
PE
659 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
660 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
661 /^XGETTEXT_OPTIONS *=/{
662 s/$/ \\/
663 a\
664 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
665 }
666 ' po/Makevars.template >po/Makevars
3b2942e6 667
bbb44d83
PE
668 if test -d runtime-po; then
669 # Similarly for runtime-po/Makevars, but not quite the same.
670 rm -f runtime-po/Makevars
671 sed '
672 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
673 /^subdir *=.*/s/=.*/= runtime-po/
674 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
675 /^XGETTEXT_OPTIONS *=/{
676 s/$/ \\/
677 a\
678 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
679 }
680 ' <po/Makevars.template >runtime-po/Makevars
681
682 # Copy identical files from po to runtime-po.
683 (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
684 fi
3b2942e6 685fi
1f65350a
PE
686
687echo "$0: done. Now you can run './configure'."