]> git.saurik.com Git - bison.git/blob - bootstrap
bootstrap: fix/improve find_tool.
[bison.git] / bootstrap
1 #! /bin/sh
2
3 # Bootstrap this package from checked-out sources.
4
5 # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
6 # Free Software Foundation, Inc.
7
8 # This program is free software: you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation, either version 3 of the License, or
11 # (at your option) any later version.
12
13 # This program is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details.
17
18 # You should have received a copy of the GNU General Public License
19 # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
21 # Written by Paul Eggert.
22
23 nl='
24 '
25
26 # Ensure file names are sorted consistently across platforms.
27 # Also, ensure diagnostics are in English, e.g., "wget --help" below.
28 LC_ALL=C
29 export LC_ALL
30
31 local_gl_dir=gl
32
33 # Temporary directory names.
34 bt='._bootmp'
35 bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
36 bt2=${bt}2
37
38 usage() {
39 cat <<EOF
40 Usage: $0 [OPTION]...
41 Bootstrap this package from the checked-out sources.
42
43 Options:
44 --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
45 sources reside. Use this if you already
46 have gnulib sources on your machine, and
47 do not want to waste your bandwidth downloading
48 them again.
49 --copy Copy files instead of creating symbolic links.
50 --force Attempt to bootstrap even if the sources seem
51 not to have been checked out.
52 --skip-po Do not download po files.
53 --cvs-user=USERNAME Set the username to use when checking out
54 sources from the gnulib repository.
55
56 If the file bootstrap.conf exists in the current working directory, its
57 contents are read as shell variables to configure the bootstrap.
58
59 Running without arguments will suffice in most cases.
60 EOF
61 }
62
63 # Configuration.
64
65 # Name of the Makefile.am
66 gnulib_mk=gnulib.mk
67
68 # List of gnulib modules needed.
69 gnulib_modules=
70
71 # Any gnulib files needed that are not in modules.
72 gnulib_files=
73
74 # The command to download all .po files for a specified domain into
75 # a specified directory. Fill in the first %s is the domain name, and
76 # the second with the destination directory. Use rsync's -L and -r
77 # options because the latest/%s directory and the .po files within are
78 # all symlinks.
79 po_download_command_format=\
80 "rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'"
81
82 extract_package_name='
83 /^AC_INIT(/{
84 /.*,.*,.*,/{
85 s///
86 s/[][]//g
87 p
88 q
89 }
90 s/AC_INIT(\[*//
91 s/]*,.*//
92 s/^GNU //
93 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
94 s/[^A-Za-z0-9_]/-/g
95 p
96 }
97 '
98 package=`sed -n "$extract_package_name" configure.ac` || exit
99 gnulib_name=lib$package
100
101 build_aux=build-aux
102 # Extra files from gnulib, which override files from other sources.
103 gnulib_extra_files="
104 $build_aux/install-sh
105 $build_aux/missing
106 $build_aux/mdate-sh
107 $build_aux/texinfo.tex
108 $build_aux/depcomp
109 $build_aux/config.guess
110 $build_aux/config.sub
111 doc/INSTALL
112 "
113
114 # Additional gnulib-tool options to use. Use "\newline" to break lines.
115 gnulib_tool_option_extras=
116
117 # Other locale categories that need message catalogs.
118 EXTRA_LOCALE_CATEGORIES=
119
120 # Additional xgettext options to use. Use "\\\newline" to break lines.
121 XGETTEXT_OPTIONS='\\\
122 --flag=_:1:pass-c-format\\\
123 --flag=N_:1:pass-c-format\\\
124 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
125 '
126
127 # Files we don't want to import.
128 excluded_files=
129
130 # File that should exist in the top directory of a checked out hierarchy,
131 # but not in a distribution tarball.
132 checkout_only_file=HACKING
133
134 # Whether to use copies instead of symlinks.
135 copy=false
136
137 # Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
138 # those files to be generated in directories like lib/, m4/, and po/.
139 # Or set it to 'auto' to make this script select which to use based
140 # on which version control system (if any) is used in the source directory.
141 vc_ignore=auto
142
143 # find_tool ENVVAR NAMES...
144 # -------------------------
145 # Look for some needed program. Use the value of the ENVVAR if set,
146 # otherwise look for the first of the NAMES that can be run (i.e.,
147 # supports --version). If found, set ENVVAR to the program name,
148 # die otherwise.
149 find_tool ()
150 {
151 # Find sha1sum, named gsha1sum on MacPorts.
152 find_tool_envvar=$1
153 shift
154 find_tool_names=$@
155 eval "find_tool_res=\$$find_tool_envvar"
156 if test x"$find_tool_res" = x; then
157 for i
158 do
159 if ($i --version </dev/null) >/dev/null 2>&1; then
160 find_tool_res=$i
161 break
162 fi
163 done
164 else
165 find_tool_error_prefix="\$$find_tool_envvar: "
166 fi
167 if test x"$find_tool_res" = x; then
168 echo >&2 "$0: one of these is required: $find_tool_names"
169 exit 1
170 fi
171 ($find_tool_res --version </dev/null) >/dev/null 2>&1 || {
172 echo >&2 "$0: ${find_tool_error_prefix}cannot run $find_tool_res --version"
173 exit 1
174 }
175 eval "$find_tool_envvar=\$find_tool_res"
176 eval "export $find_tool_envvar"
177 }
178
179 # Find sha1sum, named gsha1sum on MacPorts.
180 find_tool SHA1SUM sha1sum gsha1sum
181
182 # Override the default configuration, if necessary.
183 test -r bootstrap.conf && . ./bootstrap.conf
184
185 if test "$vc_ignore" = auto; then
186 vc_ignore=
187 test -d .git && vc_ignore=.gitignore
188 test -d CVS && vc_ignore="$vc_ignore .cvsignore"
189 fi
190
191 # Translate configuration into internal form.
192
193 # Parse options.
194
195 for option
196 do
197 case $option in
198 --help)
199 usage
200 exit;;
201 --gnulib-srcdir=*)
202 GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
203 --cvs-user=*)
204 CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
205 --skip-po)
206 SKIP_PO=t;;
207 --force)
208 checkout_only_file=;;
209 --copy)
210 copy=true;;
211 *)
212 echo >&2 "$0: $option: unknown option"
213 exit 1;;
214 esac
215 done
216
217 if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
218 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
219 exit 1
220 fi
221
222 # If each line in $STR is not already on a line by itself in $FILE, insert it,
223 # sorting the new contents of the file and replacing $FILE with the result.
224 insert_sorted_if_absent() {
225 file=$1
226 str=$2
227 test -f $file || touch $file
228 echo "$str" | sort -u - $file | cmp -s - $file \
229 || echo "$str" | sort -u - $file -o $file \
230 || exit 1
231 }
232
233 # Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
234 # insert_sorted_if_absent.
235 insert_vc_ignore() {
236 vc_ignore_file="$1"
237 case $vc_ignore_file in
238 *.gitignore)
239 # A .gitignore entry that does not start with `/' applies recursively to
240 # subdirectories, so prepend `/' to every .gitignore entry.
241 pattern=`echo "$2" | sed s,^,/,`;;
242 *)
243 pattern="$2";;
244 esac
245 insert_sorted_if_absent "$vc_ignore_file" "$pattern"
246 }
247
248 # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
249 found_aux_dir=no
250 grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
251 >/dev/null && found_aux_dir=yes
252 grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
253 >/dev/null && found_aux_dir=yes
254 if test $found_aux_dir = no; then
255 echo "$0: expected line not found in configure.ac. Add the following:" >&2
256 echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2
257 exit 1
258 fi
259
260 # If $build_aux doesn't exist, create it now, otherwise some bits
261 # below will malfunction. If creating it, also mark it as ignored.
262 if test ! -d $build_aux; then
263 mkdir $build_aux
264 for dot_ig in x $vc_ignore; do
265 test $dot_ig = x && continue
266 insert_vc_ignore $dot_ig $build_aux
267 done
268 fi
269
270 echo "$0: Bootstrapping from checked-out $package sources..."
271
272 cleanup_gnulib() {
273 status=$?
274 rm -fr gnulib
275 exit $status
276 }
277
278 # See if we can use gnulib's git-merge-changelog merge driver.
279
280 if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
281 if git config merge.merge-changelog.driver >/dev/null ; then
282 :
283 elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
284 echo "initializing git-merge-changelog driver"
285 git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
286 git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
287 else
288 echo "consider installing git-merge-changelog from gnulib"
289 fi
290 fi
291
292 # Get gnulib files.
293
294 case ${GNULIB_SRCDIR--} in
295 -)
296 if [ ! -d gnulib ]; then
297 echo "$0: getting gnulib files..."
298
299 case ${CVS_AUTH-pserver} in
300 pserver)
301 CVS_PREFIX=':pserver:anonymous@';;
302 ssh)
303 CVS_PREFIX="$CVS_USER${CVS_USER+@}";;
304 *)
305 echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
306 exit 1;;
307 esac
308
309 case $CVS_RSH in
310 '') CVS_RSH=ssh; export CVS_RSH;;
311 esac
312
313 trap cleanup_gnulib 1 2 13 15
314
315 cvs -z3 -q -d ${CVS_PREFIX}pserver.git.sv.gnu.org:/gnulib.git co -d gnulib HEAD ||
316 cleanup_gnulib
317
318 trap - 1 2 13 15
319 fi
320 GNULIB_SRCDIR=gnulib
321 esac
322
323 gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
324 <$gnulib_tool || exit
325
326 # Get translations.
327
328 download_po_files() {
329 subdir=$1
330 domain=$2
331 echo "$0: getting translations into $subdir for $domain..."
332 cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
333 eval "$cmd"
334 }
335
336 # Download .po files to $po_dir/.reference and copy only the new
337 # or modified ones into $po_dir. Also update $po_dir/LINGUAS.
338 update_po_files() {
339 # Directory containing primary .po files.
340 # Overwrite them only when we're sure a .po file is new.
341 po_dir=$1
342 domain=$2
343
344 # Download *.po files into this dir.
345 # Usually contains *.s1 checksum files.
346 ref_po_dir="$po_dir/.reference"
347
348 test -d $ref_po_dir || mkdir $ref_po_dir || return
349 download_po_files $ref_po_dir $domain \
350 && ls "$ref_po_dir"/*.po 2>/dev/null |
351 sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS"
352
353 for po in `cd $ref_po_dir && echo *.po|sed 's/\.po//g'`; do
354 new_po="$ref_po_dir/$po.po"
355 cksum_file="$ref_po_dir/$po.s1"
356 if ! "$SHA1SUM" -c --status "$cksum_file" < "$new_po" > /dev/null; then
357 echo "updated $po_dir/$po.po..."
358 cp "$new_po" "$po_dir/$po.po" && "$SHA1SUM" < "$new_po" > "$cksum_file"
359 fi
360 done
361 }
362
363 case $SKIP_PO in
364 '')
365 if test -d po; then
366 update_po_files po $package || exit
367 fi
368
369 if test -d runtime-po; then
370 update_po_files runtime-po $package-runtime || exit
371 fi;;
372 esac
373
374 check_dst_dir()
375 {
376 dst=$1
377 # If the destination directory doesn't exist, create it.
378 # This is required at least for "lib/uniwidth/cjk.h".
379 dst_dir=`dirname "$dst"`
380 if ! test -d "$dst_dir"; then
381 mkdir -p "$dst_dir"
382
383 # If we've just created a directory like lib/uniwidth,
384 # tell version control system(s) it's ignorable.
385 # FIXME: for now, this does only one level
386 parent=`dirname "$dst_dir"`
387 for dot_ig in x $vc_ignore; do
388 test $dot_ig = x && continue
389 ig=$parent/$dot_ig
390 insert_vc_ignore $ig `echo "$dst_dir"|sed 's,.*/,,'`
391 done
392 fi
393 }
394
395 symlink_to_dir()
396 {
397 src=$1/$2
398 dst=${3-$2}
399
400 test -f "$src" && {
401
402 check_dst_dir "$dst"
403
404 if $copy; then
405 {
406 test ! -h "$dst" || {
407 echo "$0: rm -f $dst" &&
408 rm -f "$dst"
409 }
410 } &&
411 test -f "$dst" &&
412 cmp -s "$src" "$dst" || {
413 echo "$0: cp -fp $src $dst" &&
414 cp -fp "$src" "$dst"
415 }
416 else
417 test -h "$dst" &&
418 src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
419 dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
420 test "$src_i" = "$dst_i" || {
421 dot_dots=
422 case $src in
423 /*) ;;
424 *)
425 case /$dst/ in
426 *//* | */../* | */./* | /*/*/*/*/*/)
427 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
428 exit 1;;
429 /*/*/*/*/) dot_dots=../../../;;
430 /*/*/*/) dot_dots=../../;;
431 /*/*/) dot_dots=../;;
432 esac;;
433 esac
434
435 echo "$0: ln -fs $dot_dots$src $dst" &&
436 ln -fs "$dot_dots$src" "$dst"
437 }
438 fi
439 }
440 }
441
442 cp_mark_as_generated()
443 {
444 cp_src=$1
445 cp_dst=$2
446
447 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
448 symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
449 elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
450 symlink_to_dir $local_gl_dir "$cp_dst"
451 else
452 case $cp_dst in
453 *.[ch]) c1='/* '; c2=' */';;
454 *.texi) c1='@c '; c2= ;;
455 *.m4|*/Make*|Make*) c1='# ' ; c2= ;;
456 *) c1= ; c2= ;;
457 esac
458
459 if test -z "$c1"; then
460 cmp -s "$cp_src" "$cp_dst" || {
461 echo "$0: cp -f $cp_src $cp_dst" &&
462 rm -f "$cp_dst" &&
463 sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst"
464 }
465 else
466 check_dst_dir "$cp_dst"
467 # Copy the file first to get proper permissions if it
468 # doesn't already exist. Then overwrite the copy.
469 cp "$cp_src" "$cp_dst-t" &&
470 (
471 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
472 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
473 sed "s!$bt_regex/!!g" "$cp_src"
474 ) > $cp_dst-t &&
475 if cmp -s "$cp_dst-t" "$cp_dst"; then
476 rm -f "$cp_dst-t"
477 else
478 echo "$0: cp $cp_src $cp_dst # with edits" &&
479 mv -f "$cp_dst-t" "$cp_dst"
480 fi
481 fi
482 fi
483 }
484
485 version_controlled_file() {
486 dir=$1
487 file=$2
488 found=no
489 if test -d CVS; then
490 grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
491 grep '^/[^/]*/[0-9]' > /dev/null && found=yes
492 elif test -d .git; then
493 git-rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
494 else
495 echo "$0: no version control for $dir/$file?" >&2
496 fi
497 test $found = yes
498 }
499
500 slurp() {
501 for dir in . `(cd $1 && find * -type d -print)`; do
502 copied=
503 sep=
504 for file in `ls -a $1/$dir`; do
505 case $file in
506 .|..) continue;;
507 .*) continue;; # FIXME: should all file names starting with "." be ignored?
508 esac
509 test -d $1/$dir/$file && continue
510 for excluded_file in $excluded_files; do
511 test "$dir/$file" = "$excluded_file" && continue 2
512 done
513 if test $file = Makefile.am; then
514 copied=$copied${sep}$gnulib_mk; sep=$nl
515 remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
516 echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..."
517 rm -f $dir/$gnulib_mk
518 sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk
519 etc/prefix-gnulib-mk $dir/$gnulib_mk
520 elif { test "${2+set}" = set && test -r $2/$dir/$file; } ||
521 version_controlled_file $dir $file; then
522 echo "$0: $dir/$file overrides $1/$dir/$file"
523 else
524 copied=$copied$sep$file; sep=$nl
525 if test $file = gettext.m4; then
526 echo "$0: patching m4/gettext.m4 to remove need for intl/* ..."
527 rm -f $dir/$file
528 sed '
529 /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\
530 AC_DEFUN([AM_INTL_SUBDIR], [
531 /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\
532 AC_DEFUN([gt_INTL_SUBDIR_CORE], [])
533 $a\
534 AC_DEFUN([gl_LOCK_EARLY], [])
535 ' $1/$dir/$file >$dir/$file
536 else
537 cp_mark_as_generated $1/$dir/$file $dir/$file
538 fi
539 fi || exit
540 done
541
542 for dot_ig in x $vc_ignore; do
543 test $dot_ig = x && continue
544 ig=$dir/$dot_ig
545 if test -n "$copied"; then
546 insert_vc_ignore $ig "$copied"
547 # If an ignored file name ends with _.h, then also add
548 # the name with just ".h". Many gnulib headers are generated,
549 # e.g., stdint_.h -> stdint.h, dirent_.h ->..., etc.
550 # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed
551 f=`echo "$copied"|sed 's/_\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'`
552 insert_vc_ignore $ig "$f"
553
554 # For files like sys_stat_.h and sys_time_.h, record as
555 # ignorable the directory we might eventually create: sys/.
556 f=`echo "$copied"|sed 's/sys_.*_\.h$/sys/'`
557 insert_vc_ignore $ig "$f"
558 fi
559 done
560 done
561 }
562
563
564 # Create boot temporary directories to import from gnulib and gettext.
565 rm -fr $bt $bt2 &&
566 mkdir $bt $bt2 || exit
567
568 # Import from gnulib.
569
570 gnulib_tool_options="\
571 --import\
572 --no-changelog\
573 --aux-dir $bt/$build_aux\
574 --doc-base $bt/doc\
575 --lib $gnulib_name\
576 --m4-base $bt/m4/\
577 --source-base $bt/lib/\
578 --tests-base $bt/tests\
579 --local-dir $local_gl_dir\
580 $gnulib_tool_option_extras\
581 "
582 echo "$0: $gnulib_tool $gnulib_tool_options --import ..."
583 $gnulib_tool $gnulib_tool_options --import $gnulib_modules &&
584 slurp $bt || exit
585
586 for file in $gnulib_files; do
587 symlink_to_dir "$GNULIB_SRCDIR" $file || exit
588 done
589
590
591 # Import from gettext.
592 with_gettext=yes
593 grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \
594 with_gettext=no
595
596 if test $with_gettext = yes; then
597 echo "$0: (cd $bt2; autopoint) ..."
598 cp configure.ac $bt2 &&
599 (cd $bt2 && autopoint && rm configure.ac) &&
600 slurp $bt2 $bt || exit
601
602 rm -fr $bt $bt2 || exit
603 fi
604
605 # Coreutils is unusual in that it generates some of its test-related
606 # Makefile.am files. That must be done before invoking automake.
607 mam_template=tests/Makefile.am.in
608 if test -f $mam_template; then
609 PERL=perl
610 for tool in cut head join pr sort tac tail test tr uniq wc; do
611 m=tests/$tool/Makefile.am
612 t=${m}t
613 rm -f $m $t
614 sed -n '1,/^##test-files-begin/p' $mam_template > $t
615 echo "x = $tool" >> $t
616 srcdir=tests/$tool
617 $PERL -I$srcdir -w -- tests/mk-script $srcdir --list >> $t
618 sed -n '/^##test-files-end/,$p' $mam_template >> $t
619 chmod -w $t
620 mv $t $m
621 done
622 fi
623
624 # Reconfigure, getting other files.
625
626 for command in \
627 libtool \
628 'aclocal --force -I m4' \
629 'autoconf --force' \
630 'autoheader --force' \
631 'automake --add-missing --copy --force-missing';
632 do
633 if test "$command" = libtool; then
634 grep '^[ ]*AM_PROG_LIBTOOL\>' configure.ac >/dev/null ||
635 continue
636 command='libtoolize -c -f'
637 fi
638 echo "$0: $command ..."
639 $command || exit
640 done
641
642
643 # Get some extra files from gnulib, overriding existing files.
644 for file in $gnulib_extra_files; do
645 case $file in
646 */INSTALL) dst=INSTALL;;
647 build-aux/*) dst=$build_aux/`expr "$file" : 'build-aux/\(.*\)'`;;
648 *) dst=$file;;
649 esac
650 symlink_to_dir "$GNULIB_SRCDIR" $file $dst || exit
651 done
652
653 if test $with_gettext = yes; then
654 # Create gettext configuration.
655 echo "$0: Creating po/Makevars from po/Makevars.template ..."
656 rm -f po/Makevars
657 sed '
658 /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/
659 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
660 /^XGETTEXT_OPTIONS *=/{
661 s/$/ \\/
662 a\
663 '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+}
664 }
665 ' po/Makevars.template >po/Makevars
666
667 if test -d runtime-po; then
668 # Similarly for runtime-po/Makevars, but not quite the same.
669 rm -f runtime-po/Makevars
670 sed '
671 /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/
672 /^subdir *=.*/s/=.*/= runtime-po/
673 /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/
674 /^XGETTEXT_OPTIONS *=/{
675 s/$/ \\/
676 a\
677 '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+}
678 }
679 ' <po/Makevars.template >runtime-po/Makevars
680
681 # Copy identical files from po to runtime-po.
682 (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
683 fi
684 fi
685
686 echo "$0: done. Now you can run './configure'."