tests: tail-2/assert: reduce risk of race condition
[coreutils.git] / bootstrap
blob4be24b6aabe9072bc6a2aec981f127096bab895a
1 #! /bin/sh
3 # Bootstrap this package from checked-out sources.
5 # Copyright (C) 2003-2009 Free Software Foundation, Inc.
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 3 of the License, or
10 # (at your option) any later version.
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.
17 # You should have received a copy of the GNU General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20 # Written by Paul Eggert.
22 nl='
25 # Ensure file names are sorted consistently across platforms.
26 LC_ALL=C
27 export LC_ALL
29 local_gl_dir=gl
31 # Temporary directory names.
32 bt='._bootmp'
33 bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
34 bt2=${bt}2
36 usage() {
37 cat <<EOF
38 Usage: $0 [OPTION]...
39 Bootstrap this package from the checked-out sources.
41 Options:
42 --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
43 sources reside. Use this if you already
44 have gnulib sources on your machine, and
45 do not want to waste your bandwidth downloading
46 them again.
47 --copy Copy files instead of creating symbolic links.
48 --force Attempt to bootstrap even if the sources seem
49 not to have been checked out.
50 --skip-po Do not download po files.
52 If the file $0.conf exists in the same directory as this script, its
53 contents are read as shell variables to configure the bootstrap.
55 For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
56 are honored.
58 Running without arguments will suffice in most cases.
59 EOF
62 # Configuration.
64 # Name of the Makefile.am
65 gnulib_mk=gnulib.mk
67 # List of gnulib modules needed.
68 gnulib_modules=
70 # Any gnulib files needed that are not in modules.
71 gnulib_files=
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.
78 po_download_command_format=\
79 "rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'"
81 extract_package_name='
82 /^AC_INIT(/{
83 /.*,.*,.*, */{
84 s///
85 s/[][]//g
86 s/)$//
90 s/AC_INIT(\[*//
91 s/]*,.*//
92 s/^GNU //
93 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
94 s/[^A-Za-z0-9_]/-/g
98 package=`sed -n "$extract_package_name" configure.ac` || exit
99 gnulib_name=lib$package
101 build_aux=build-aux
102 source_base=lib
103 m4_base=m4
104 doc_base=doc
105 tests_base=tests
107 # Extra files from gnulib, which override files from other sources.
108 gnulib_extra_files="
109 $build_aux/install-sh
110 $build_aux/missing
111 $build_aux/mdate-sh
112 $build_aux/texinfo.tex
113 $build_aux/depcomp
114 $build_aux/config.guess
115 $build_aux/config.sub
116 doc/INSTALL
119 # Additional gnulib-tool options to use. Use "\newline" to break lines.
120 gnulib_tool_option_extras=
122 # Other locale categories that need message catalogs.
123 EXTRA_LOCALE_CATEGORIES=
125 # Additional xgettext options to use. Use "\\\newline" to break lines.
126 XGETTEXT_OPTIONS='\\\
127 --flag=_:1:pass-c-format\\\
128 --flag=N_:1:pass-c-format\\\
129 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
132 # Package bug report address for gettext files
133 MSGID_BUGS_ADDRESS=bug-$package@gnu.org
135 # Files we don't want to import.
136 excluded_files=
138 # File that should exist in the top directory of a checked out hierarchy,
139 # but not in a distribution tarball.
140 checkout_only_file=README-hacking
142 # Whether to use copies instead of symlinks.
143 copy=false
145 # Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
146 # those files to be generated in directories like lib/, m4/, and po/.
147 # Or set it to 'auto' to make this script select which to use based
148 # on which version control system (if any) is used in the source directory.
149 vc_ignore=auto
151 # find_tool ENVVAR NAMES...
152 # -------------------------
153 find_tool ()
155 # Find sha1sum, named gsha1sum on MacPorts.
156 find_tool_envvar=$1
157 shift
158 if eval test x"\$$find_tool_envvar" = x; then
159 for i
161 if ($i --version </dev/null) >/dev/null 2>&1; then
162 find_tool_res=$i
163 break
165 done
167 if test x"$find_tool_res" = x; then
168 echo >&2 "$0: $find_tool_name is required"
169 exit 1
171 ($find_tool_res --version </dev/null) >/dev/null 2>&1 || {
172 echo >&2 "$0: cannot run $find_tool_res --version"
173 exit 1
175 eval "$find_tool_envvar=\"$find_tool_res\""
176 eval "export $find_tool_envvar"
179 # Find sha1sum, named gsha1sum on MacPorts.
180 find_tool SHA1SUM sha1sum gsha1sum
182 # Override the default configuration, if necessary.
183 # Make sure that bootstrap.conf is sourced from the current directory
184 # if we were invoked as "sh bootstrap".
185 case "$0" in
186 */*) test -r "$0.conf" && . "$0.conf" ;;
187 *) test -r "$0.conf" && . ./"$0.conf" ;;
188 esac
191 if test "$vc_ignore" = auto; then
192 vc_ignore=
193 test -d .git && vc_ignore=.gitignore
194 test -d CVS && vc_ignore="$vc_ignore .cvsignore"
197 # Translate configuration into internal form.
199 # Parse options.
201 for option
203 case $option in
204 --help)
205 usage
206 exit;;
207 --gnulib-srcdir=*)
208 GNULIB_SRCDIR=`expr "X$option" : 'X--gnulib-srcdir=\(.*\)'`;;
209 --skip-po)
210 SKIP_PO=t;;
211 --force)
212 checkout_only_file=;;
213 --copy)
214 copy=true;;
216 echo >&2 "$0: $option: unknown option"
217 exit 1;;
218 esac
219 done
221 if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
222 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
223 exit 1
226 # If $STR is not already on a line by itself in $FILE, insert it,
227 # sorting the new contents of the file and replacing $FILE with the result.
228 insert_sorted_if_absent() {
229 file=$1
230 str=$2
231 test -f $file || touch $file
232 echo "$str" | sort -u - $file | cmp - $file > /dev/null \
233 || echo "$str" | sort -u - $file -o $file \
234 || exit 1
237 # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
238 found_aux_dir=no
239 grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
240 >/dev/null && found_aux_dir=yes
241 grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
242 >/dev/null && found_aux_dir=yes
243 if test $found_aux_dir = no; then
244 echo "$0: expected line not found in configure.ac. Add the following:" >&2
245 echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2
246 exit 1
249 # If $build_aux doesn't exist, create it now, otherwise some bits
250 # below will malfunction. If creating it, also mark it as ignored.
251 if test ! -d $build_aux; then
252 mkdir $build_aux
253 for dot_ig in x $vc_ignore; do
254 test $dot_ig = x && continue
255 insert_sorted_if_absent $dot_ig $build_aux
256 done
259 # Note this deviates from the version comparison in automake
260 # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
261 # but this should suffice as we won't be specifying old
262 # version formats or redundant trailing .0 in bootstrap.conf.
263 # If we did want full compatibility then we should probably
264 # use m4_version_compare from autoconf.
265 sort_ver() { # sort -V is not generally available
266 ver1="$1"
267 ver2="$2"
269 # split on '.' and compare each component
271 while : ; do
272 p1=$(echo "$ver1" | cut -d. -f$i)
273 p2=$(echo "$ver2" | cut -d. -f$i)
274 if [ ! "$p1" ]; then
275 echo "$1 $2"
276 break
277 elif [ ! "$p2" ]; then
278 echo "$2 $1"
279 break
280 elif [ ! "$p1" = "$p2" ]; then
281 if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison
282 echo "$2 $1"
283 elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison
284 echo "$1 $2"
285 else # numeric, then lexicographic comparison
286 lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1)
287 if [ "$lp" = "$p2" ]; then
288 echo "$1 $2"
289 else
290 echo "$2 $1"
293 break
295 i=$(($i+1))
296 done
299 get_version() {
300 app=$1
302 $app --version >/dev/null 2>&1 || return 1
304 $app --version 2>&1 |
305 sed -n 's/[^0-9.]*\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/p
306 t done
308 :done
312 check_versions() {
313 ret=0
315 while read app req_ver; do
316 # Honor $APP variables ($TAR, $AUTOCONF, etc.)
317 appvar=`echo $app | tr '[a-z]' '[A-Z]'`
318 test "$appvar" = TAR && appvar=AMTAR
319 eval "app=\${$appvar-$app}"
320 inst_ver=$(get_version $app)
321 if [ ! "$inst_ver" ]; then
322 echo "Error: '$app' not found" >&2
323 ret=1
324 elif [ ! "$req_ver" = "-" ]; then
325 latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
326 if [ ! "$latest_ver" = "$inst_ver" ]; then
327 echo "Error: '$app' version == $inst_ver is too old" >&2
328 echo " '$app' version >= $req_ver is required" >&2
329 ret=1
332 done
334 return $ret
337 print_versions() {
338 echo "Program Min_version"
339 echo "----------------------"
340 printf "$buildreq"
341 echo "----------------------"
342 # can't depend on column -t
345 if ! printf "$buildreq" | check_versions; then
346 test -f README-prereq &&
347 echo "See README-prereq for notes on obtaining these prerequisite programs:" >&2
348 echo
349 print_versions
350 exit 1
353 echo "$0: Bootstrapping from checked-out $package sources..."
355 # See if we can use gnulib's git-merge-changelog merge driver.
356 if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
357 if git config merge.merge-changelog.driver >/dev/null ; then
359 elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
360 echo "initializing git-merge-changelog driver"
361 git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
362 git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
363 else
364 echo "consider installing git-merge-changelog from gnulib"
369 cleanup_gnulib() {
370 status=$?
371 rm -fr gnulib
372 exit $status
375 git_modules_config () {
376 test -f .gitmodules && git config --file .gitmodules "$@"
379 # Get gnulib files.
381 case ${GNULIB_SRCDIR--} in
383 if git_modules_config submodule.gnulib.url >/dev/null; then
384 echo "$0: getting gnulib files..."
385 git submodule init || exit $?
386 git submodule update || exit $?
388 elif [ ! -d gnulib ]; then
389 echo "$0: getting gnulib files..."
391 trap cleanup_gnulib 1 2 13 15
393 git clone --help|grep depth > /dev/null && shallow='--depth 2' || shallow=
394 git clone $shallow git://git.sv.gnu.org/gnulib ||
395 cleanup_gnulib
397 trap - 1 2 13 15
399 GNULIB_SRCDIR=gnulib
402 # Redirect the gnulib submodule to the directory on the command line
403 # if possible.
404 if test -d "$GNULIB_SRCDIR"/.git && \
405 git_modules_config submodule.gnulib.url >/dev/null; then
406 git submodule init
407 GNULIB_SRCDIR=`cd $GNULIB_SRCDIR && pwd`
408 git config --replace-all submodule.gnulib.url $GNULIB_SRCDIR
409 echo "$0: getting gnulib files..."
410 git submodule update || exit $?
411 GNULIB_SRCDIR=gnulib
414 esac
416 gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
417 <$gnulib_tool || exit
419 # Get translations.
421 download_po_files() {
422 subdir=$1
423 domain=$2
424 echo "$0: getting translations into $subdir for $domain..."
425 cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
426 eval "$cmd"
429 # Download .po files to $po_dir/.reference and copy only the new
430 # or modified ones into $po_dir. Also update $po_dir/LINGUAS.
431 update_po_files() {
432 # Directory containing primary .po files.
433 # Overwrite them only when we're sure a .po file is new.
434 po_dir=$1
435 domain=$2
437 # Download *.po files into this dir.
438 # Usually contains *.s1 checksum files.
439 ref_po_dir="$po_dir/.reference"
441 test -d $ref_po_dir || mkdir $ref_po_dir || return
442 download_po_files $ref_po_dir $domain \
443 && ls "$ref_po_dir"/*.po 2>/dev/null |
444 sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS"
446 langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'`
447 test "$langs" = '*' && langs=x
448 for po in $langs; do
449 case $po in x) continue;; esac
450 new_po="$ref_po_dir/$po.po"
451 cksum_file="$ref_po_dir/$po.s1"
452 if ! test -f "$cksum_file" ||
453 ! test -f "$po_dir/$po.po" ||
454 ! $SHA1SUM -c --status "$cksum_file" \
455 < "$new_po" > /dev/null; then
456 echo "updated $po_dir/$po.po..."
457 cp "$new_po" "$po_dir/$po.po" \
458 && $SHA1SUM < "$new_po" > "$cksum_file"
460 done
463 case $SKIP_PO in
465 if test -d po; then
466 update_po_files po $package || exit
469 if test -d runtime-po; then
470 update_po_files runtime-po $package-runtime || exit
471 fi;;
472 esac
474 symlink_to_dir()
476 src=$1/$2
477 dst=${3-$2}
479 test -f "$src" && {
481 # If the destination directory doesn't exist, create it.
482 # This is required at least for "lib/uniwidth/cjk.h".
483 dst_dir=`dirname "$dst"`
484 if ! test -d "$dst_dir"; then
485 mkdir -p "$dst_dir"
487 # If we've just created a directory like lib/uniwidth,
488 # tell version control system(s) it's ignorable.
489 # FIXME: for now, this does only one level
490 parent=`dirname "$dst_dir"`
491 for dot_ig in x $vc_ignore; do
492 test $dot_ig = x && continue
493 ig=$parent/$dot_ig
494 insert_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'`
495 done
498 if $copy; then
500 test ! -h "$dst" || {
501 echo "$0: rm -f $dst" &&
502 rm -f "$dst"
504 } &&
505 test -f "$dst" &&
506 cmp -s "$src" "$dst" || {
507 echo "$0: cp -fp $src $dst" &&
508 cp -fp "$src" "$dst"
510 else
511 test -h "$dst" &&
512 src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
513 dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
514 test "$src_i" = "$dst_i" || {
515 dot_dots=
516 case $src in
517 /*) ;;
519 case /$dst/ in
520 *//* | */../* | */./* | /*/*/*/*/*/)
521 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
522 exit 1;;
523 /*/*/*/*/) dot_dots=../../../;;
524 /*/*/*/) dot_dots=../../;;
525 /*/*/) dot_dots=../;;
526 esac;;
527 esac
529 echo "$0: ln -fs $dot_dots$src $dst" &&
530 ln -fs "$dot_dots$src" "$dst"
536 cp_mark_as_generated()
538 cp_src=$1
539 cp_dst=$2
541 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
542 symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
543 elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
544 symlink_to_dir $local_gl_dir "$cp_dst"
545 else
546 case $cp_dst in
547 *.[ch]) c1='/* '; c2=' */';;
548 *.texi) c1='@c '; c2= ;;
549 *.m4|*/Make*|Make*) c1='# ' ; c2= ;;
550 *) c1= ; c2= ;;
551 esac
553 # If the destination directory doesn't exist, create it.
554 # This is required at least for "lib/uniwidth/cjk.h".
555 dst_dir=`dirname "$cp_dst"`
556 test -d "$dst_dir" || mkdir -p "$dst_dir"
558 if test -z "$c1"; then
559 cmp -s "$cp_src" "$cp_dst" || {
560 # Copy the file first to get proper permissions if it
561 # doesn't already exist. Then overwrite the copy.
562 echo "$0: cp -f $cp_src $cp_dst" &&
563 rm -f "$cp_dst" &&
564 cp "$cp_src" "$cp_dst-t" &&
565 sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" &&
566 mv -f "$cp_dst-t" "$cp_dst"
568 else
569 # Copy the file first to get proper permissions if it
570 # doesn't already exist. Then overwrite the copy.
571 cp "$cp_src" "$cp_dst-t" &&
573 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
574 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
575 echo '#line 1' &&
576 sed "s!$bt_regex/!!g" "$cp_src"
577 ) > $cp_dst-t &&
578 if cmp -s "$cp_dst-t" "$cp_dst"; then
579 rm -f "$cp_dst-t"
580 else
581 echo "$0: cp $cp_src $cp_dst # with edits" &&
582 mv -f "$cp_dst-t" "$cp_dst"
588 version_controlled_file() {
589 dir=$1
590 file=$2
591 found=no
592 if test -d CVS; then
593 grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
594 grep '^/[^/]*/[0-9]' > /dev/null && found=yes
595 elif test -d .git; then
596 git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
597 elif test -d .svn; then
598 svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
599 else
600 echo "$0: no version control for $dir/$file?" >&2
602 test $found = yes
605 slurp() {
606 for dir in . `(cd $1 && find * -type d -print)`; do
607 copied=
608 sep=
609 for file in `ls -a $1/$dir`; do
610 case $file in
611 .|..) continue;;
612 .*) continue;; # FIXME: should all file names starting with "." be ignored?
613 esac
614 test -d $1/$dir/$file && continue
615 for excluded_file in $excluded_files; do
616 test "$dir/$file" = "$excluded_file" && continue 2
617 done
618 if test $file = Makefile.am; then
619 copied=$copied${sep}$gnulib_mk; sep=$nl
620 remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
621 sed "$remove_intl" $1/$dir/$file | cmp - $dir/$gnulib_mk > /dev/null || {
622 echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
623 rm -f $dir/$gnulib_mk &&
624 sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
626 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
627 version_controlled_file $dir $file; then
628 echo "$0: $dir/$file overrides $1/$dir/$file"
629 else
630 copied=$copied$sep$file; sep=$nl
631 if test $file = gettext.m4; then
632 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
633 rm -f $dir/$file
634 sed '
635 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
636 AC_DEFUN([AM_INTL_SUBDIR], [
637 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
638 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
640 AC_DEFUN([gl_LOCK_EARLY], [])
641 ' $1/$dir/$file >$dir/$file
642 else
643 cp_mark_as_generated $1/$dir/$file $dir/$file
645 fi || exit
646 done
648 for dot_ig in x $vc_ignore; do
649 test $dot_ig = x && continue
650 ig=$dir/$dot_ig
651 if test -n "$copied"; then
652 insert_sorted_if_absent $ig "$copied"
653 # If an ignored file name ends with .in.h, then also add
654 # the name with just ".h". Many gnulib headers are generated,
655 # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc.
656 # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
657 f=`echo "$copied"|sed 's/\.in\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'`
658 insert_sorted_if_absent $ig "$f"
660 # For files like sys_stat.in.h and sys_time.in.h, record as
661 # ignorable the directory we might eventually create: sys/.
662 f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'`
663 insert_sorted_if_absent $ig "$f"
665 done
666 done
670 # Create boot temporary directories to import from gnulib and gettext.
671 rm -fr $bt $bt2 &&
672 mkdir $bt $bt2 || exit
674 # Import from gnulib.
676 gnulib_tool_options="\
677 --import\
678 --no-changelog\
679 --aux-dir $bt/$build_aux\
680 --doc-base $bt/$doc_base\
681 --lib $gnulib_name\
682 --m4-base $bt/$m4_base/\
683 --source-base $bt/$source_base/\
684 --tests-base $bt/$tests_base\
685 --local-dir $local_gl_dir\
686 $gnulib_tool_option_extras\
688 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
689 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
690 slurp $bt || exit
692 for file in $gnulib_files; do
693 symlink_to_dir "$GNULIB_SRCDIR" $file || exit
694 done
697 # Import from gettext.
698 with_gettext=yes
699 grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
700 with_gettext=no
702 if test $with_gettext = yes; then
703 echo "$0: (cd $bt2; ${AUTOPOINT-autopoint}) ..."
704 cp configure.ac $bt2 &&
705 (cd $bt2 && ${AUTOPOINT-autopoint} && rm configure.ac) &&
706 slurp $bt2 $bt || exit
708 rm -fr $bt $bt2 || exit
710 # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
711 # gnulib-populated directories. Such .m4 files would cause aclocal to fail.
712 # The following requires GNU find 4.2.3 or newer. Considering the usual
713 # portability constraints of this script, that may seem a very demanding
714 # requirement, but it should be ok. Ignore any failure, which is fine,
715 # since this is only a convenience to help developers avoid the relatively
716 # unusual case in which a symlinked-to .m4 file is git-removed from gnulib
717 # between successive runs of this script.
718 find "$m4_base" "$source_base" \
719 -depth \( -name '*.m4' -o -name '*.[ch]' \) \
720 -type l -xtype l -delete > /dev/null 2>&1
722 # Reconfigure, getting other files.
724 for command in \
725 libtool \
726 "${ACLOCAL-aclocal} --force -I m4" \
727 "${AUTOCONF-autoconf} --force" \
728 "${AUTOHEADER-autoheader} --force" \
729 "${AUTOMAKE-automake} --add-missing --copy --force-missing"
731 if test "$command" = libtool; then
732 use_libtool=0
733 # We'd like to use grep -E, to see if any of LT_INIT,
734 # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
735 # but that's not portable enough (e.g., for Solaris).
736 grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
737 && use_libtool=1
738 grep '^[ ]*LT_INIT' configure.ac >/dev/null \
739 && use_libtool=1
740 test $use_libtool = 0 \
741 && continue
742 command="${LIBTOOLIZE-libtoolize} -c -f"
744 echo "$0: $command ..."
745 $command || exit
746 done
749 # Get some extra files from gnulib, overriding existing files.
750 for file in $gnulib_extra_files; do
751 case $file in
752 */INSTALL) dst=INSTALL;;
753 build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
754 *) dst=$file;;
755 esac
756 symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
757 done
759 if test $with_gettext = yes; then
760 # Create gettext configuration.
761 echo "$0: Creating po/Makevars from po/Makevars.template ..."
762 rm -f po/Makevars
763 sed '
764 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
765 /^MSGID_BUGS_ADDRESS *=/s/=.*/= '"$MSGID_BUGS_ADDRESS"'/
766 /^XGETTEXT_OPTIONS *=/{
767 s/$/ \\/
769 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
771 ' po/Makevars.template >po/Makevars
773 if test -d runtime-po; then
774 # Similarly for runtime-po/Makevars, but not quite the same.
775 rm -f runtime-po/Makevars
776 sed '
777 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
778 /^subdir *=.*/s/=.*/= runtime-po/
779 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
780 /^XGETTEXT_OPTIONS *=/{
781 s/$/ \\/
783 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
785 ' <po/Makevars.template >runtime-po/Makevars
787 # Copy identical files from po to runtime-po.
788 (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
792 # Horrible, coreutils-specific kludges.
793 # Change paths in gnulib-tests/gnulib.mk from "../.." to "..".
794 m=gnulib-tests/gnulib.mk
795 sed 's,\.\./\.\.,..,g' $m > $m-t
796 mv -f $m-t $m
798 echo "$0: done. Now you can run './configure'."