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