diff --git a/src/Allwmake b/src/Allwmake
index c451cff8dd569337fee1e93b2aea9af6d559547c..e0324141cd6b7ceb5ef9591e21b294a032e9dfc0 100755
--- a/src/Allwmake
+++ b/src/Allwmake
@@ -2,8 +2,8 @@
 cd ${0%/*} || exit 1    # run from this directory
 set -x
 
-# force update of Foam::FOAMversion string (git tag or $WM_PROJECT_VERSION)
-/bin/rm -f OpenFOAM/Make/$WM_OPTIONS/global.? 2>/dev/null
+# update Foam::FOAMversion string if required
+wmakePrintBuild -check || /bin/rm -f OpenFOAM/Make/$WM_OPTIONS/global.? 2>/dev/null
 
 wmakeLnInclude -f OpenFOAM
 wmakeLnInclude -f OSspecific/$WM_OS
diff --git a/src/OpenFOAM/global/global.Cver b/src/OpenFOAM/global/global.Cver
index e67b67b22a8352e2c27cb78564f6505f461cbb83..e2f411603eef4a7fc527b7f53d56731ac0b959e3 100644
--- a/src/OpenFOAM/global/global.Cver
+++ b/src/OpenFOAM/global/global.Cver
@@ -23,20 +23,19 @@ License
     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 
 Description
-    Define the globals used in the FOAM library.  It is important that these
-    are constructed in the appropriate order to avoid the use of unconstructed
-    data in the global namespace.
+    Define the globals used in the OpenFOAM library.
+    It is important that these are constructed in the appropriate order to
+    avoid the use of unconstructed data in the global namespace.
 
-    This file has the extension .ver to force it to be parsed by the script
-    which converts WM_PROJECT_VERSION into the appropriate version number
-    string.
+    This file has the extension .Cver to trigger a Makefile rule that converts
+    WM_PROJECT_VERSION into the appropriate version string.
 
 \*---------------------------------------------------------------------------*/
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 #include "foamVersion.H"
 
-const char* const Foam::FOAMversion = WM_PROJECT_VERSION;
+const char* const Foam::FOAMversion = "WM_PROJECT_VERSION";
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 // Setup an error handler for the global new operator
@@ -51,7 +50,7 @@ const char* const Foam::FOAMversion = WM_PROJECT_VERSION;
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 #include "JobInfo.H"
-bool Foam::JobInfo::constructed = false;
+bool Foam::JobInfo::constructed(false);
 
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 // Global error definitions (initialised by construction)
diff --git a/wmake/rules/General/version b/wmake/rules/General/version
index 0d74179f8cc78c80b4c40ad0155622558d887d9e..64f272ed088a902d615f7d771bac5c432bc2c625 100644
--- a/wmake/rules/General/version
+++ b/wmake/rules/General/version
@@ -1,10 +1,10 @@
 .SUFFIXES: .Cver
 
 #
-# update version string
+# update version string in C++ file and in $WM_PROJECT_DIR/.build file
 #
 Cvertoo = \
-    sed s/WM_PROJECT_VERSION/\"$(shell wmakePrintBuild)\"/ $$SOURCE > $*.C; \
+    sed 's/WM_PROJECT_VERSION/$(shell wmakePrintBuild -update)/' $$SOURCE > $*.C; \
     $(CC) $(c++FLAGS) -c $*.C -o $@
 
 .Cver.dep:
diff --git a/wmake/wmakePrintBuild b/wmake/wmakePrintBuild
index 61e9b80790f40146ccf2a67fb795134d5a58901b..868357fe58c4fded9d6ed54dba9269cd1845d2d6 100755
--- a/wmake/wmakePrintBuild
+++ b/wmake/wmakePrintBuild
@@ -35,10 +35,15 @@ Script=${0##*/}
 usage() {
     while [ "$#" -ge 1 ]; do echo "$1"; shift; done
     cat<<USAGE
-usage: $Script
+usage: $Script [OPTION]
+options:
+  -check          check the git head commit vs. \$WM_PROJECT_DIR/.build
+                  (exit code 0 for no changes)
+  -update         update the \$WM_PROJECT_DIR/.build from the git information
+  -version VER    specify an alternative version
 
 Print the version used when building the project, in this order of precedence:
-  * git description
+  * the git head commit (prefixed with \$WM_PROJECT_VERSION)
   * \$WM_PROJECT_DIR/.build
   * \$WM_PROJECT_VERSION
 
@@ -47,11 +52,33 @@ USAGE
 }
 #------------------------------------------------------------------------------
 
-# provide immediate help
-if [ "$1" = "-h" -o "$1" = "-help" ]
-then
-    usage
-fi
+unset checkOnly update version
+
+# parse options
+while [ "$#" -gt 0 ]
+do
+    case "$1" in
+    -h | -help)
+        usage
+        ;;
+    -check)
+        checkOnly=true
+        shift
+        ;;
+    -update)
+        update=true
+        shift
+        ;;
+    -version)
+        [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
+        version=$2
+        shift 2
+        ;;
+    *)
+        usage "unknown option/argument: '$*'"
+        ;;
+    esac
+done
 
 #------------------------------------------------------------------------------
 
@@ -61,35 +88,64 @@ fi
 build="$WM_PROJECT_DIR/.build"
 previous=$(tail -1 $build 2>/dev/null)
 
-#
-# building under git
-# note: could also use --abbrev=32 for maximum resolution
-#
-version=$(git describe --always --tags 2>/dev/null)
-if [ $? -eq 0 ]
+if [ -n "$version" ]
+then
+    # specified a version - no error possible
+    rc=0
+else
+    # building under git (get the head SHA1)
+    version=$(git show-ref --hash=12 --head HEAD 2>/dev/null)
+    rc=$?
+
+    # prefix with WM_PROJECT_VERSION
+    if [ $rc -eq 0 ]
+    then
+        version="${WM_PROJECT_VERSION}-$version"
+    fi
+fi
+
+
+# update persistent build tag if possible
+if [ $rc -eq 0 -a -n "$update" -a "$version" != "$previous" ]
 then
-    # update persistent build tag (this could be made optional or removed)
-    if [ "$version" != "$previous" ]
+    if [ -w "$build" -a \( -w "$WM_PROJECT_DIR" -o ! -e "$build" \) ]
     then
-        if [ -w "$build" -a \( -w "$WM_PROJECT_DIR" -o ! -e "$build" \) ]
+        echo $version >| "$build" 2>/dev/null
+    fi
+fi
+
+
+# check git vs. persistent build tag - no output
+if [ -n "$checkOnly" ]
+then
+    if [ $rc -eq 0 ]
+    then
+        test "$version" = "$previous"
+        rc=$?
+        if [ $rc -eq 0 ]
         then
-            echo $version >| "$build" 2>/dev/null
+            echo "same version as previous build"
+        else
+            echo "version changed from previous build"
         fi
+    else
+        echo "no git description found"
     fi
+    exit $rc
+fi
 
-    echo $version
 
+if [ $rc -eq 0 ]
+then
+    # output the git information or the -version version
+    echo $version
 elif [ -n "$previous" ]
 then
-
     # use previous build tag
     echo $previous
-
 else
-
-    # fallback to WM_PROJECT_VERSION
+    # fallback to WM_PROJECT_VERSION alone
     echo ${WM_PROJECT_VERSION:-unknown}
-
 fi
 
 #------------------------------------------------------------------------------