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