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