summaryrefslogtreecommitdiff
path: root/cmake/utils/GetGitHash.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/utils/GetGitHash.cmake')
-rw-r--r--cmake/utils/GetGitHash.cmake32
1 files changed, 28 insertions, 4 deletions
diff --git a/cmake/utils/GetGitHash.cmake b/cmake/utils/GetGitHash.cmake
index 8a9be41d..e399216d 100644
--- a/cmake/utils/GetGitHash.cmake
+++ b/cmake/utils/GetGitHash.cmake
@@ -1,15 +1,39 @@
function(get_git_hash WORKING_DIR VERSION_MAJ VERSION_MIN VERSION_PAT OUTPUT_VAR)
execute_process(
- COMMAND git describe --always --dirty
+ COMMAND git describe --tags --always --dirty
+ --match "[0-9]*.[0-9]*.[0-9]*"
WORKING_DIRECTORY ${WORKING_DIR}
OUTPUT_VARIABLE _hash
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
- if(NOT _hash)
- message(WARNING "Could not determine git hash")
- set(_hash "${VERSION_MAJ}.${VERSION_MIN}.${VERSION_PAT}-custom")
+ if(_hash MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+")
+ # git describe returned a tag-based version string
+ elseif(_hash)
+ # No version tag found, construct full version string
+ execute_process(
+ COMMAND git rev-list --count HEAD
+ WORKING_DIRECTORY ${WORKING_DIR}
+ OUTPUT_VARIABLE _count
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+ )
+ execute_process(
+ COMMAND git describe --always --dirty
+ WORKING_DIRECTORY ${WORKING_DIR}
+ OUTPUT_VARIABLE _desc
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+ )
+ set(_hash
+ "${VERSION_MAJ}.${VERSION_MIN}.${VERSION_PAT}-${_count}-g${_desc}")
+ elseif(EXISTS "${WORKING_DIR}/VERSION")
+ # No git, use VERSION file (git archive / cgit snapshot)
+ file(READ "${WORKING_DIR}/VERSION" _hash)
+ string(STRIP "${_hash}" _hash)
+ else()
+ set(_hash "${VERSION_MAJ}.${VERSION_MIN}.${VERSION_PAT}")
endif()
set(${OUTPUT_VAR} "${_hash}" PARENT_SCOPE)