aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@users.noreply.github.com>2026-04-21 14:38:32 -0400
committerGitHub <noreply@github.com>2026-04-21 14:38:32 -0400
commitd91c7bd6a35e2d979aeb1c2d11c6d8a21b57e173 (patch)
treea9fab62b682e8b06c34192e447da6656ad034572 /cmake
parente05702d1818088439fd017786a036103062db358 (diff)
parentee4c7beb65ddef497e9349d4ffc71d5bd58777cc (diff)
downloadstasis-d91c7bd6a35e2d979aeb1c2d11c6d8a21b57e173.tar.gz
Merge pull request #135 from jhunkeler/cmake-git-versionHEADmaster
Generate version string based on repository information
Diffstat (limited to 'cmake')
-rw-r--r--cmake/GitVersion.cmake48
1 files changed, 48 insertions, 0 deletions
diff --git a/cmake/GitVersion.cmake b/cmake/GitVersion.cmake
new file mode 100644
index 0000000..c9c6159
--- /dev/null
+++ b/cmake/GitVersion.cmake
@@ -0,0 +1,48 @@
+function(set_version_fallback)
+ message(WARNING "Version information not available. Using fallback...")
+ set(PROJECT_VERSION "0.0.0")
+ set(PROJECT_VERSION ${PROJECT_VERSION} PARENT_SCOPE)
+ set(PROJECT_VERSION_BRANCH "unknown")
+ set(PROJECT_VERSION_BRANCH ${PROJECT_VERSION_BRANCH} PARENT_SCOPE)
+endfunction()
+
+function(get_version_from_git)
+ find_package(Git QUIET)
+ if(NOT Git_FOUND)
+ message(WARNING "Git not found.")
+ set_version_fallback()
+ return()
+ endif()
+
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} describe --first-parent --long --dirty --tags --always
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE GIT_TAG
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ RESULT_VARIABLE GIT_RESULT
+ )
+ if(NOT GIT_RESULT EQUAL 0)
+ message(WARNING "Failed to get git describe info")
+ set_version_fallback()
+ return()
+ endif()
+
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE GIT_BRANCH
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ RESULT_VARIABLE GIT_RESULT
+ )
+ if(NOT GIT_RESULT EQUAL 0)
+ message(WARNING "Failed to get git branch")
+ set_version_fallback()
+ return()
+ endif()
+
+ string(REGEX REPLACE "^v" "" CLEAN_TAG "${GIT_TAG}")
+ set(PROJECT_VERSION ${CLEAN_TAG})
+ set(PROJECT_VERSION ${CLEAN_TAG} PARENT_SCOPE)
+ set(PROJECT_VERSION_BRANCH ${GIT_BRANCH})
+ set(PROJECT_VERSION_BRANCH ${GIT_BRANCH} PARENT_SCOPE)
+endfunction() \ No newline at end of file