OSDN Git Service

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