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