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