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