X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/5691bf57fb139bfcccdd259f74c25c54ec00370c..b09f4f48512c274a7574b6a22e4a1eac6a86fd61:/bootstrap diff --git a/bootstrap b/bootstrap index c3ddd267..32940850 100755 --- a/bootstrap +++ b/bootstrap @@ -1,8 +1,8 @@ #! /bin/sh -# Bootstrap this package from CVS. +# Bootstrap this package from checked-out sources. -# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -29,6 +29,11 @@ nl=' LC_ALL=C export LC_ALL +# Temporary directory names. +bt='._bootmp' +bt_regex=`echo "$bt"| sed 's/\./[.]/g'` +bt2=${bt}2 + usage() { echo >&2 "\ Usage: $0 [OPTION]... @@ -38,14 +43,14 @@ Options: --gnulib-srcdir=DIRNAME Specify the local directory where gnulib sources reside. Use this if you already have gnulib sources on your machine, and - do not want to waste your bandwidth dowloading + do not want to waste your bandwidth downloading them again. --copy Copy files instead of creating symbolic links. --force Attempt to bootstrap even if the sources seem not to have been checked out. --skip-po Do not download po files. - --cvs-user=USERNAME Set the CVS username to be used when accessing - the gnulib repository. + --cvs-user=USERNAME Set the username to use when checking out + sources from the gnulib repository. If the file .bootstrap.conf exists in the current working directory, its contents are read as shell variables to configure the bootstrap. @@ -84,19 +89,20 @@ extract_package_name=' } ' package=`sed -n "$extract_package_name" configure.ac` || exit +gnulib_name=lib$package +build_aux=build-aux # Extra files from gnulib, which override files from other sources. -gnulib_extra_files=' - build-aux/announce-gen - build-aux/install-sh - build-aux/missing - build-aux/mdate-sh - build-aux/texinfo.tex - build-aux/depcomp - build-aux/config.guess - build-aux/config.sub +gnulib_extra_files=" + $build_aux/install-sh + $build_aux/missing + $build_aux/mdate-sh + $build_aux/texinfo.tex + $build_aux/depcomp + $build_aux/config.guess + $build_aux/config.sub doc/INSTALL -' +" # Other locale categories that need message catalogs. EXTRA_LOCALE_CATEGORIES= @@ -113,7 +119,7 @@ excluded_files= # File that should exist in the top directory of a checked out hierarchy, # but not in a distribution tarball. -CVS_only_file=README-cvs +checkout_only_file=README-hacking # Whether to use copies instead of symlinks. copy=false @@ -138,7 +144,7 @@ do --skip-po) SKIP_PO=t;; --force) - CVS_only_file=;; + checkout_only_file=;; --copy) copy=true;; *) @@ -147,12 +153,42 @@ do esac done -if test -n "$CVS_only_file" && test ! -r "$CVS_only_file"; then +if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2 exit 1 fi -echo "$0: Bootstrapping CVS $package..." +# If $STR is not already on a line by itself in $FILE, insert it, +# sorting the new contents of the file and replacing $FILE with the result. +insert_sorted_if_absent() { + file=$1 + str=$2 + echo "$str" | sort -u - $file | cmp -s - $file \ + || echo "$str" | sort -u - $file -o $file \ + || exit 1 +} + +# Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. +found_aux_dir=no +grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \ + >/dev/null && found_aux_dir=yes +grep '^[ ]*AC_CONFIG_AUX_DIR('"$build_aux"')' configure.ac \ + >/dev/null && found_aux_dir=yes +if test $found_aux_dir = no; then + echo "$0: expected line not found in configure.ac. Add the following:" >&2 + echo " AC_CONFIG_AUX_DIR([$build_aux])" >&2. +fi + +# If $build_aux doesn't exist, create it now, otherwise some bits +# below will malfunction. If creating it, also mark it as ignored. +if test ! -d $build_aux; then + mkdir $build_aux + for ig in .cvsignore .gitignore; do + test -f $ig && insert_sorted_if_absent $ig $build_aux + done +fi + +echo "$0: Bootstrapping from checked-out $package sources..." cleanup_gnulib() { status=$? @@ -246,7 +282,9 @@ case $SKIP_PO in WGET_COMMAND='';; esac - get_translations po $package || exit + if test -d po; then + get_translations po $package || exit + fi if test -d runtime-po; then get_translations runtime-po $package-runtime || exit @@ -315,7 +353,8 @@ cp_mark_as_generated() if test -z "$c1"; then cmp -s "$cp_src" "$cp_dst" || { echo "$0: cp -f $cp_src $cp_dst" && - cp -f "$cp_src" "$cp_dst" + rm -f "$cp_dst" && + sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst" } else # Copy the file first to get proper permissions if it @@ -324,7 +363,7 @@ cp_mark_as_generated() ( echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" && echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" && - cat "$cp_src" + sed "s!$bt_regex/!!g" "$cp_src" ) > $cp_dst-t && if cmp -s "$cp_dst-t" "$cp_dst"; then rm -f "$cp_dst-t" @@ -362,7 +401,7 @@ slurp() { done if test $file = Makefile.am; then copied=$copied${sep}gnulib.mk; sep=$nl - remove_intl='/^[^#].*\/intl/s/^/#/' + remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g" sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/gnulib.mk || { echo "$0: Copying $1/$dir/$file to $dir/gnulib.mk ..." && rm -f $dir/gnulib.mk && @@ -393,8 +432,12 @@ slurp() { for dot_ig in .cvsignore .gitignore; do ig=$dir/$dot_ig if test -n "$copied" && test -f $ig; then - echo "$copied" | sort -u - $ig | cmp -s - $ig || - echo "$copied" | sort -u - $ig -o $ig || exit + insert_sorted_if_absent $ig "$copied" + # If an ignored file name ends with _.h, then also add + # the name with just ".h". Many gnulib headers are generated, + # e.g., stdint_.h -> stdint.h, dirent_.h ->..., etc. + f=`echo "$copied"|sed 's/_\.h$/.h/'` + insert_sorted_if_absent $ig "$f" fi done done @@ -402,9 +445,6 @@ slurp() { # Create boot temporary directories to import from gnulib and gettext. - -bt='.#bootmp' -bt2=${bt}2 rm -fr $bt $bt2 && mkdir $bt $bt2 || exit @@ -413,9 +453,9 @@ mkdir $bt $bt2 || exit gnulib_tool_options="\ --import\ --no-changelog\ - --aux-dir $bt/build-aux\ + --aux-dir $bt/$build_aux\ --doc-base $bt/doc\ - --lib lib$package\ + --lib $gnulib_name\ --m4-base $bt/m4/\ --source-base $bt/lib/\ --tests-base $bt/tests\ @@ -431,23 +471,34 @@ done # Import from gettext. +with_gettext=yes +grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ + with_gettext=no -echo "$0: (cd $bt2; autopoint) ..." -cp configure.ac $bt2 && -(cd $bt2 && autopoint && rm configure.ac) && -slurp $bt2 $bt || exit +if test $with_gettext = yes; then + echo "$0: (cd $bt2; autopoint) ..." + cp configure.ac $bt2 && + (cd $bt2 && autopoint && rm configure.ac) && + slurp $bt2 $bt || exit -rm -fr $bt $bt2 || exit + rm -fr $bt $bt2 || exit +fi # Reconfigure, getting other files. for command in \ + libtool \ 'aclocal --force -I m4' \ 'autoconf --force' \ 'autoheader --force' \ 'automake --add-missing --copy --force-missing'; do + if test "$command" = libtool; then + grep '^[ ]*AM_PROG_LIBTOOL\>' configure.ac >/dev/null || + continue + command='libtoolize -c -f' + fi echo "$0: $command ..." $command || exit done @@ -463,31 +514,37 @@ for file in $gnulib_extra_files; do symlink_to_gnulib $file $dst || exit done - -# Create gettext configuration. -echo "$0: Creating po/Makevars from po/Makevars.template ..." -rm -f po/Makevars -sed ' - /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ - /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ - /^XGETTEXT_OPTIONS *=/{ - s/$/ \\/ - a\ - '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} - } -' po/Makevars.template >po/Makevars - -if test -d runtime-po; then - # Likewise for runtime-po/Makevars, except also change a few other parameters. - rm -f runtime-po/Makevars +if test $with_gettext = yes; then + # Create gettext configuration. + echo "$0: Creating po/Makevars from po/Makevars.template ..." + rm -f po/Makevars sed ' - s/^\(DOMAIN\) *=.*/\1 = '"$package"'-runtime/ - s/^\(subdir\) *=.*/\1 = runtime-po/ - s/^\(XGETTEXT_OPTIONS\) *=.*/\1 = '"$XGETTEXT_OPTIONS_RUNTIME"'/ - ' runtime-po/Makevars + /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ + /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ + /^XGETTEXT_OPTIONS *=/{ + s/$/ \\/ + a\ + '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} + } + ' po/Makevars.template >po/Makevars - # Copy identical files from po to runtime-po. - (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) + if test -d runtime-po; then + # Similarly for runtime-po/Makevars, but not quite the same. + rm -f runtime-po/Makevars + sed ' + /^DOMAIN *=.*/s/=.*/= '"$package"'-runtime/ + /^subdir *=.*/s/=.*/= runtime-po/ + /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ + /^XGETTEXT_OPTIONS *=/{ + s/$/ \\/ + a\ + '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} + } + ' runtime-po/Makevars + + # Copy identical files from po to runtime-po. + (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po) + fi fi echo "$0: done. Now you can run './configure'."