]> git.saurik.com Git - bison.git/blobdiff - bootstrap
Minor code cleanup in parser table construction.
[bison.git] / bootstrap
index c3ddd2676c11509dbd0633ffbe2768095738ecc6..3294085057373b9d8a1146f48de8e39208b42286 100755 (executable)
--- a/bootstrap
+++ b/bootstrap
@@ -1,8 +1,8 @@
 #! /bin/sh
 
 #! /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
 
 # 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
 
 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]...
 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
  --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.
                           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.
 
 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
   }
 '
 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.
 # 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
        doc/INSTALL
-'
+"
 
 # Other locale categories that need message catalogs.
 EXTRA_LOCALE_CATEGORIES=
 
 # 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.
 
 # 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
 
 # Whether to use copies instead of symlinks.
 copy=false
@@ -138,7 +144,7 @@ do
   --skip-po)
     SKIP_PO=t;;
   --force)
   --skip-po)
     SKIP_PO=t;;
   --force)
-    CVS_only_file=;;
+    checkout_only_file=;;
   --copy)
     copy=true;;
   *)
   --copy)
     copy=true;;
   *)
@@ -147,12 +153,42 @@ do
   esac
 done
 
   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 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=$?
 
 cleanup_gnulib() {
   status=$?
@@ -246,7 +282,9 @@ case $SKIP_PO in
     WGET_COMMAND='';;
   esac
 
     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
 
   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" &&
     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
       }
     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" &&
       (
        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"
       ) > $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
       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 &&
         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
     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
       fi
     done
   done
@@ -402,9 +445,6 @@ slurp() {
 
 
 # Create boot temporary directories to import from gnulib and gettext.
 
 
 # Create boot temporary directories to import from gnulib and gettext.
-
-bt='.#bootmp'
-bt2=${bt}2
 rm -fr $bt $bt2 &&
 mkdir $bt $bt2 || exit
 
 rm -fr $bt $bt2 &&
 mkdir $bt $bt2 || exit
 
@@ -413,9 +453,9 @@ mkdir $bt $bt2 || exit
 gnulib_tool_options="\
  --import\
  --no-changelog\
 gnulib_tool_options="\
  --import\
  --no-changelog\
- --aux-dir $bt/build-aux\
+ --aux-dir $bt/$build_aux\
  --doc-base $bt/doc\
  --doc-base $bt/doc\
- --lib lib$package\
+ --lib $gnulib_name\
  --m4-base $bt/m4/\
  --source-base $bt/lib/\
  --tests-base $bt/tests\
  --m4-base $bt/m4/\
  --source-base $bt/lib/\
  --tests-base $bt/tests\
@@ -431,23 +471,34 @@ done
 
 
 # Import from gettext.
 
 
 # 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 \
 
 
 # Reconfigure, getting other files.
 
 for command in \
+  libtool \
   'aclocal --force -I m4' \
   'autoconf --force' \
   'autoheader --force' \
   'automake --add-missing --copy --force-missing';
 do
   '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
   echo "$0: $command ..."
   $command || exit
 done
@@ -463,31 +514,37 @@ for file in $gnulib_extra_files; do
   symlink_to_gnulib $file $dst || exit
 done
 
   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 '
   sed '
-    s/^\(DOMAIN\) *=.*/\1 = '"$package"'-runtime/
-    s/^\(subdir\) *=.*/\1 = runtime-po/
-    s/^\(XGETTEXT_OPTIONS\) *=.*/\1 = '"$XGETTEXT_OPTIONS_RUNTIME"'/
-  ' <po/Makevars >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+}
+      }
+    ' <po/Makevars.template >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'."
 fi
 
 echo "$0: done.  Now you can run './configure'."