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