X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/e3ddc1e355923e9565e1ef66230389c7aa2954a3..6ce2d93a9b49afbc196e764923d539bc0caa1120:/bootstrap?ds=inline diff --git a/bootstrap b/bootstrap index a9124017..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,21 +29,28 @@ 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]... -Bootstrap this package from the CVS sources. +Bootstrap this package from the checked-out sources. 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. - --force Bootstrap even if the sources didn't come from CVS. + --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. @@ -82,18 +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/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= @@ -108,9 +117,12 @@ XGETTEXT_OPTIONS='\\\ # Files we don't want to import. excluded_files= -# File that should exist with CVS checkout, but not with -# the distributed version. -CVS_only_file=CVS +# File that should exist in the top directory of a checked out hierarchy, +# but not in a distribution tarball. +checkout_only_file=README-hacking + +# Whether to use copies instead of symlinks. +copy=false # Override the default configuration, if necessary. test -r bootstrap.conf && . ./bootstrap.conf @@ -132,19 +144,51 @@ do --skip-po) SKIP_PO=t;; --force) - CVS_only_file=;; + checkout_only_file=;; + --copy) + copy=true;; *) echo >&2 "$0: $option: unknown option" exit 1;; esac done -if test -n "$CVS_only_file" && test ! -r "$CVS_only_file"; then - echo "$0: Bootstrapping from a non-CVS distribution is a bit risky." >&2 +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=$? @@ -238,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 @@ -249,29 +295,43 @@ symlink_to_gnulib() { src=$GNULIB_SRCDIR/$1 dst=${2-$1} - dot_dots= - - case $src in - /*) ;; - *) - case /$dst/ in - *//* | */../* | */./* | /*/*/*/*/*/) - echo >&2 "$0: invalid symlink calculation: $src -> $dst" - exit 1;; - /*/*/*/*/) dot_dots=../../../;; - /*/*/*/) dot_dots=../../;; - /*/*/) dot_dots=../;; - esac;; - esac test -f "$src" && { - test -h "$dst" && - src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 && - dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 && - test "$src_i" = "$dst_i" || { - echo "$0: ln -fs $dot_dots$src $dst" && - ln -fs "$dot_dots$src" "$dst" - } + if $copy; then + { + test ! -h "$dst" || { + echo "$0: rm -f $dst" && + rm -f "$dst" + } + } && + test -f "$dst" && + cmp -s "$src" "$dst" || { + echo "$0: cp -fp $src $dst" && + cp -fp "$src" "$dst" + } + else + test -h "$dst" && + src_ls=`ls -diL "$src" 2>/dev/null` && set $src_ls && src_i=$1 && + dst_ls=`ls -diL "$dst" 2>/dev/null` && set $dst_ls && dst_i=$1 && + test "$src_i" = "$dst_i" || { + dot_dots= + case $src in + /*) ;; + *) + case /$dst/ in + *//* | */../* | */./* | /*/*/*/*/*/) + echo >&2 "$0: invalid symlink calculation: $src -> $dst" + exit 1;; + /*/*/*/*/) dot_dots=../../../;; + /*/*/*/) dot_dots=../../;; + /*/*/) dot_dots=../;; + esac;; + esac + + echo "$0: ln -fs $dot_dots$src $dst" && + ln -fs "$dot_dots$src" "$dst" + } + fi } } @@ -293,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 @@ -302,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" @@ -314,6 +375,21 @@ cp_mark_as_generated() fi } +version_controlled_file() { + dir=$1 + file=$2 + found=no + if test -d CVS; then + grep -F "/$file/" $dir/CVS/Entries 2>/dev/null | + grep '^/[^/]*/[0-9]' > /dev/null && found=yes + elif test -d .git; then + git-rm -n "$dir/$file" > /dev/null 2>&1 && found=yes + else + echo "$0: no version control for $dir/$file?" >&2 + fi + test $found = yes +} + slurp() { for dir in . `(cd $1 && find * -type d -print)`; do copied= @@ -325,18 +401,14 @@ slurp() { done if test $file = Makefile.am; then copied=$copied${sep}gnulib.mk; sep=$nl - remove_intl='/^[^#].*\/intl/s/^/#/' - no_dep=no-dependencies - remove_no_dep="/^AUTOMAKE_OPTIONS =.* $no_dep/s/ $no_dep//" - sed_xform="$remove_intl;$remove_no_dep" - sed "$sed_xform" $1/$dir/$file | cmp -s - $dir/gnulib.mk || { + 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 && - sed "$sed_xform" $1/$dir/$file >$dir/gnulib.mk + sed "$remove_intl" $1/$dir/$file >$dir/gnulib.mk } elif { test "${2+set}" = set && test -r $2/$dir/$file; } || - grep -F "/$file/" $dir/CVS/Entries 2>/dev/null | - grep -q '^/[^/]*/[0-9]'; then + version_controlled_file $dir $file; then echo "$0: $dir/$file overrides $1/$dir/$file" else copied=$copied$sep$file; sep=$nl @@ -357,19 +429,22 @@ slurp() { fi || exit done - ig=$dir/.cvsignore - if test -n "$copied" && test -f $ig; then - echo "$copied" | sort -u - $ig | cmp -s - $ig || - echo "$copied" | sort -u - $ig -o $ig || exit - fi + for dot_ig in .cvsignore .gitignore; do + ig=$dir/$dot_ig + if test -n "$copied" && test -f $ig; then + 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 } # Create boot temporary directories to import from gnulib and gettext. - -bt='.#bootmp' -bt2=${bt}2 rm -fr $bt $bt2 && mkdir $bt $bt2 || exit @@ -378,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\ @@ -396,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 @@ -428,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'."