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