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