]> git.saurik.com Git - bison.git/blobdiff - bootstrap
* TODO: Add pointer to Sylvain Schmitz's work on static detection
[bison.git] / bootstrap
index d357ee46966e95629846d5f448ef9ca02fc23453..238873e3e20447b878169e33692aea0715474bb4 100755 (executable)
--- a/bootstrap
+++ b/bootstrap
@@ -32,7 +32,7 @@ export LC_ALL
 usage() {
   echo >&2 "\
 Usage: $0 [OPTION]...
 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
 
 Options:
  --gnulib-srcdir=DIRNAME  Specify the local directory where gnulib
@@ -40,7 +40,9 @@ Options:
                           have gnulib sources on your machine, and
                           do not want to waste your bandwidth dowloading
                           them again.
                           have gnulib sources on your machine, and
                           do not want to waste your bandwidth dowloading
                           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.
  --skip-po                Do not download po files.
  --cvs-user=USERNAME      Set the CVS username to be used when accessing
                           the gnulib repository.
@@ -108,9 +110,12 @@ XGETTEXT_OPTIONS='\\\
 # Files we don't want to import.
 excluded_files=
 
 # 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.
+CVS_only_file=README-cvs
+
+# Whether to use copies instead of symlinks.
+copy=false
 
 # Override the default configuration, if necessary.
 test -r bootstrap.conf && . ./bootstrap.conf
 
 # Override the default configuration, if necessary.
 test -r bootstrap.conf && . ./bootstrap.conf
@@ -133,6 +138,8 @@ do
     SKIP_PO=t;;
   --force)
     CVS_only_file=;;
     SKIP_PO=t;;
   --force)
     CVS_only_file=;;
+  --copy)
+    copy=true;;
   *)
     echo >&2 "$0: $option: unknown option"
     exit 1;;
   *)
     echo >&2 "$0: $option: unknown option"
     exit 1;;
@@ -140,7 +147,7 @@ do
 done
 
 if test -n "$CVS_only_file" && test ! -r "$CVS_only_file"; then
 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
+  echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2
   exit 1
 fi
 
   exit 1
 fi
 
@@ -249,29 +256,43 @@ symlink_to_gnulib()
 {
   src=$GNULIB_SRCDIR/$1
   dst=${2-$1}
 {
   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 -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
   }
 }
 
   }
 }
 
@@ -314,6 +335,21 @@ cp_mark_as_generated()
   fi
 }
 
   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=
 slurp() {
   for dir in . `(cd $1 && find * -type d -print)`; do
     copied=
@@ -326,17 +362,13 @@ slurp() {
       if test $file = Makefile.am; then
         copied=$copied${sep}gnulib.mk; sep=$nl
        remove_intl='/^[^#].*\/intl/s/^/#/'
       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 || {
+        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 &&
          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; } ||
        }
       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
        echo "$0: $dir/$file overrides $1/$dir/$file"
       else
        copied=$copied$sep$file; sep=$nl
@@ -443,18 +475,13 @@ sed '
 ' po/Makevars.template >po/Makevars
 
 if test -d runtime-po; then
 ' po/Makevars.template >po/Makevars
 
 if test -d runtime-po; then
-  # Similarly for runtime-po/Makevars, but not quite the same.
+  # Likewise for runtime-po/Makevars, except also change a few other parameters.
   rm -f runtime-po/Makevars
   sed '
   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
+    s/^\(DOMAIN\) *=.*/\1 = '"$package"'-runtime/
+    s/^\(subdir\) *=.*/\1 = runtime-po/
+    s/^\(XGETTEXT_OPTIONS\) *=.*/\1 = '"$XGETTEXT_OPTIONS_RUNTIME"'/
+  ' <po/Makevars >runtime-po/Makevars
 
   # Copy identical files from po to runtime-po.
   (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)
 
   # Copy identical files from po to runtime-po.
   (cd po && cp -p Makefile.in.in *-quot *.header *.sed *.sin ../runtime-po)