bootstrap: sync from coreutils
[gnulib.git] / build-aux / 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 comparison
251         echo "$2 $1"
252       elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison
253         echo "$1 $2"
254       else # numeric, then lexicographic 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   test -f .gitmodules && git config --file .gitmodules "$@"
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 && shallow='--depth 2' || shallow=
363     git clone $shallow 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         sed "s!$bt_regex/!!g" "$cp_src"
543       ) > $cp_dst-t &&
544       if cmp -s "$cp_dst-t" "$cp_dst"; then
545         rm -f "$cp_dst-t"
546       else
547         echo "$0: cp $cp_src $cp_dst # with edits" &&
548         mv -f "$cp_dst-t" "$cp_dst"
549       fi
550     fi
551   fi
552 }
553
554 version_controlled_file() {
555   dir=$1
556   file=$2
557   found=no
558   if test -d CVS; then
559     grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
560              grep '^/[^/]*/[0-9]' > /dev/null && found=yes
561   elif test -d .git; then
562     git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
563   elif test -d .svn; then
564     svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
565   else
566     echo "$0: no version control for $dir/$file?" >&2
567   fi
568   test $found = yes
569 }
570
571 slurp() {
572   for dir in . `(cd $1 && find * -type d -print)`; do
573     copied=
574     sep=
575     for file in `ls -a $1/$dir`; do
576       case $file in
577       .|..) continue;;
578       .*) continue;; # FIXME: should all file names starting with "." be ignored?
579       esac
580       test -d $1/$dir/$file && continue
581       for excluded_file in $excluded_files; do
582         test "$dir/$file" = "$excluded_file" && continue 2
583       done
584       if test $file = Makefile.am; then
585         copied=$copied${sep}$gnulib_mk; sep=$nl
586         remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
587         sed "$remove_intl" $1/$dir/$file | cmp - $dir/$gnulib_mk > /dev/null || {
588           echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
589           rm -f $dir/$gnulib_mk &&
590           sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
591         }
592       elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
593            version_controlled_file $dir $file; then
594         echo "$0: $dir/$file overrides $1/$dir/$file"
595       else
596         copied=$copied$sep$file; sep=$nl
597         if test $file = gettext.m4; then
598           echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
599           rm -f $dir/$file
600           sed '
601             /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
602               AC_DEFUN([AM_INTL_SUBDIR], [
603             /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
604               AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
605             $a\
606               AC_DEFUN([gl_LOCK_EARLY], [])
607           ' $1/$dir/$file >$dir/$file
608         else
609           cp_mark_as_generated $1/$dir/$file $dir/$file
610         fi
611       fi || exit
612     done
613
614     for dot_ig in x $vc_ignore; do
615       test $dot_ig = x && continue
616       ig=$dir/$dot_ig
617       if test -n "$copied"; then
618         insert_sorted_if_absent $ig "$copied"
619         # If an ignored file name ends with .in.h, then also add
620         # the name with just ".h".  Many gnulib headers are generated,
621         # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc.
622         # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
623         f=`echo "$copied"|sed 's/\.in\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'`
624         insert_sorted_if_absent $ig "$f"
625
626         # For files like sys_stat.in.h and sys_time.in.h, record as
627         # ignorable the directory we might eventually create: sys/.
628         f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'`
629         insert_sorted_if_absent $ig "$f"
630       fi
631     done
632   done
633 }
634
635
636 # Create boot temporary directories to import from gnulib and gettext.
637 rm -fr $bt $bt2 &&
638 mkdir $bt $bt2 || exit
639
640 # Import from gnulib.
641
642 gnulib_tool_options="\
643  --import\
644  --no-changelog\
645  --aux-dir $bt/$build_aux\
646  --doc-base $bt/$doc_base\
647  --lib $gnulib_name\
648  --m4-base $bt/$m4_base/\
649  --source-base $bt/$source_base/\
650  --tests-base $bt/$tests_base\
651  --local-dir $local_gl_dir\
652  $gnulib_tool_option_extras\
653 "
654 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
655 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
656 slurp $bt || exit
657
658 for file in $gnulib_files; do
659   symlink_to_dir "$GNULIB_SRCDIR" $file || exit
660 done
661
662
663 # Import from gettext.
664 with_gettext=yes
665 grep '^[         ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
666     with_gettext=no
667
668 if test $with_gettext = yes; then
669   echo "$0: (cd $bt2; ${AUTOPOINT-autopoint}) ..."
670   cp configure.ac $bt2 &&
671   (cd $bt2 && ${AUTOPOINT-autopoint} && rm configure.ac) &&
672   slurp $bt2 $bt || exit
673 fi
674 rm -fr $bt $bt2 || exit
675
676 # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
677 # gnulib-populated directories.  Such .m4 files would cause aclocal to fail.
678 # The following requires GNU find 4.2.3 or newer.  Considering the usual
679 # portability constraints of this script, that may seem a very demanding
680 # requirement, but it should be ok.  Ignore any failure, which is fine,
681 # since this is only a convenience to help developers avoid the relatively
682 # unusual case in which a symlinked-to .m4 file is git-removed from gnulib
683 # between successive runs of this script.
684 find "$m4_base" "$source_base" \
685   -depth \( -name '*.m4' -o -name '*.[ch]' \) \
686   -type l -xtype l -delete > /dev/null 2>&1
687
688 # Reconfigure, getting other files.
689
690 for command in \
691   libtool \
692   "${ACLOCAL-aclocal} --force -I m4" \
693   "${AUTOCONF-autoconf} --force" \
694   "${AUTOHEADER-autoheader} --force" \
695   "${AUTOMAKE-automake} --add-missing --copy --force-missing"
696 do
697   if test "$command" = libtool; then
698     use_libtool=0
699     # We'd like to use grep -E, to see if any of LT_INIT,
700     # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
701     # but that's not portable enough (e.g., for Solaris).
702     grep '^[     ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
703       && use_libtool=1
704     grep '^[     ]*LT_INIT' configure.ac >/dev/null \
705       && use_libtool=1
706     test $use_libtool = 0 \
707       && continue
708     command="${LIBTOOLIZE-libtoolize} -c -f"
709   fi
710   echo "$0: $command ..."
711   $command || exit
712 done
713
714
715 # Get some extra files from gnulib, overriding existing files.
716 for file in $gnulib_extra_files; do
717   case $file in
718   */INSTALL) dst=INSTALL;;
719   build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
720   *) dst=$file;;
721   esac
722   symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
723 done
724
725 if test $with_gettext = yes; then
726   # Create gettext configuration.
727   echo "$0: Creating po/Makevars from po/Makevars.template ..."
728   rm -f po/Makevars
729   sed '
730     /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
731     /^MSGID_BUGS_ADDRESS *=/s/=.*/= '"$MSGID_BUGS_ADDRESS"'/
732     /^XGETTEXT_OPTIONS *=/{
733       s/$/ \\/
734       a\
735           '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
736     }
737   ' po/Makevars.template >po/Makevars
738
739   if test -d runtime-po; then
740     # Similarly for runtime-po/Makevars, but not quite the same.
741     rm -f runtime-po/Makevars
742     sed '
743       /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
744       /^subdir *=.*/s/=.*/= runtime-po/
745       /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
746       /^XGETTEXT_OPTIONS *=/{
747         s/$/ \\/
748         a\
749             '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
750       }
751     ' <po/Makevars.template >runtime-po/Makevars
752
753     # Copy identical files from po to runtime-po.
754     (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
755   fi
756 fi
757
758 echo "$0: done.  Now you can run './configure'."