#!/bin/sh #------------------------------------------------------------------------------ # ========= | # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox # \\ / O peration | Website: https://openfoam.org # \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation # \\/ M anipulation | #------------------------------------------------------------------------------ # License # This file is part of OpenFOAM. # # OpenFOAM is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # OpenFOAM is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. # # You should have received a copy of the GNU General Public License # along with OpenFOAM. If not, see . # # Script # wmakePrintBuild # # Usage # wmakePrintBuild [OPTION] # # Description # Print the version used when building the project # #------------------------------------------------------------------------------ Script=${0##*/} usage() { cat< specify packager/release tag ('none' marks an empty packager) -short report short version information (ie, without pkg tag) -version specify an alternative version Print the version used when building the project, in this order of precedence: * the git head commit (prefixed with \$WM_PROJECT_VERSION) * \$WM_PROJECT_DIR/.build * \$WM_PROJECT_VERSION USAGE } error() { exec 1>&2 while [ "$#" -ge 1 ]; do echo "$1"; shift; done usage exit 1 } #------------------------------------------------------------------------------ # Parse arguments and options #------------------------------------------------------------------------------ unset checkOnly update package version shortOpt while [ "$#" -gt 0 ] do case "$1" in -h | -help) usage && exit 0 ;; -c | -check) checkOnly=true shift ;; -major) echo "${WM_PROJECT_VERSION:-unknown}" exit 0 ;; -u | -update) update=true shift ;; -pkg | -package) [ "$#" -ge 2 ] || error "'$1' option requires an argument" # Mark empty as 'none', disallow '!' in string package=$(echo "${2:-none}" | sed -e 's/!//g') shift 2 ;; -short) shortOpt=true shift ;; -v | -version) [ "$#" -ge 2 ] || error "'$1' option requires an argument" version="$2" shift 2 ;; *) error "unknown option/argument: '$*'" ;; esac done #------------------------------------------------------------------------------ # Persistent build tag build="$WM_PROJECT_DIR/.build" #------------------------------------------------------------------------------ # Retrieve old values from the $WM_PROJECT_DIR/.build cache, stored as # version [packager] #------------------------------------------------------------------------------ unset oldPackage oldVersion getOldValues() { set -- "$(tail -1 "$build" 2>/dev/null)" oldVersion="$1" [ "$#" -gt 0 ] && shift oldPackage="$*" [ "${oldPackage:-none}" = none ] && unset oldPackage } #------------------------------------------------------------------------------ # printTag - output the build tag, reuses the old -package tag if needed #------------------------------------------------------------------------------ printTag() { if [ "${package:-${oldPackage:-none}}" = none ] then echo "$version" else echo "$version ${package:-$oldPackage}" fi } #------------------------------------------------------------------------------ # Get the version #------------------------------------------------------------------------------ if [ -n "$version" ] then # Specified a version - no error possible rc=0 else # Get the head SHA1 when building under git # if there are multiple values (eg, HEAD, origin/HEAD, ...) # only take the first one, which is 'HEAD' version=$( cd "$WM_PROJECT_DIR" 2>/dev/null && \ git show-ref --hash=12 --head HEAD 2>/dev/null | head -1 ) if [ -n "$version" ] then # Mark as success and prefix with WM_PROJECT_VERSION rc=0 version="${WM_PROJECT_VERSION}-$version" else # Mark as failure rc=1 fi fi # Retrieve old values getOldValues if [ "$shortOpt" = true ] then unset package oldPackage fi #------------------------------------------------------------------------------ # Update persistent build tag if possible #------------------------------------------------------------------------------ if [ $rc -eq 0 ] && [ -n "$update" ] then if [ "$version:$package" != "$oldVersion:$oldPackage" ] then if [ -w "$build" ] || { [ -w "$WM_PROJECT_DIR" ] && [ ! -e "$build" ]; } then printTag >| "$build" 2>/dev/null fi fi fi #------------------------------------------------------------------------------ # Check git vs. persistent build tag #------------------------------------------------------------------------------ if [ -n "$checkOnly" ] then if [ $rc -eq 0 ] then test "$version:${package:-$oldPackage}" = "$oldVersion:$oldPackage" rc=$? if [ $rc -eq 0 ] then echo "same version as previous build" 1>&2 else echo "version changed from previous build" 1>&2 fi exit $rc else echo "no git description found" 1>&2 exit 0 fi fi #------------------------------------------------------------------------------ # Cannot get git information or -version version #------------------------------------------------------------------------------ if [ $rc -ne 0 ] then if [ -n "$oldVersion" ] then # Use previous version info version="$oldVersion" else # Fallback to WM_PROJECT_VERSION alone version="${WM_PROJECT_VERSION:-unknown}" fi fi #------------------------------------------------------------------------------ # Output the tag #------------------------------------------------------------------------------ printTag #------------------------------------------------------------------------------