]> git.saurik.com Git - bison.git/blob - bootstrap
maint: run "make update-copyright"
[bison.git] / bootstrap
1 #! /bin/sh
2
3 # Bootstrap this package from checked-out sources.
4
5 # Copyright (C) 2003-2010 Free Software Foundation, Inc.
6
7 # This program is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
11
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16
17 # You should have received a copy of the GNU General Public License
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
20 # Written by Paul Eggert.
21
22 nl='
23 '
24
25 # Ensure file names are sorted consistently across platforms.
26 # Also, ensure diagnostics are in English, e.g., "wget --help" below.
27 LC_ALL=C
28 export LC_ALL
29
30 local_gl_dir=gl
31
32 # Temporary directory names.
33 bt='._bootmp'
34 bt_regex=`echo "$bt"| sed 's/\./[.]/g'`
35 bt2=${bt}2
36
37 usage() {
38 cat <<EOF
39 Usage: $0 [OPTION]...
40 Bootstrap this package from the checked-out sources.
41
42 Options:
43 --gnulib-srcdir=DIRNAME Specify the local directory where gnulib
44 sources reside. Use this if you already
45 have gnulib sources on your machine, and
46 do not want to waste your bandwidth downloading
47 them again.
48 --copy Copy files instead of creating symbolic links.
49 --force Attempt to bootstrap even if the sources seem
50 not to have been checked out.
51 --skip-po Do not download po files.
52 --cvs-user=USERNAME Set the username to use when checking out
53 sources from the gnulib repository.
54
55 If the file bootstrap.conf exists in the current working directory, its
56 contents are read as shell variables to configure the bootstrap.
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 # The command to download all .po files for a specified domain into
74 # a specified directory. Fill in the first %s is the domain name, and
75 # the second with the destination directory. Use rsync's -L and -r
76 # options because the latest/%s directory and the .po files within are
77 # all symlinks.
78 po_download_command_format=\
79 "rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'"
80
81 extract_package_name='
82 /^AC_INIT(/{
83 /.*,.*,.*,/{
84 s///
85 s/[][]//g
86 p
87 q
88 }
89 s/AC_INIT(\[*//
90 s/]*,.*//
91 s/^GNU //
92 y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
93 s/[^A-Za-z0-9_]/-/g
94 p
95 }
96 '
97 package=`sed -n "$extract_package_name" configure.ac` || exit
98 gnulib_name=lib$package
99
100 build_aux=build-aux
101 # Extra files from gnulib, which override files from other sources.
102 gnulib_extra_files="
103 $build_aux/install-sh
104 $build_aux/missing
105 $build_aux/mdate-sh
106 $build_aux/texinfo.tex
107 $build_aux/depcomp
108 $build_aux/config.guess
109 $build_aux/config.sub
110 doc/INSTALL
111 "
112
113 # Additional gnulib-tool options to use. Use "\newline" to break lines.
114 gnulib_tool_option_extras=
115
116 # Other locale categories that need message catalogs.
117 EXTRA_LOCALE_CATEGORIES=
118
119 # Additional xgettext options to use. Use "\\\newline" to break lines.
120 XGETTEXT_OPTIONS='\\\
121 --flag=_:1:pass-c-format\\\
122 --flag=N_:1:pass-c-format\\\
123 --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
124 '
125
126 # Files we don't want to import.
127 excluded_files=
128
129 # File that should exist in the top directory of a checked out hierarchy,
130 # but not in a distribution tarball.
131 checkout_only_file=HACKING
132
133 # Whether to use copies instead of symlinks.
134 copy=false
135
136 # Set this to '.cvsignore .gitignore' in bootstrap.conf if you want
137 # those files to be generated in directories like lib/, m4/, and po/.
138 # Or set it to 'auto' to make this script select which to use based
139 # on which version control system (if any) is used in the source directory.
140 vc_ignore=auto
141
142 # find_tool ENVVAR NAMES...
143 # -------------------------
144 # Look for some needed program. Use the value of the ENVVAR if set,
145 # otherwise look for the first of the NAMES that can be run (i.e.,
146 # supports --version). If found, set ENVVAR to the program name,
147 # die otherwise.
148 find_tool ()
149 {
150 # Find sha1sum, named gsha1sum on MacPorts.
151 find_tool_envvar=$1
152 shift
153 find_tool_names=$@
154 eval "find_tool_res=\$$find_tool_envvar"
155 if test x"$find_tool_res" = x; then
156 for i
157 do
158 if ($i --version </dev/null) >/dev/null 2>&1; then
159 find_tool_res=$i
160 break
161 fi
162 done
163 else
164 find_tool_error_prefix="\$$find_tool_envvar: "
165 fi
166 if test x"$find_tool_res" = x; then
167 echo >&2 "$0: one of these is required: $find_tool_names"
168 exit 1
169 fi
170 ($find_tool_res --version </dev/null) >/dev/null 2>&1 || {
171 echo >&2 "$0: ${find_tool_error_prefix}cannot run $find_tool_res --version"
172 exit 1
173 }
174 eval "$find_tool_envvar=\$find_tool_res"
175 eval "export $find_tool_envvar"
176 }
177
178 # Find sha1sum, named gsha1sum on MacPorts.
179 find_tool SHA1SUM sha1sum gsha1sum
180
181 # Override the default configuration, if necessary.
182 test -r bootstrap.conf && . ./bootstrap.conf
183
184 if test "$vc_ignore" = auto; then
185 vc_ignore=
186 test -d .git && vc_ignore=.gitignore
187 test -d CVS && vc_ignore="$vc_ignore .cvsignore"
188 fi
189
190 # Translate configuration into internal form.
191
192 # Parse options.
193
194 for option
195 do
196 case $option in
197 --help)
198 usage
199 exit;;
200 --gnulib-srcdir=*)
201 GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;;
202 --cvs-user=*)
203 CVS_USER=`expr "$option" : '--cvs-user=\(.*\)'`;;
204 --skip-po)
205 SKIP_PO=t;;
206 --force)
207 checkout_only_file=;;
208 --copy)
209 copy=true;;
210 *)
211 echo >&2 "$0: $option: unknown option"
212 exit 1;;
213 esac
214 done
215
216 if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then
217 echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
218 exit 1
219 fi
220
221 # If each line in $STR is not already on a line by itself in $FILE, insert it,
222 # sorting the new contents of the file and replacing $FILE with the result.
223 insert_sorted_if_absent() {
224 file=$1
225 str=$2
226 test -f $file || touch $file
227 echo "$str" | sort -u - $file | cmp -s - $file \
228 || echo "$str" | sort -u - $file -o $file \
229 || exit 1
230 }
231
232 # Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
233 # insert_sorted_if_absent.
234 insert_vc_ignore() {
235 vc_ignore_file="$1"
236 case $vc_ignore_file in
237 *.gitignore)
238 # A .gitignore entry that does not start with `/' applies recursively to
239 # subdirectories, so prepend `/' to every .gitignore entry.
240 pattern=`echo "$2" | sed s,^,/,`;;
241 *)
242 pattern="$2";;
243 esac
244 insert_sorted_if_absent "$vc_ignore_file" "$pattern"
245 }
246
247 # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
248 found_aux_dir=no
249 grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \
250 >/dev/null && found_aux_dir=yes
251 grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \
252 >/dev/null && found_aux_dir=yes
253 if test $found_aux_dir = no; then
254 echo "$0: expected line not found in configure.ac. Add the following:" >&2
255 echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2
256 exit 1
257 fi
258
259 # If $build_aux doesn't exist, create it now, otherwise some bits
260 # below will malfunction. If creating it, also mark it as ignored.
261 if test ! -d $build_aux; then
262 mkdir $build_aux
263 for dot_ig in x $vc_ignore; do
264 test $dot_ig = x && continue
265 insert_vc_ignore $dot_ig $build_aux
266 done
267 fi
268
269 echo "$0: Bootstrapping from checked-out $package sources..."
270
271 cleanup_gnulib() {
272 status=$?
273 rm -fr gnulib
274 exit $status
275 }
276
277 # See if we can use gnulib's git-merge-changelog merge driver.
278
279 if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
280 if git config merge.merge-changelog.driver >/dev/null ; then
281 :
282 elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
283 echo "initializing git-merge-changelog driver"
284 git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver'
285 git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B'
286 else
287 echo "consider installing git-merge-changelog from gnulib"
288 fi
289 fi
290
291 # Get gnulib files.
292
293 case ${GNULIB_SRCDIR--} in
294 -)
295 if [ ! -d gnulib ]; then
296 echo "$0: getting gnulib files..."
297
298 case ${CVS_AUTH-pserver} in
299 pserver)
300 CVS_PREFIX=':pserver:anonymous@';;
301 ssh)
302 CVS_PREFIX="$CVS_USER${CVS_USER+@}";;
303 *)
304 echo "$0: $CVS_AUTH: Unknown CVS access method" >&2
305 exit 1;;
306 esac
307
308 case $CVS_RSH in
309 '') CVS_RSH=ssh; export CVS_RSH;;
310 esac
311
312 trap cleanup_gnulib 1 2 13 15
313
314 cvs -z3 -q -d ${CVS_PREFIX}pserver.git.sv.gnu.org:/gnulib.git co -d gnulib HEAD ||
315 cleanup_gnulib
316
317 trap - 1 2 13 15
318 fi
319 GNULIB_SRCDIR=gnulib
320 esac
321
322 gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
323 <$gnulib_tool || exit
324
325 # Get translations.
326
327 download_po_files() {
328 subdir=$1
329 domain=$2
330 echo "$0: getting translations into $subdir for $domain..."
331 cmd=`printf "$po_download_command_format" "$domain" "$subdir"`
332 eval "$cmd"
333 }
334
335 # Download .po files to $po_dir/.reference and copy only the new
336 # or modified ones into $po_dir. Also update $po_dir/LINGUAS.
337 update_po_files() {
338 # Directory containing primary .po files.
339 # Overwrite them only when we're sure a .po file is new.
340 po_dir=$1
341 domain=$2
342
343 # Download *.po files into this dir.
344 # Usually contains *.s1 checksum files.
345 ref_po_dir="$po_dir/.reference"
346
347 test -d $ref_po_dir || mkdir $ref_po_dir || return
348 download_po_files $ref_po_dir $domain \
349 && ls "$ref_po_dir"/*.po 2>/dev/null |
350 sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS"
351
352 for po in `cd $ref_po_dir && echo *.po|sed 's/\.po//g'`; do
353 new_po="$ref_po_dir/$po.po"
354 cksum_file="$ref_po_dir/$po.s1"
355 if ! "$SHA1SUM" -c --status "$cksum_file" < "$new_po" > /dev/null; then
356 echo "updated $po_dir/$po.po..."
357 cp "$new_po" "$po_dir/$po.po" && "$SHA1SUM" < "$new_po" > "$cksum_file"
358 fi
359 done
360 }
361
362 case $SKIP_PO in
363 '')
364 if test -d po; then
365 update_po_files po $package || exit
366 fi
367
368 if test -d runtime-po; then
369 update_po_files runtime-po $package-runtime || exit
370 fi;;
371 esac
372
373 check_dst_dir()
374 {
375 dst=$1
376 # If the destination directory doesn't exist, create it.
377 # This is required at least for "lib/uniwidth/cjk.h".
378 dst_dir=`dirname "$dst"`
379 if ! test -d "$dst_dir"; then
380 mkdir -p "$dst_dir"
381
382 # If we've just created a directory like lib/uniwidth,
383 # tell version control system(s) it's ignorable.
384 # FIXME: for now, this does only one level
385 parent=`dirname "$dst_dir"`
386 for dot_ig in x $vc_ignore; do
387 test $dot_ig = x && continue
388 ig=$parent/$dot_ig
389 insert_vc_ignore $ig `echo "$dst_dir"|sed 's,.*/,,'`
390 done
391 fi
392 }
393
394 symlink_to_dir()
395 {
396 src=$1/$2
397 dst=${3-$2}
398
399 test -f "$src" && {
400
401 check_dst_dir "$dst"
402
403 if $copy; then
404 {
405 test ! -h "$dst" || {
406 echo "$0: rm -f $dst" &&
407 rm -f "$dst"
408 }
409 } &&
410 test -f "$dst" &&
411 cmp -s "$src" "$dst" || {
412 echo "$0: cp -fp $src $dst" &&
413 cp -fp "$src" "$dst"
414 }
415 else
416 test -h "$dst" &&
417 src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 &&
418 dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 &&
419 test "$src_i" = "$dst_i" || {
420 dot_dots=
421 case $src in
422 /*) ;;
423 *)
424 case /$dst/ in
425 *//* | */../* | */./* | /*/*/*/*/*/)
426 echo >&2 "$0: invalid symlink calculation: $src -> $dst"
427 exit 1;;
428 /*/*/*/*/) dot_dots=../../../;;
429 /*/*/*/) dot_dots=../../;;
430 /*/*/) dot_dots=../;;
431 esac;;
432 esac
433
434 echo "$0: ln -fs $dot_dots$src $dst" &&
435 ln -fs "$dot_dots$src" "$dst"
436 }
437 fi
438 }
439 }
440
441 cp_mark_as_generated()
442 {
443 cp_src=$1
444 cp_dst=$2
445
446 if cmp -s "$cp_src" "$GNULIB_SRCDIR/$cp_dst"; then
447 symlink_to_dir "$GNULIB_SRCDIR" "$cp_dst"
448 elif cmp -s "$cp_src" "$local_gl_dir/$cp_dst"; then
449 symlink_to_dir $local_gl_dir "$cp_dst"
450 else
451 case $cp_dst in
452 *.[ch]) c1='/* '; c2=' */';;
453 *.texi) c1='@c '; c2= ;;
454 *.m4|*/Make*|Make*) c1='# ' ; c2= ;;
455 *) c1= ; c2= ;;
456 esac
457
458 if test -z "$c1"; then
459 cmp -s "$cp_src" "$cp_dst" || {
460 echo "$0: cp -f $cp_src $cp_dst" &&
461 rm -f "$cp_dst" &&
462 sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst"
463 }
464 else
465 check_dst_dir "$cp_dst"
466 # Copy the file first to get proper permissions if it
467 # doesn't already exist. Then overwrite the copy.
468 cp "$cp_src" "$cp_dst-t" &&
469 (
470 echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" &&
471 echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" &&
472 sed "s!$bt_regex/!!g" "$cp_src"
473 ) > $cp_dst-t &&
474 if cmp -s "$cp_dst-t" "$cp_dst"; then
475 rm -f "$cp_dst-t"
476 else
477 echo "$0: cp $cp_src $cp_dst # with edits" &&
478 mv -f "$cp_dst-t" "$cp_dst"
479 fi
480 fi
481 fi
482 }
483
484 version_controlled_file() {
485 dir=$1
486 file=$2
487 found=no
488 if test -d CVS; then
489 grep -F "/$file/" $dir/CVS/Entries 2>/dev/null |
490 grep '^/[^/]*/[0-9]' > /dev/null && found=yes
491 elif test -d .git; then
492 git-rm -n "$dir/$file" > /dev/null 2>&1 && found=yes
493 else
494 echo "$0: no version control for $dir/$file?" >&2
495 fi
496 test $found = yes
497 }
498
499 slurp() {
500 for dir in . `(cd $1 && find * -type d -print)`; do
501 copied=
502 sep=
503 for file in `ls -a $1/$dir`; do
504 case $file in
505 .|..) continue;;
506 .*) continue;; # FIXME: should all file names starting with "." be ignored?
507 esac
508 test -d $1/$dir/$file && continue
509 for excluded_file in $excluded_files; do
510 test "$dir/$file" = "$excluded_file" && continue 2
511 done
512 if test $file = Makefile.am; then
513 copied=$copied${sep}$gnulib_mk; sep=$nl
514 remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g"
515 sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/$gnulib_mk || {
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 }
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'."