diff options
Diffstat (limited to 'buildutil/version-util')
-rwxr-xr-x | buildutil/version-util | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/buildutil/version-util b/buildutil/version-util new file mode 100755 index 0000000..fa4b127 --- /dev/null +++ b/buildutil/version-util @@ -0,0 +1,125 @@ +#!/bin/sh +# ----------------------------------------------------------------------------- +# Shell script to determine the last commit version of the project It +# checks for CVS and .git repositories. The output is a string that +# can be used in a define at compile time to automatically mark +# repository versions. For CVS repositories the string contains the +# date and time of the commit that lead to the current version of +# files. For git repositories the output contains the git-id of the +# current tree. An indication if localy modified files exist is +# added currently only for CVS. +# ----------------------------------------------------------------------------- + +[ $# -lt 1 ] && echo "USAGE: version-util [-F] <versionfile>" && exit 1 + +VERS_FILE=$1 +FORCE_EMPTY=0 + +[ "$VERS_FILE" == "-F" -a $# -lt 2 ] && echo "USAGE: version-util [-F] <versionfile>" && exit 1 + +if [ $# -gt 1 ]; then + VERS_FILE=$2 + FORCE_EMPTY=1 +fi + + +SCRIPT_PATH=`dirname $0` + +# echo "file: ${VERS_FILE}, force = $FORCE_EMPTY" +# exit 0 + +function createVers () +{ +cat <<EOF +/* ATTENTION: this file is automatically generated and will be overwritten! + * Manual changes will get lost! + */ +#ifndef GEN_VERSION_SUFFIX_H +#define GEN_VERSION_SUFFIX_H +#define VERSION_SUFFIX "$1" +#endif +EOF +} + +function fileVersions() +{ + for file in `find . -wholename '*CVS/Entries' -print` + do + sed -e's/\//|/g' -e's/|/\//' $file \ + | grep --label=$file -H '^/' \ + | sed -e's/\/CVS\/Entries://' -e's/\.\///' + done +} + +function cvsLog() +{ + echo "= == ===marker=== == =" + cvs log -b -N 2> /dev/null +} + +function cvsData() +{ + fileVersions + cvsLog +} + +function cvsVers () +{ + d=`cvsData \ + | awk -f ${SCRIPT_PATH}/version-util.awk \ + | sort -u \ + | tail -1 \ + | tr -d ' \-:'` + m=`cvs status 2> /dev/null \ + | grep 'Status: Locally Modified' > /dev/null && echo "_MOD"` + echo "_cvs_${d}${m}" +} + +function gitVers () +{ + b=`git branch \ + | grep '^*' \ + | sed -e's/^* //'` + h=`git show --pretty=format:"%h_%ci" HEAD \ + | head -1 \ + | tr -d ' \-:'` + echo "_git_${b}_${h}" +} + +function emptyVers () +{ + echo "" +} + +function checkVers () +{ + s=`$1` + if [ ! -e ${VERS_FILE} ]; then + echo "$VERS_FILE does not exist! creating a new one." + createVers $s > ${VERS_FILE} + else + v=`grep '^#define VERSION_SUFFIX' ${VERS_FILE} \ + | awk '{print $3}'` + if [ "$v" != "\"$s\"" ]; then + echo "$VERS_FILE is being recreated!" + createVers $s > ${VERS_FILE} + fi + fi +} + +if [ $FORCE_EMPTY -eq 1 ]; then + checkVers emptyVers + exit 0 +fi + +if [ -d CVS ]; then + checkVers cvsVers + exit 0 +fi + +if [ -d .git ]; then + checkVers gitVers + exit 0 +fi + +checkVers emptyVers |