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/wmake/rules/General/version b/wmake/rules/General/version
index 0d74179f8cc78c80b4c40ad0155622558d887d9e..3584779c67b8bcc7f7e9b056fda9349b0d8233d8 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..3232727163e495ffa83c5c4bbd5a29ab3fb7d769 100755
--- a/wmake/wmakePrintBuild
+++ b/wmake/wmakePrintBuild
@@ -35,7 +35,12 @@ Script=${0##*/}
 usage() {
     while [ "$#" -ge 1 ]; do echo "$1"; shift; done
     cat<<USAGE
-usage: $Script
+usage: $Script [OPTION]
+options:
+  -check          check git description vs. \$WM_PROJECT_DIR/.build
+                  (exit code 0 for no changes)
+  -update         update the \$WM_PROJECT_DIR/.build from the git description
+  -version VER    specify an alternative version
 
 Print the version used when building the project, in this order of precedence:
   * git description
@@ -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,60 @@ 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 ]
+# specified a version
+if [ -n "$version" ]
 then
-    # update persistent build tag (this could be made optional or removed)
-    if [ "$version" != "$previous" ]
+    # specified a version - no error possible
+    rc=0
+else
+    # building under git (could use --abbrev=32 for maximum resolution)
+    version=$(git describe --always --tags 2>/dev/null)
+    rc=$?
+fi
+
+
+# update persistent build tag if possible
+if [ $rc -eq 0 -a -n "$update" -a "$version" != "$previous" ]
+then
+    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 description or -version version
+    echo $version
 elif [ -n "$previous" ]
 then
-
     # use previous build tag
     echo $previous
-
 else
-
     # fallback to WM_PROJECT_VERSION
     echo ${WM_PROJECT_VERSION:-unknown}
-
 fi
 
 #------------------------------------------------------------------------------