comparison bootstrap @ 9946:55061c7c8d6e

start using gnulib
author John W. Eaton <jwe@octave.org>
date Wed, 09 Dec 2009 01:36:50 -0500
parents
children dcee31e49f86
comparison
equal deleted inserted replaced
9945:b4661b498a7e 9946:55061c7c8d6e
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 # 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.
192 find_tool SHA1SUM sha1sum gsha1sum
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 's/[^0-9.]*\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/p
318 t done
319 d
320 :done
321 q'
322 }
323
324 check_versions() {
325 ret=0
326
327 while read app req_ver; do
328 # Honor $APP variables ($TAR, $AUTOCONF, etc.)
329 appvar=`echo $app | tr '[a-z]' '[A-Z]'`
330 test "$appvar" = TAR && appvar=AMTAR
331 eval "app=\${$appvar-$app}"
332 inst_ver=$(get_version $app)
333 if [ ! "$inst_ver" ]; then
334 echo "Error: '$app' not found" >&2
335 ret=1
336 elif [ ! "$req_ver" = "-" ]; then
337 latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2)
338 if [ ! "$latest_ver" = "$inst_ver" ]; then
339 echo "Error: '$app' version == $inst_ver is too old" >&2
340 echo " '$app' version >= $req_ver is required" >&2
341 ret=1
342 fi
343 fi
344 done
345
346 return $ret
347 }
348
349 print_versions() {
350 echo "Program Min_version"
351 echo "----------------------"
352 printf "$buildreq"
353 echo "----------------------"
354 # can't depend on column -t
355 }
356
357 if ! printf "$buildreq" | check_versions; then
358 test -f README-prereq &&
359 echo "See README-prereq for notes on obtaining these prerequisite programs:" >&2
360 echo
361 print_versions
362 exit 1
363 fi
364
365 echo "$0: Bootstrapping from checked-out $package sources..."
366
367 # See if we can use gnulib's git-merge-changelog merge driver.
368 if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
369 if git config merge.merge-changelog.driver >/dev/null ; then
370 :
371 elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
372 echo "initializing git-merge-changelog driver"
373 git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
374 git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
375 else
376 echo "consider installing git-merge-changelog from gnulib"
377 fi
378 fi
379
380
381 cleanup_gnulib() {
382 status=$?
383 rm -fr gnulib
384 exit $status
385 }
386
387 git_modules_config () {
388 test -f .gitmodules && git config --file .gitmodules "$@"
389 }
390
391 # Get gnulib files.
392
393 case ${GNULIB_SRCDIR--} in
394 -)
395 if git_modules_config submodule.gnulib.url >/dev/null; then
396 echo "$0: getting gnulib files..."
397 git submodule init || exit $?
398 git submodule update || exit $?
399
400 elif [ ! -d gnulib ]; then
401 echo "$0: getting gnulib files..."
402
403 trap cleanup_gnulib 1 2 13 15
404
405 git clone --help|grep depth > /dev/null && shallow='--depth 2' || shallow=
406 git clone $shallow git://git.sv.gnu.org/gnulib ||
407 cleanup_gnulib
408
409 trap - 1 2 13 15
410 fi
411 GNULIB_SRCDIR=gnulib
412 ;;
413 *)
414 # Redirect the gnulib submodule to the directory on the command line
415 # if possible.
416 if test -d "$GNULIB_SRCDIR"/.git && \
417 git_modules_config submodule.gnulib.url >/dev/null; then
418 git submodule init
419 GNULIB_SRCDIR=`cd $GNULIB_SRCDIR && pwd`
420 git_modules_config --replace-all submodule.gnulib.url $GNULIB_SRCDIR
421 echo "$0: getting gnulib files..."
422 git submodule update || exit $?
423 GNULIB_SRCDIR=gnulib
424 fi
425 ;;
426 esac
427
428 gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
429 <$gnulib_tool || exit
430
431 # Get translations.
432
433 download_po_files() {
434 subdir=$1
435 domain=$2
436 echo "$0: getting translations into $subdir for $domain..."
437 cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
438 eval "$cmd"
439 }
440
441 # Download .po files to $po_dir/.reference and copy only the new
442 # or modified ones into $po_dir. Also update $po_dir/LINGUAS.
443 update_po_files() {
444 # Directory containing primary .po files.
445 # Overwrite them only when we're sure a .po file is new.
446 po_dir=$1
447 domain=$2
448
449 # Download *.po files into this dir.
450 # Usually contains *.s1 checksum files.
451 ref_po_dir="$po_dir/.reference"
452
453 test -d $ref_po_dir || mkdir $ref_po_dir || return
454 download_po_files $ref_po_dir $domain \
455 && ls "$ref_po_dir"/*.po 2>/dev/null |
456 sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS"
457
458 langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'`
459 test "$langs" = '*' && langs=x
460 for po in $langs; do
461 case $po in x) continue;; esac
462 new_po="$ref_po_dir/$po.po"
463 cksum_file="$ref_po_dir/$po.s1"
464 if ! test -f "$cksum_file" ||
465 ! test -f "$po_dir/$po.po" ||
466 ! $SHA1SUM -c --status "$cksum_file" \
467 < "$new_po" > /dev/null; then
468 echo "updated $po_dir/$po.po..."
469 cp "$new_po" "$po_dir/$po.po" \
470 && $SHA1SUM < "$new_po" > "$cksum_file"
471 fi
472 done
473 }
474
475 case $SKIP_PO in
476 '')
477 if test -d po; then
478 update_po_files po $package || exit
479 fi
480
481 if test -d runtime-po; then
482 update_po_files runtime-po $package-runtime || exit
483 fi;;
484 esac
485
486 symlink_to_dir()
487 {
488 src=$1/$2
489 dst=${3-$2}
490
491 test -f "$src" && {
492
493 # If the destination directory doesn't exist, create it.
494 # This is required at least for "lib/uniwidth/cjk.h".
495 dst_dir=`dirname "$dst"`
496 if ! test -d "$dst_dir"; then
497 mkdir -p "$dst_dir"
498
499 # If we've just created a directory like lib/uniwidth,
500 # tell version control system(s) it's ignorable.
501 # FIXME: for now, this does only one level
502 parent=`dirname "$dst_dir"`
503 for dot_ig in x $vc_ignore; do
504 test $dot_ig = x && continue
505 ig=$parent/$dot_ig
506 insert_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'`
507 done
508 fi
509
510 if $copy; then
511 {
512 test ! -h "$dst" || {
513 echo "$0: rm -f $dst" &&
514 rm -f "$dst"
515 }
516 } &&
517 test -f "$dst" &&
518 cmp -s "$src" "$dst" || {
519 echo "$0: cp -fp $src $dst" &&
520 cp -fp "$src" "$dst"
521 }
522 else
523 test -h "$dst" &&
524 src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
525 dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
526 test "$src_i" = "$dst_i" || {
527 dot_dots=
528 case $src in
529 /*) ;;
530 *)
531 case /$dst/ in
532 *//* | */../* | */./* | /*/*/*/*/*/)
533 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
534 exit 1;;
535 /*/*/*/*/) dot_dots=../../../;;
536 /*/*/*/) dot_dots=../../;;
537 /*/*/) dot_dots=../;;
538 esac;;
539 esac
540
541 echo "$0: ln -fs $dot_dots$src $dst" &&
542 ln -fs "$dot_dots$src" "$dst"
543 }
544 fi
545 }
546 }
547
548 cp_mark_as_generated()
549 {
550 cp_src=$1
551 cp_dst=$2
552
553 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
554 symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
555 elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
556 symlink_to_dir $local_gl_dir "$cp_dst"
557 else
558 case $cp_dst in
559 *.[ch]) c1='/* '; c2=' */';;
560 *.texi) c1='@c '; c2= ;;
561 *.m4|*/Make*|Make*) c1='# ' ; c2= ;;
562 *) c1= ; c2= ;;
563 esac
564
565 # If the destination directory doesn't exist, create it.
566 # This is required at least for "lib/uniwidth/cjk.h".
567 dst_dir=`dirname "$cp_dst"`
568 test -d "$dst_dir" || mkdir -p "$dst_dir"
569
570 if test -z "$c1"; then
571 cmp -s "$cp_src" "$cp_dst" || {
572 # Copy the file first to get proper permissions if it
573 # doesn't already exist. Then overwrite the copy.
574 echo "$0: cp -f $cp_src $cp_dst" &&
575 rm -f "$cp_dst" &&
576 cp "$cp_src" "$cp_dst-t" &&
577 sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" &&
578 mv -f "$cp_dst-t" "$cp_dst"
579 }
580 else
581 # Copy the file first to get proper permissions if it
582 # doesn't already exist. Then overwrite the copy.
583 cp "$cp_src" "$cp_dst-t" &&
584 (
585 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
586 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
587 sed "s!$bt_regex/!!g" "$cp_src"
588 ) > $cp_dst-t &&
589 if cmp -s "$cp_dst-t" "$cp_dst"; then
590 rm -f "$cp_dst-t"
591 else
592 echo "$0: cp $cp_src $cp_dst # with edits" &&
593 mv -f "$cp_dst-t" "$cp_dst"
594 fi
595 fi
596 fi
597 }
598
599 version_controlled_file() {
600 dir=$1
601 file=$2
602 found=no
603 if test -d CVS; then
604 grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
605 grep '^/[^/]*/[0-9]' > /dev/null && found=yes
606 elif test -d .git; then
607 git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
608 elif test -d .svn; then
609 svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes
610 else
611 echo "$0: no version control for $dir/$file?" >&2
612 fi
613 test $found = yes
614 }
615
616 slurp() {
617 for dir in . `(cd $1 && find * -type d -print)`; do
618 copied=
619 sep=
620 for file in `ls -a $1/$dir`; do
621 case $file in
622 .|..) continue;;
623 .*) continue;; # FIXME: should all file names starting with "." be ignored?
624 esac
625 test -d $1/$dir/$file && continue
626 for excluded_file in $excluded_files; do
627 test "$dir/$file" = "$excluded_file" && continue 2
628 done
629 if test $file = Makefile.am; then
630 copied=$copied${sep}$gnulib_mk; sep=$nl
631 remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
632 sed "$remove_intl" $1/$dir/$file | cmp - $dir/$gnulib_mk > /dev/null || {
633 echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." &&
634 rm -f $dir/$gnulib_mk &&
635 sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
636 }
637 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
638 version_controlled_file $dir $file; then
639 echo "$0: $dir/$file overrides $1/$dir/$file"
640 else
641 copied=$copied$sep$file; sep=$nl
642 if test $file = gettext.m4; then
643 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
644 rm -f $dir/$file
645 sed '
646 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
647 AC_DEFUN([AM_INTL_SUBDIR], [
648 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
649 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
650 $a\
651 AC_DEFUN([gl_LOCK_EARLY], [])
652 ' $1/$dir/$file >$dir/$file
653 else
654 cp_mark_as_generated $1/$dir/$file $dir/$file
655 fi
656 fi || exit
657 done
658
659 for dot_ig in x $vc_ignore; do
660 test $dot_ig = x && continue
661 ig=$dir/$dot_ig
662 if test -n "$copied"; then
663 insert_sorted_if_absent $ig "$copied"
664 # If an ignored file name ends with .in.h, then also add
665 # the name with just ".h". Many gnulib headers are generated,
666 # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc.
667 # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
668 f=`echo "$copied"|sed 's/\.in\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'`
669 insert_sorted_if_absent $ig "$f"
670
671 # For files like sys_stat.in.h and sys_time.in.h, record as
672 # ignorable the directory we might eventually create: sys/.
673 f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'`
674 insert_sorted_if_absent $ig "$f"
675 fi
676 done
677 done
678 }
679
680
681 # Create boot temporary directories to import from gnulib and gettext.
682 rm -fr $bt $bt2 &&
683 mkdir $bt $bt2 || exit
684
685 # Import from gnulib.
686
687 gnulib_tool_options="\
688 --import\
689 --no-changelog\
690 --aux-dir $bt/$build_aux\
691 --doc-base $bt/$doc_base\
692 --lib $gnulib_name\
693 --m4-base $bt/$m4_base/\
694 --source-base $bt/$source_base/\
695 --tests-base $bt/$tests_base\
696 --local-dir $local_gl_dir\
697 $gnulib_tool_option_extras\
698 "
699 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
700 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
701 slurp $bt || exit
702
703 for file in $gnulib_files; do
704 symlink_to_dir "$GNULIB_SRCDIR" $file || exit
705 done
706
707
708 # Import from gettext.
709 with_gettext=yes
710 grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
711 with_gettext=no
712
713 if test $with_gettext = yes; then
714 echo "$0: (cd $bt2; ${AUTOPOINT-autopoint}) ..."
715 cp configure.ac $bt2 &&
716 (cd $bt2 && ${AUTOPOINT-autopoint} && rm configure.ac) &&
717 slurp $bt2 $bt || exit
718 fi
719 rm -fr $bt $bt2 || exit
720
721 # Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
722 # gnulib-populated directories. Such .m4 files would cause aclocal to fail.
723 # The following requires GNU find 4.2.3 or newer. Considering the usual
724 # portability constraints of this script, that may seem a very demanding
725 # requirement, but it should be ok. Ignore any failure, which is fine,
726 # since this is only a convenience to help developers avoid the relatively
727 # unusual case in which a symlinked-to .m4 file is git-removed from gnulib
728 # between successive runs of this script.
729 find "$m4_base" "$source_base" \
730 -depth \( -name '*.m4' -o -name '*.[ch]' \) \
731 -type l -xtype l -delete > /dev/null 2>&1
732
733 # Reconfigure, getting other files.
734
735 # Skip autoheader if it's not needed.
736 grep -E '^[ ]*AC_CONFIG_HEADERS?\>' configure.ac >/dev/null ||
737 AUTOHEADER=true
738
739 for command in \
740 libtool \
741 "${ACLOCAL-aclocal} --force -I m4" \
742 "${AUTOCONF-autoconf} --force" \
743 "${AUTOHEADER-autoheader} --force" \
744 "${AUTOMAKE-automake} --add-missing --copy --force-missing"
745 do
746 if test "$command" = libtool; then
747 use_libtool=0
748 # We'd like to use grep -E, to see if any of LT_INIT,
749 # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac,
750 # but that's not portable enough (e.g., for Solaris).
751 grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \
752 && use_libtool=1
753 grep '^[ ]*LT_INIT' configure.ac >/dev/null \
754 && use_libtool=1
755 test $use_libtool = 0 \
756 && continue
757 command="${LIBTOOLIZE-libtoolize} -c -f"
758 fi
759 echo "$0: $command ..."
760 $command || exit
761 done
762
763
764 # Get some extra files from gnulib, overriding existing files.
765 for file in $gnulib_extra_files; do
766 case $file in
767 */INSTALL) dst=INSTALL;;
768 build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
769 *) dst=$file;;
770 esac
771 symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
772 done
773
774 if test $with_gettext = yes; then
775 # Create gettext configuration.
776 echo "$0: Creating po/Makevars from po/Makevars.template ..."
777 rm -f po/Makevars
778 sed '
779 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
780 /^MSGID_BUGS_ADDRESS *=/s/=.*/= '"$MSGID_BUGS_ADDRESS"'/
781 /^XGETTEXT_OPTIONS *=/{
782 s/$/ \\/
783 a\
784 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
785 }
786 ' po/Makevars.template >po/Makevars
787
788 if test -d runtime-po; then
789 # Similarly for runtime-po/Makevars, but not quite the same.
790 rm -f runtime-po/Makevars
791 sed '
792 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
793 /^subdir *=.*/s/=.*/= runtime-po/
794 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
795 /^XGETTEXT_OPTIONS *=/{
796 s/$/ \\/
797 a\
798 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
799 }
800 ' <po/Makevars.template >runtime-po/Makevars
801
802 # Copy identical files from po to runtime-po.
803 (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
804 fi
805 fi
806
807 bootstrap_epilogue
808
809 echo "$0: done. Now you can run './configure'."
810
811 # Local Variables:
812 # indent-tabs-mode: nil
813 # End: