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