summaryrefslogtreecommitdiff
path: root/buildutil/version-util
diff options
context:
space:
mode:
Diffstat (limited to 'buildutil/version-util')
-rwxr-xr-xbuildutil/version-util125
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