diff options
Diffstat (limited to 'rtemstoolkit/elftoolchain/libelftc/make-toolchain-version')
-rwxr-xr-x | rtemstoolkit/elftoolchain/libelftc/make-toolchain-version | 110 |
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 |