build: use automake's --silent-rules option when possible
[platform/upstream/coreutils.git] / bootstrap
1 #! /bin/sh
2
3 # Bootstrap this package from checked-out sources.
4
5 # Copyright (C) 2003-2009 Free Software Foundation, Inc.
6
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.
11
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.
16
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/>.
19
20 # Written by Paul Eggert.
21
22 nl='
23 '
24
25 # Ensure file names are sorted consistently across platforms.
26 LC_ALL=C
27 export LC_ALL
28
29 local_gl_dir=gl
30
31 # Temporary directory names.
32 bt='._bootmp'
33 bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
34 bt2=${bt}2
35
36 usage() {
37   echo >&2 "\
38 Usage: $0 [OPTION]...
39 Bootstrap this package from the checked-out sources.
40
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.
51
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.
54
55 For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR
56 are honored.
57
58 Running without arguments will suffice in most cases.
59 "
60 }
61
62 # Configuration.
63
64 # Name of the Makefile.am
65 gnulib_mk=gnulib.mk
66
67 # List of gnulib modules needed.
68 gnulib_modules=
69
70 # Any gnulib files needed that are not in modules.
71 gnulib_files=
72
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'"
80
81 extract_package_name='
82   /^AC_INIT(/{
83      /.*,.*,.*, */{
84        s///
85        s/[][]//g
86        s/)$//
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 '
98 package=`sed -n "$extract_package_name" configure.ac` || exit
99 gnulib_name=lib$package
100
101 build_aux=build-aux
102 source_base=lib
103 m4_base=m4
104 doc_base=doc
105 tests_base=tests
106
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
117 "
118
119 # Additional gnulib-tool options to use.  Use "\newline" to break lines.
120 gnulib_tool_option_extras=
121
122 # Other locale categories that need message catalogs.
123 EXTRA_LOCALE_CATEGORIES=
124
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\\\
130 '
131
132 # Package bug report address for gettext files
133 MSGID_BUGS_ADDRESS=bug-$package@gnu.org
134
135 # Files we don't want to import.
136 excluded_files=
137
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
141
142 # Whether to use copies instead of symlinks.
143 copy=false
144
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
150
151 # Override the default configuration, if necessary.
152 # Make sure that bootstrap.conf is sourced from the current directory
153 # if we were invoked as "sh bootstrap".
154 case "$0" in
155   */*) test -r "$0.conf" && . "$0.conf" ;;
156   *) test -r "$0.conf" && . ./"$0.conf" ;;
157 esac
158
159
160 if test "$vc_ignore" = auto; then
161   vc_ignore=
162   test -d .git && vc_ignore=.gitignore
163   test -d CVS && vc_ignore="$vc_ignore .cvsignore"
164 fi
165
166 # Translate configuration into internal form.
167
168 # Parse options.
169
170 for option
171 do
172   case $option in
173   --help)
174     usage
175     exit;;
176   --gnulib-srcdir=*)
177     GNULIB_SRCDIR=`expr "X$option" : 'X--gnulib-srcdir=\(.*\)'`;;
178   --skip-po)
179     SKIP_PO=t;;
180   --force)
181     checkout_only_file=;;
182   --copy)
183     copy=true;;
184   *)
185     echo >&2 "$0: $option: unknown option"
186     exit 1;;
187   esac
188 done
189
190 if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
191   echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
192   exit 1
193 fi
194
195 # If $STR is not already on a line by itself in $FILE, insert it,
196 # sorting the new contents of the file and replacing $FILE with the result.
197 insert_sorted_if_absent() {
198   file=$1
199   str=$2
200   test -f $file || touch $file
201   echo "$str" | sort -u - $file | cmp - $file > /dev/null \
202     || echo "$str" | sort -u - $file -o $file \
203     || exit 1
204 }
205
206 # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
207 found_aux_dir=no
208 grep '^[         ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
209     >/dev/null && found_aux_dir=yes
210 grep '^[         ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
211     >/dev/null && found_aux_dir=yes
212 if test $found_aux_dir = no; then
213   echo "$0: expected line not found in configure.ac. Add the following:" >&2
214   echo "  AC_CONFIG_AUX_DIR([$build_aux])" >&2
215   exit 1
216 fi
217
218 # If $build_aux doesn't exist, create it now, otherwise some bits
219 # below will malfunction.  If creating it, also mark it as ignored.
220 if test ! -d $build_aux; then
221   mkdir $build_aux
222   for dot_ig in x $vc_ignore; do
223     test $dot_ig = x && continue
224     insert_sorted_if_absent $dot_ig $build_aux
225   done
226 fi
227
228 # Note this deviates from the version comparison in automake
229 # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a
230 # but this should suffice as we won't be specifying old
231 # version formats or redundant trailing .0 in bootstrap.conf.
232 # If we did want full compatibility then we should probably
233 # use m4_version_compare from autoconf.
234 sort_ver() { #sort -V is not generally available
235   ver1="$1"
236   ver2="$2"
237
238   #split on '.' and compare each component
239   i=1
240   while : ; do
241     p1=$(echo "$ver1" | cut -d. -f$i)
242     p2=$(echo "$ver2" | cut -d. -f$i)
243     if [ ! "$p1" ]; then
244       echo "$1 $2"
245       break
246     elif [ ! "$p2" ]; then
247       echo "$2 $1"
248       break
249     elif [ ! "$p1" = "$p2" ]; then
250       if [ "$p1" -gt "$p2" ] 2>/dev/null; then #numeric comparision
251         echo "$2 $1"
252       elif [ "$p2" -gt "$p1" ] 2>/dev/null; then #numeric comparision
253         echo "$1 $2"
254       else #numeric, then lexographic comparison
255         lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1)
256         if [ "$lp" = "$p2" ]; then
257           echo "$1 $2"
258         else
259           echo "$2 $1"
260         fi
261       fi
262       break
263     fi
264     i=$(($i+1))
265   done
266 }
267
268 get_version() {
269   app=$1
270
271   $app --version >/dev/null 2>&1 || return 1
272
273   $app --version 2>&1 |
274   sed -n 's/[^0-9.]*\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/p
275           t done
276           d
277           :done
278           q'
279 }
280
281 check_versions() {
282   ret=0
283
284   while read app req_ver; do
285     # Honor $APP variables ($TAR, $AUTOCONF, etc.)
286     appvar=`echo $app | tr '[a-z]' '[A-Z]'`
287     test "$appvar" = TAR && appvar=AMTAR
288     eval "app=\${$appvar-$app}"
289     inst_ver=$(get_version $app)
290     if [ ! "$inst_ver" ]; then
291       echo "Error: '$app' not found" >&2
292       ret=1
293     elif [ ! "$req_ver" = "-" ]; then
294       latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
295       if [ ! "$latest_ver" = "$inst_ver" ]; then
296         echo "Error: '$app' version == $inst_ver is too old" >&2
297         echo "       '$app' version >= $req_ver is required" >&2
298         ret=1
299       fi
300     fi
301   done
302
303   return $ret
304 }
305
306 print_versions() {
307   echo "Program    Min_version"
308   echo "----------------------"
309   printf "$buildreq"
310   echo "----------------------"
311   #can't depend on column -t
312 }
313
314 if ! printf "$buildreq" | check_versions; then
315   test -f README-prereq &&
316   echo "Please see README-prereq for notes on obtaining these prerequisite programs:" >&2
317   echo
318   print_versions
319   exit 1
320 fi
321
322 echo "$0: Bootstrapping from checked-out $package sources..."
323
324 # See if we can use gnulib's git-merge-changelog merge driver.
325 if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
326   if git config merge.merge-changelog.driver >/dev/null ; then
327     :
328   elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
329     echo "initializing git-merge-changelog driver"
330     git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
331     git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
332   else
333     echo "consider installing git-merge-changelog from gnulib"
334   fi
335 fi
336
337
338 cleanup_gnulib() {
339   status=$?
340   rm -fr gnulib
341   exit $status
342 }
343
344 git_modules_config () {
345   GIT_CONFIG=.gitmodules git config "$@"
346 }
347
348 # Get gnulib files.
349
350 case ${GNULIB_SRCDIR--} in
351 -)
352   if git_modules_config submodule.gnulib.url >/dev/null; then
353     echo "$0: getting gnulib files..."
354     git submodule init || exit $?
355     git submodule update || exit $?
356
357   elif [ ! -d gnulib ]; then
358     echo "$0: getting gnulib files..."
359
360     trap cleanup_gnulib 1 2 13 15
361
362     git clone --help|grep depth > /dev/null && depth='--depth 2' || depth=
363     git clone $depth git://git.sv.gnu.org/gnulib ||
364       cleanup_gnulib
365
366     trap - 1 2 13 15
367   fi
368   GNULIB_SRCDIR=gnulib
369   ;;
370 *)
371   # Redirect the gnulib submodule to the directory on the command line
372   # if possible.
373   if test -d "$GNULIB_SRCDIR"/.git && \
374         git_modules_config submodule.gnulib.url >/dev/null; then
375     git submodule init
376     GNULIB_SRCDIR=`cd $GNULIB_SRCDIR && pwd`
377     git config --replace-all submodule.gnulib.url $GNULIB_SRCDIR
378     echo "$0: getting gnulib files..."
379     git submodule update || exit $?
380     GNULIB_SRCDIR=gnulib
381   fi
382   ;;
383 esac
384
385 gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
386 <$gnulib_tool || exit
387
388 # Get translations.
389
390 download_po_files() {
391   subdir=$1
392   domain=$2
393   echo "$0: getting translations into $subdir for $domain..."
394   cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
395   eval "$cmd"
396 }
397
398 # Download .po files to $po_dir/.reference and copy only the new
399 # or modified ones into $po_dir.  Also update $po_dir/LINGUAS.
400 update_po_files() {
401   # Directory containing primary .po files.
402   # Overwrite them only when we're sure a .po file is new.
403   po_dir=$1
404   domain=$2
405
406   # Download *.po files into this dir.
407   # Usually contains *.s1 checksum files.
408   ref_po_dir="$po_dir/.reference"
409
410   test -d $ref_po_dir || mkdir $ref_po_dir || return
411   download_po_files $ref_po_dir $domain \
412     && ls "$ref_po_dir"/*.po 2>/dev/null |
413       sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS"
414
415   langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'`
416   test "$langs" = '*' && langs=x
417   for po in $langs; do
418     case $po in x) continue;; esac
419     new_po="$ref_po_dir/$po.po"
420     cksum_file="$ref_po_dir/$po.s1"
421     if ! test -f "$cksum_file" ||
422         ! test -f "$po_dir/$po.po" ||
423         ! ${SHA1SUM-sha1sum} -c --status "$cksum_file" < "$new_po" > /dev/null; then
424       echo "updated $po_dir/$po.po..."
425       cp "$new_po" "$po_dir/$po.po" && ${SHA1SUM-sha1sum} < "$new_po" > "$cksum_file"
426     fi
427   done
428 }
429
430 case $SKIP_PO in
431 '')
432   if test -d po; then
433     update_po_files po $package || exit
434   fi
435
436   if test -d runtime-po; then
437     update_po_files runtime-po $package-runtime || exit
438   fi;;
439 esac
440
441 symlink_to_dir()
442 {
443   src=$1/$2
444   dst=${3-$2}
445
446   test -f "$src" && {
447
448     # If the destination directory doesn't exist, create it.
449     # This is required at least for "lib/uniwidth/cjk.h".
450     dst_dir=`dirname "$dst"`
451     if ! test -d "$dst_dir"; then
452       mkdir -p "$dst_dir"
453
454       # If we've just created a directory like lib/uniwidth,
455       # tell version control system(s) it's ignorable.
456       # FIXME: for now, this does only one level
457       parent=`dirname "$dst_dir"`
458       for dot_ig in x $vc_ignore; do
459         test $dot_ig = x && continue
460         ig=$parent/$dot_ig
461         insert_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'`
462       done
463     fi
464
465     if $copy; then
466       {
467         test ! -h "$dst" || {
468           echo "$0: rm -f $dst" &&
469           rm -f "$dst"
470         }
471       } &&
472       test -f "$dst" &&
473       cmp -s "$src" "$dst" || {
474         echo "$0: cp -fp $src $dst" &&
475         cp -fp "$src" "$dst"
476       }
477     else
478       test -h "$dst" &&
479       src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
480       dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
481       test "$src_i" = "$dst_i" || {
482         dot_dots=
483         case $src in
484         /*) ;;
485         *)
486           case /$dst/ in
487           *//* | */../* | */./* | /*/*/*/*/*/)
488              echo >&2 "$0: invalid symlink calculation: $src -> $dst"
489              exit 1;;
490           /*/*/*/*/)    dot_dots=../../../;;
491           /*/*/*/)      dot_dots=../../;;
492           /*/*/)        dot_dots=../;;
493           esac;;
494         esac
495
496         echo "$0: ln -fs $dot_dots$src $dst" &&
497         ln -fs "$dot_dots$src" "$dst"
498       }
499     fi
500   }
501 }
502
503 cp_mark_as_generated()
504 {
505   cp_src=$1
506   cp_dst=$2
507
508   if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
509     symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
510   elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
511     symlink_to_dir $local_gl_dir "$cp_dst"
512   else
513     case $cp_dst in
514       *.[ch])             c1='/* '; c2=' */';;
515       *.texi)             c1='@c '; c2=     ;;
516       *.m4|*/Make*|Make*) c1='# ' ; c2=     ;;
517       *)                  c1=     ; c2=     ;;
518     esac
519
520     # If the destination directory doesn't exist, create it.
521     # This is required at least for "lib/uniwidth/cjk.h".
522     dst_dir=`dirname "$cp_dst"`
523     test -d "$dst_dir" || mkdir -p "$dst_dir"
524
525     if test -z "$c1"; then
526       cmp -s "$cp_src" "$cp_dst" || {
527         # Copy the file first to get proper permissions if it
528         # doesn't already exist.  Then overwrite the copy.
529         echo "$0: cp -f $cp_src $cp_dst" &&
530         rm -f "$cp_dst" &&
531         cp "$cp_src" "$cp_dst-t" &&
532         sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" &&
533         mv -f "$cp_dst-t" "$cp_dst"
534       }
535     else
536       # Copy the file first to get proper permissions if it
537       # doesn't already exist.  Then overwrite the copy.
538       cp "$cp_src" "$cp_dst-t" &&
539       (
540         echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
541         echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
542         echo '#line 1' &&
543         sed "s!$bt_regex/!!g" "$cp_src"
544       ) > $cp_dst-t &&
545       if cmp -s "$cp_dst-t" "$cp_dst"; then
546         rm -f "$cp_dst-t"
547       else
548         echo "$0: cp $cp_src $cp_dst # with edits" &&
549         mv -f "$cp_dst-t" "$cp_dst"
550       fi
551     fi
552   fi
553 }
554
555 version_controlled_file() {
556   dir=$1
557   file=$2
558   found=no
559   if test -d CVS; then
560     grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
561              grep '^/[^/]*/[0-9]' > /dev/null && found=yes
562   elif test -d .git; then
563     git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
564   elif test -d .svn; then
565     svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
566   else
567     echo "$0: no version control for $dir/$file?" >&2
568   fi
569   test $found = yes
570 }
571
572 slurp() {
573   for dir in . `(cd $1 && find * -type d -print)`; do
574     copied=
575     sep=
576     for file in `ls -a $1/$dir`; do
577       case $file in
578       .|..) continue;;
579       .*) continue;; # FIXME: should all file names starting with "." be ignored?
580       esac
581       test -d $1/$dir/$file && continue
582       for excluded_file in $excluded_files; do
583         test "$dir/$file" = "$excluded_file" && continue 2
584       done
585       if test $file = Makefile.am; then
586         copied=$copied${sep}$gnulib_mk; sep=$nl
587         remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
588         sed "$remove_intl" $1/$dir/$file | cmp - $dir/$gnulib_mk > /dev/null || {
589           echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
590           rm -f $dir/$gnulib_mk &&
591           sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
592         }
593       elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
594            version_controlled_file $dir $file; then
595         echo "$0: $dir/$file overrides $1/$dir/$file"
596       else
597         copied=$copied$sep$file; sep=$nl
598         if test $file = gettext.m4; then
599           echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
600           rm -f $dir/$file
601           sed '
602             /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
603               AC_DEFUN([AM_INTL_SUBDIR], [
604             /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
605               AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
606             $a\
607               AC_DEFUN([gl_LOCK_EARLY], [])
608           ' $1/$dir/$file >$dir/$file
609         else
610           cp_mark_as_generated $1/$dir/$file $dir/$file
611         fi
612       fi || exit
613     done
614
615     for dot_ig in x $vc_ignore; do
616       test $dot_ig = x && continue
617       ig=$dir/$dot_ig
618       if test -n "$copied"; then
619         insert_sorted_if_absent $ig "$copied"
620         # If an ignored file name ends with .in.h, then also add
621         # the name with just ".h".  Many gnulib headers are generated,
622         # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc.
623         # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
624         f=`echo "$copied"|sed 's/\.in\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'`
625         insert_sorted_if_absent $ig "$f"
626
627         # For files like sys_stat.in.h and sys_time.in.h, record as
628         # ignorable the directory we might eventually create: sys/.
629         f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'`
630         insert_sorted_if_absent $ig "$f"
631       fi
632     done
633   done
634 }
635
636
637 # Create boot temporary directories to import from gnulib and gettext.
638 rm -fr $bt $bt2 &&
639 mkdir $bt $bt2 || exit
640
641 # Import from gnulib.
642
643 gnulib_tool_options="\
644  --import\
645  --no-changelog\
646  --aux-dir $bt/$build_aux\
647  --doc-base $bt/$doc_base\
648  --lib $gnulib_name\
649  --m4-base $bt/$m4_base/\
650  --source-base $bt/$source_base/\
651  --tests-base $bt/$tests_base\
652  --local-dir $local_gl_dir\
653  $gnulib_tool_option_extras\
654 "
655 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
656 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
657 slurp $bt || exit
658
659 for file in $gnulib_files; do
660   symlink_to_dir "$GNULIB_SRCDIR" $file || exit
661 done
662
663
664 # Import from gettext.
665 with_gettext=yes
666 grep '^[         ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
667     with_gettext=no
668
669 if test $with_gettext = yes; then
670   echo "$0: (cd $bt2; ${AUTOPOINT-autopoint}) ..."
671   cp configure.ac $bt2 &&
672   (cd $bt2 && ${AUTOPOINT-autopoint} && rm configure.ac) &&
673   slurp $bt2 $bt || exit
674 fi
675 rm -fr $bt $bt2 || exit
676
677 # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
678 # gnulib-populated directories.  Such .m4 files would cause aclocal to fail.
679 # The following requires GNU find 4.2.3 or newer.  Considering the usual
680 # portability constraints of this script, that may seem a very demanding
681 # requirement, but it should be ok.  Ignore any failure, which is fine,
682 # since this is only a convenience to help developers avoid the relatively
683 # unusual case in which a symlinked-to .m4 file is git-removed from gnulib
684 # between successive runs of this script.
685 find "$m4_base" "$source_base" \
686   -depth \( -name '*.m4' -o -name '*.[ch]' \) \
687   -type l -xtype l -delete > /dev/null 2>&1
688
689 # Use automake's --silent-rules option, if possible.
690 automake="${AUTOMAKE-automake} --add-missing --copy --force-missing"
691 (${AUTOMAKE-automake} --help) 2>&1 \
692     | grep -e '^  *--silent-rules' > /dev/null \
693   && automake="$automake --silent-rules"
694
695 # Reconfigure, getting other files.
696
697 for command in \
698   libtool \
699   "${ACLOCAL-aclocal} --force -I m4" \
700   "${AUTOCONF-autoconf} --force" \
701   "${AUTOHEADER-autoheader} --force" \
702   "$automake"
703 do
704   if test "$command" = libtool; then
705     use_libtool=0
706     # We'd like to use grep -E, to see if any of LT_INIT,
707     # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
708     # but that's not portable enough (e.g., for Solaris).
709     grep '^[     ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
710       && use_libtool=1
711     grep '^[     ]*LT_INIT' configure.ac >/dev/null \
712       && use_libtool=1
713     test $use_libtool = 0 \
714       && continue
715     command="${LIBTOOLIZE-libtoolize} -c -f"
716   fi
717   echo "$0: $command ..."
718   $command || exit
719 done
720
721
722 # Get some extra files from gnulib, overriding existing files.
723 for file in $gnulib_extra_files; do
724   case $file in
725   */INSTALL) dst=INSTALL;;
726   build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
727   *) dst=$file;;
728   esac
729   symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
730 done
731
732 if test $with_gettext = yes; then
733   # Create gettext configuration.
734   echo "$0: Creating po/Makevars from po/Makevars.template ..."
735   rm -f po/Makevars
736   sed '
737     /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
738     /^MSGID_BUGS_ADDRESS *=/s/=.*/= '"$MSGID_BUGS_ADDRESS"'/
739     /^XGETTEXT_OPTIONS *=/{
740       s/$/ \\/
741       a\
742           '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
743     }
744   ' po/Makevars.template >po/Makevars
745
746   if test -d runtime-po; then
747     # Similarly for runtime-po/Makevars, but not quite the same.
748     rm -f runtime-po/Makevars
749     sed '
750       /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
751       /^subdir *=.*/s/=.*/= runtime-po/
752       /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
753       /^XGETTEXT_OPTIONS *=/{
754         s/$/ \\/
755         a\
756             '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
757       }
758     ' <po/Makevars.template >runtime-po/Makevars
759
760     # Copy identical files from po to runtime-po.
761     (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
762   fi
763 fi
764
765 # Horrible, coreutils-specific kludges.
766 # Change paths in gnulib-tests/gnulib.mk from "../.." to "..".
767 m=gnulib-tests/gnulib.mk
768 sed 's,\.\./\.\.,..,g' $m > $m-t
769 mv -f $m-t $m
770
771 echo "$0: done.  Now you can run './configure'."