1e7bfac5837c4a8ebdf329206201999d0d7a20d3
[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 "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" \
424             < "$new_po" > /dev/null; then
425       echo "updated $po_dir/$po.po..."
426       cp "$new_po" "$po_dir/$po.po" \
427           && ${SHA1SUM-sha1sum} < "$new_po" > "$cksum_file"
428     fi
429   done
430 }
431
432 case $SKIP_PO in
433 '')
434   if test -d po; then
435     update_po_files po $package || exit
436   fi
437
438   if test -d runtime-po; then
439     update_po_files runtime-po $package-runtime || exit
440   fi;;
441 esac
442
443 symlink_to_dir()
444 {
445   src=$1/$2
446   dst=${3-$2}
447
448   test -f "$src" && {
449
450     # If the destination directory doesn't exist, create it.
451     # This is required at least for "lib/uniwidth/cjk.h".
452     dst_dir=`dirname "$dst"`
453     if ! test -d "$dst_dir"; then
454       mkdir -p "$dst_dir"
455
456       # If we've just created a directory like lib/uniwidth,
457       # tell version control system(s) it's ignorable.
458       # FIXME: for now, this does only one level
459       parent=`dirname "$dst_dir"`
460       for dot_ig in x $vc_ignore; do
461         test $dot_ig = x && continue
462         ig=$parent/$dot_ig
463         insert_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'`
464       done
465     fi
466
467     if $copy; then
468       {
469         test ! -h "$dst" || {
470           echo "$0: rm -f $dst" &&
471           rm -f "$dst"
472         }
473       } &&
474       test -f "$dst" &&
475       cmp -s "$src" "$dst" || {
476         echo "$0: cp -fp $src $dst" &&
477         cp -fp "$src" "$dst"
478       }
479     else
480       test -h "$dst" &&
481       src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
482       dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
483       test "$src_i" = "$dst_i" || {
484         dot_dots=
485         case $src in
486         /*) ;;
487         *)
488           case /$dst/ in
489           *//* | */../* | */./* | /*/*/*/*/*/)
490              echo >&2 "$0: invalid symlink calculation: $src -> $dst"
491              exit 1;;
492           /*/*/*/*/)    dot_dots=../../../;;
493           /*/*/*/)      dot_dots=../../;;
494           /*/*/)        dot_dots=../;;
495           esac;;
496         esac
497
498         echo "$0: ln -fs $dot_dots$src $dst" &&
499         ln -fs "$dot_dots$src" "$dst"
500       }
501     fi
502   }
503 }
504
505 cp_mark_as_generated()
506 {
507   cp_src=$1
508   cp_dst=$2
509
510   if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
511     symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
512   elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
513     symlink_to_dir $local_gl_dir "$cp_dst"
514   else
515     case $cp_dst in
516       *.[ch])             c1='/* '; c2=' */';;
517       *.texi)             c1='@c '; c2=     ;;
518       *.m4|*/Make*|Make*) c1='# ' ; c2=     ;;
519       *)                  c1=     ; c2=     ;;
520     esac
521
522     # If the destination directory doesn't exist, create it.
523     # This is required at least for "lib/uniwidth/cjk.h".
524     dst_dir=`dirname "$cp_dst"`
525     test -d "$dst_dir" || mkdir -p "$dst_dir"
526
527     if test -z "$c1"; then
528       cmp -s "$cp_src" "$cp_dst" || {
529         # Copy the file first to get proper permissions if it
530         # doesn't already exist.  Then overwrite the copy.
531         echo "$0: cp -f $cp_src $cp_dst" &&
532         rm -f "$cp_dst" &&
533         cp "$cp_src" "$cp_dst-t" &&
534         sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" &&
535         mv -f "$cp_dst-t" "$cp_dst"
536       }
537     else
538       # Copy the file first to get proper permissions if it
539       # doesn't already exist.  Then overwrite the copy.
540       cp "$cp_src" "$cp_dst-t" &&
541       (
542         echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
543         echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
544         sed "s!$bt_regex/!!g" "$cp_src"
545       ) > $cp_dst-t &&
546       if cmp -s "$cp_dst-t" "$cp_dst"; then
547         rm -f "$cp_dst-t"
548       else
549         echo "$0: cp $cp_src $cp_dst # with edits" &&
550         mv -f "$cp_dst-t" "$cp_dst"
551       fi
552     fi
553   fi
554 }
555
556 version_controlled_file() {
557   dir=$1
558   file=$2
559   found=no
560   if test -d CVS; then
561     grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
562              grep '^/[^/]*/[0-9]' > /dev/null && found=yes
563   elif test -d .git; then
564     git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
565   elif test -d .svn; then
566     svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
567   else
568     echo "$0: no version control for $dir/$file?" >&2
569   fi
570   test $found = yes
571 }
572
573 slurp() {
574   for dir in . `(cd $1 && find * -type d -print)`; do
575     copied=
576     sep=
577     for file in `ls -a $1/$dir`; do
578       case $file in
579       .|..) continue;;
580       .*) continue;; # FIXME: should all file names starting with "." be ignored?
581       esac
582       test -d $1/$dir/$file && continue
583       for excluded_file in $excluded_files; do
584         test "$dir/$file" = "$excluded_file" && continue 2
585       done
586       if test $file = Makefile.am; then
587         copied=$copied${sep}$gnulib_mk; sep=$nl
588         remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
589         sed "$remove_intl" $1/$dir/$file | cmp - $dir/$gnulib_mk > /dev/null || {
590           echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
591           rm -f $dir/$gnulib_mk &&
592           sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
593         }
594       elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
595            version_controlled_file $dir $file; then
596         echo "$0: $dir/$file overrides $1/$dir/$file"
597       else
598         copied=$copied$sep$file; sep=$nl
599         if test $file = gettext.m4; then
600           echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
601           rm -f $dir/$file
602           sed '
603             /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
604               AC_DEFUN([AM_INTL_SUBDIR], [
605             /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
606               AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
607             $a\
608               AC_DEFUN([gl_LOCK_EARLY], [])
609           ' $1/$dir/$file >$dir/$file
610         else
611           cp_mark_as_generated $1/$dir/$file $dir/$file
612         fi
613       fi || exit
614     done
615
616     for dot_ig in x $vc_ignore; do
617       test $dot_ig = x && continue
618       ig=$dir/$dot_ig
619       if test -n "$copied"; then
620         insert_sorted_if_absent $ig "$copied"
621         # If an ignored file name ends with .in.h, then also add
622         # the name with just ".h".  Many gnulib headers are generated,
623         # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc.
624         # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
625         f=`echo "$copied"|sed 's/\.in\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'`
626         insert_sorted_if_absent $ig "$f"
627
628         # For files like sys_stat.in.h and sys_time.in.h, record as
629         # ignorable the directory we might eventually create: sys/.
630         f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'`
631         insert_sorted_if_absent $ig "$f"
632       fi
633     done
634   done
635 }
636
637
638 # Create boot temporary directories to import from gnulib and gettext.
639 rm -fr $bt $bt2 &&
640 mkdir $bt $bt2 || exit
641
642 # Import from gnulib.
643
644 gnulib_tool_options="\
645  --import\
646  --no-changelog\
647  --aux-dir $bt/$build_aux\
648  --doc-base $bt/$doc_base\
649  --lib $gnulib_name\
650  --m4-base $bt/$m4_base/\
651  --source-base $bt/$source_base/\
652  --tests-base $bt/$tests_base\
653  --local-dir $local_gl_dir\
654  $gnulib_tool_option_extras\
655 "
656 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
657 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
658 slurp $bt || exit
659
660 for file in $gnulib_files; do
661   symlink_to_dir "$GNULIB_SRCDIR" $file || exit
662 done
663
664
665 # Import from gettext.
666 with_gettext=yes
667 grep '^[         ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
668     with_gettext=no
669
670 if test $with_gettext = yes; then
671   echo "$0: (cd $bt2; ${AUTOPOINT-autopoint}) ..."
672   cp configure.ac $bt2 &&
673   (cd $bt2 && ${AUTOPOINT-autopoint} && rm configure.ac) &&
674   slurp $bt2 $bt || exit
675 fi
676 rm -fr $bt $bt2 || exit
677
678 # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
679 # gnulib-populated directories.  Such .m4 files would cause aclocal to fail.
680 # The following requires GNU find 4.2.3 or newer.  Considering the usual
681 # portability constraints of this script, that may seem a very demanding
682 # requirement, but it should be ok.  Ignore any failure, which is fine,
683 # since this is only a convenience to help developers avoid the relatively
684 # unusual case in which a symlinked-to .m4 file is git-removed from gnulib
685 # between successive runs of this script.
686 find "$m4_base" "$source_base" \
687   -depth \( -name '*.m4' -o -name '*.[ch]' \) \
688   -type l -xtype l -delete > /dev/null 2>&1
689
690 # Reconfigure, getting other files.
691
692 for command in \
693   libtool \
694   "${ACLOCAL-aclocal} --force -I m4" \
695   "${AUTOCONF-autoconf} --force" \
696   "${AUTOHEADER-autoheader} --force" \
697   "${AUTOMAKE-automake} --add-missing --copy --force-missing"
698 do
699   if test "$command" = libtool; then
700     use_libtool=0
701     # We'd like to use grep -E, to see if any of LT_INIT,
702     # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
703     # but that's not portable enough (e.g., for Solaris).
704     grep '^[     ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
705       && use_libtool=1
706     grep '^[     ]*LT_INIT' configure.ac >/dev/null \
707       && use_libtool=1
708     test $use_libtool = 0 \
709       && continue
710     command="${LIBTOOLIZE-libtoolize} -c -f"
711   fi
712   echo "$0: $command ..."
713   $command || exit
714 done
715
716
717 # Get some extra files from gnulib, overriding existing files.
718 for file in $gnulib_extra_files; do
719   case $file in
720   */INSTALL) dst=INSTALL;;
721   build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
722   *) dst=$file;;
723   esac
724   symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
725 done
726
727 if test $with_gettext = yes; then
728   # Create gettext configuration.
729   echo "$0: Creating po/Makevars from po/Makevars.template ..."
730   rm -f po/Makevars
731   sed '
732     /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
733     /^MSGID_BUGS_ADDRESS *=/s/=.*/= '"$MSGID_BUGS_ADDRESS"'/
734     /^XGETTEXT_OPTIONS *=/{
735       s/$/ \\/
736       a\
737           '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
738     }
739   ' po/Makevars.template >po/Makevars
740
741   if test -d runtime-po; then
742     # Similarly for runtime-po/Makevars, but not quite the same.
743     rm -f runtime-po/Makevars
744     sed '
745       /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
746       /^subdir *=.*/s/=.*/= runtime-po/
747       /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
748       /^XGETTEXT_OPTIONS *=/{
749         s/$/ \\/
750         a\
751             '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
752       }
753     ' <po/Makevars.template >runtime-po/Makevars
754
755     # Copy identical files from po to runtime-po.
756     (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
757   fi
758 fi
759
760 echo "$0: done.  Now you can run './configure'."
761
762 # Local Variables:
763 # indent-tabs-mode: nil
764 # End: