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 #------------------------------------------------------------------------------