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