summaryrefslogtreecommitdiffstats
path: root/rtemstoolkit/elftoolchain/libelftc/make-toolchain-version
diff options
context:
space:
mode:
Diffstat (limited to 'rtemstoolkit/elftoolchain/libelftc/make-toolchain-version')
-rwxr-xr-xrtemstoolkit/elftoolchain/libelftc/make-toolchain-version110
1 files changed, 110 insertions, 0 deletions
diff --git a/rtemstoolkit/elftoolchain/libelftc/make-toolchain-version b/rtemstoolkit/elftoolchain/libelftc/make-toolchain-version
new file mode 100755
index 0000000..0cdf370
--- /dev/null
+++ b/rtemstoolkit/elftoolchain/libelftc/make-toolchain-version
@@ -0,0 +1,110 @@
+#!/bin/sh
+#
+# This script generates a project-wide version identifier for use by
+# the `elftc_version()' API.
+#
+# $Id: make-toolchain-version 3414 2016-02-16 22:55:28Z jkoshy $
+
+#
+# Defaults.
+#
+buildhost=`uname -s`
+elftcname="elftoolchain"
+options="e:h:o:r:t:"
+top=""
+version="HEAD"
+versionfile="elftc_version.c"
+progname=`basename ${0}`
+
+usage()
+{
+ exec >&2
+
+ # Print a message, if supplied.
+ if [ -n "${*}" ]; then echo "##${@}"; fi
+
+ echo "Usage: ${progname} [options]"
+ echo " Generate a toolchain-wide version number"
+ echo " -e PROJECTNAME Set the project name [default: ${elftcname}]."
+ echo " -h HOSTOS Set the build OS [default: ${buildhost}]."
+ echo " -o OUTPUT Set the output file [default: ${versionfile}]."
+ echo " -r VERSION Set the version string [default: ${version}]."
+ echo " -t TOPDIR Set the top-of-tree directory [required]."
+ exit 1
+}
+
+#
+# Parse options.
+#
+
+while getopts ${options} option
+do
+ case ${option} in
+ 'e') elftcname="${OPTARG}" ;;
+ 'h') buildhost="${OPTARG}" ;;
+ 'o') versionfile="${OPTARG}" ;;
+ 'r') version="${OPTARG}" ;;
+ 't') top="${OPTARG}" ;;
+ '?') usage ;;
+ esac
+done
+
+[ -n "${top}" ] || usage
+
+# Try to determine the in-tree revision number.
+#
+# This script attempts to handle the case where our sources have been
+# incorporated into an operating system's base sources.
+#
+# - If SVN is detected, we use the `svninfo' tool to determine the
+# in-tree revision number.
+# - If CVS is detected, we use the string `unknown'.
+# - Otherwise, we use `git --describe'.
+
+curdir=`pwd`
+cd ${top} || usage "ERROR: Cannot change directory to \"${top}\"."
+
+if [ -d CVS ]; then # Look for CVS (NetBSD).
+ versionstring=" cvs:unknown"
+else # Try git (DragonFlyBSD).
+ gitversion="$(git describe --all --dirty --long 2> /dev/null)"
+ if [ -n "${gitversion}" ]; then
+ versionstring=" git:${gitversion}"
+ else # Assume an SVN checkout (SourceForge or FreeBSD).
+ svnversion="$(svnversion)"
+ if [ -n "${svnversion}" ]; then
+ versionstring=" svn:$(svnversion)"
+ fi
+ fi
+fi
+
+if [ -z "${versionstring}" ]; then
+ echo "ERROR: cannot determine a revision number." 1>&2
+ exit 1
+fi
+
+cd ${curdir} || usage "Cannot change back to ${curdir}."
+
+#
+# Only replace the source file if its content has changed.
+#
+tmpfile=`mktemp ${TMPDIR:-/tmp}/MV.XXXXXXX`
+trap "rm -f ${tmpfile};" 0 1 2 3 15
+
+cat > ${tmpfile} <<EOF
+/* WARNING: Generated by "${progname}". */
+
+#include <sys/types.h>
+#include <libelftc.h>
+
+const char *
+elftc_version(void)
+{
+ return "${elftcname} ${version} ${buildhost}${versionstring}";
+}
+EOF
+
+if ! cmp -s ${tmpfile} ${versionfile}; then
+ echo "@ ${progname}: building \"${versionfile}\"."
+ cp ${tmpfile} ${versionfile} || exit ${?}
+fi