temporary undoing of renaming
[riscv-isa-sim.git] / scripts / vcs-version.sh
diff --git a/scripts/vcs-version.sh b/scripts/vcs-version.sh
new file mode 100755 (executable)
index 0000000..31fae86
--- /dev/null
@@ -0,0 +1,117 @@
+#!/bin/bash
+#=========================================================================
+# vcs-version.sh [options] [src-dir]
+#=========================================================================
+#
+#  -h  Display this message
+#  -v  Verbose mode
+#
+# This script will create a version string by querying a version control
+# system. The string is appropriate for use in installations and
+# distributions. Currently this script assumes we are using git as our
+# version control system but it would be possible to check and see if we
+# are using an alternative version control system and create a version
+# string appropriately.
+# 
+# The script uses git describe plus a few other git commands to create a
+# version strings in the following format:
+#
+#  X.Y[-Z-gN][-dirty]
+#
+# where X is the major release, Y is the minor release, Z is the number
+# of commits since the X.Y release, N is an eight digit abbreviated SHA
+# hash of the most recent commit and the dirty suffix is appended when
+# the working directory used to create the installation or distribution
+# is not a pristine checkout. Here are some example version strings:
+#
+#  0.0                    : initial import
+#  0.0-3-g99ef6933        : 3rd commit since initial import (N=99ef6933)
+#  1.0                    : release 1.0
+#  1.1-12-g3487ab12       : 12th commit since release 1.1 (N=3487ab12)
+#  1.1-12-g3487ab12-dirty : 12th commit since release 1.1 (N=3487ab12)
+#
+# The last example is from a dirty working directory. To find the last
+# release, the script looks for the last tag (does not need to be an
+# annotated tag, but probably should be) which matches the format rel-*.
+# If there is no such tag in the history, then the script uses 0.0 as
+# the release number and counts the total number of commits since the
+# original import for the commit count.
+#
+# If the current directory is not within the working directory, then the
+# path to the source directory should be supplied on the command line.
+#
+# Author : Christopher Batten
+# Date   : August 5, 2009
+
+set -e
+
+#-------------------------------------------------------------------------
+# Command line parsing
+#-------------------------------------------------------------------------
+
+if ( test "$1" = "-h" ); then
+  echo ""
+  sed -n '3p' $0 | sed -e 's/#//'
+  sed -n '5,/^$/p' $0 | sed -e 's/#//'
+  exit 1
+fi
+
+# Source directory command line option
+
+src_dir="."
+if ( test -n "$1" ); then
+  src_dir="$1"
+fi
+
+#-------------------------------------------------------------------------
+# Verify source directory
+#-------------------------------------------------------------------------
+# If the source directory is not a git working directory output a
+# question mark. A distribution will not be in a working directory, but
+# the build system should be structured such that this script is not
+# executed (and instead the version information should probably come
+# from configure). If the user does not specify a source directory use
+# the current directory.
+
+if !( git rev-parse --is-inside-work-tree &> /dev/null ); then
+  echo "?"
+  exit 1;
+fi
+
+top_dir=`git rev-parse --show-cdup`
+cd ./${top_dir}
+
+#-------------------------------------------------------------------------
+# Create the version string
+#-------------------------------------------------------------------------
+# See if we can do a describe based on a tag and if not use a default
+# release number of 0.0 so that we always get canonical version number
+
+if ( git describe --tags --match "rel-*" &> /dev/null ); then
+  ver_str=`git describe --tags --match "rel-*" | sed 's/rel-//'`
+else
+  ver_num="0.0"
+  ver_commits=`git rev-list --all | wc -l | tr -d " "`
+  ver_sha=`git describe --tags --match "rel-*" --always`
+  ver_str="${ver_num}-${ver_commits}-g${ver_sha}"
+fi
+
+# Add a dirty suffix if working directory is dirty
+
+if !( git diff --quiet ); then
+  ver_str="${ver_str}-dirty"
+else
+  untracked=`git ls-files --directory --exclude-standard --others -t`
+  if ( test -n "${untracked}" ); then
+    ver_str="${ver_str}-dirty"
+  fi  
+fi
+
+# Output the final version string
+
+echo "${ver_str}"
+
+# Final exit status
+
+exit 0;
+