aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/GitVersion.cmake43
1 files changed, 43 insertions, 0 deletions
diff --git a/cmake/GitVersion.cmake b/cmake/GitVersion.cmake
new file mode 100644
index 0000000..7280510
--- /dev/null
+++ b/cmake/GitVersion.cmake
@@ -0,0 +1,43 @@
+function(get_version_from_git)
+ find_package(Git QUIET)
+ if(NOT Git_FOUND)
+ message(WARNING "Git not found. Setting fallback version.")
+ 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)
+ 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")
+ return()
+ endif()
+ message(${GIT_TAG})
+
+ 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")
+ return()
+ endif()
+ message(${GIT_BRANCH})
+
+ 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