Adds logic for adding the git tag to defines
This commit is contained in:
@@ -71,10 +71,6 @@ function(addGitBranchDefine TARGET)
|
||||
target_compile_definitions(${TARGET} PRIVATE FGL_GIT_BRANCH="${GIT_BRANCH}")
|
||||
endfunction()
|
||||
|
||||
function(addGitTagDefine TARGET)
|
||||
getGitTag(GIT_TAG)
|
||||
target_compile_definitions(${TARGET} PRIVATE FGL_GIT_TAG="${GIT_TAG}")
|
||||
endfunction()
|
||||
|
||||
function(getIsDirty OUTPUT_VARIABLE)
|
||||
find_package(Git QUIET)
|
||||
@@ -107,9 +103,12 @@ function(addGitDirtyDefine TARGET)
|
||||
target_compile_definitions(${TARGET} PRIVATE FGL_GIT_IS_DIRTY=1)
|
||||
endfunction()
|
||||
|
||||
include(modules/git/tag.cmake)
|
||||
|
||||
function(AddGitInfo TARGET)
|
||||
addGitCommitDefine(${TARGET})
|
||||
addGitBranchDefine(${TARGET})
|
||||
addGitDirtyDefine(${TARGET})
|
||||
addGitTagDefine(${TARGET})
|
||||
addGitUnsyncedDefine(${TARGET})
|
||||
endfunction()
|
||||
|
||||
95
modules/git/tag.cmake
Normal file
95
modules/git/tag.cmake
Normal file
@@ -0,0 +1,95 @@
|
||||
function(getGitTagVersion)
|
||||
execute_process(
|
||||
COMMAND git describe --tags --abbrev=0
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_TAG_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_QUIET
|
||||
)
|
||||
|
||||
if (NOT GIT_TAG_VERSION)
|
||||
set(GIT_TAG_VERSION "v0.0.0")
|
||||
endif ()
|
||||
|
||||
string(REGEX MATCH "v?([0-9]+)\\.([0-9]+)\\.([0-9]+)" _ ${GIT_TAG_VERSION})
|
||||
if (CMAKE_MATCH_1)
|
||||
set(VERSION_MAJOR ${CMAKE_MATCH_1})
|
||||
else ()
|
||||
set(VERSION_MAJOR 0)
|
||||
endif ()
|
||||
if (CMAKE_MATCH_2)
|
||||
set(VERSION_MINOR ${CMAKE_MATCH_2})
|
||||
else ()
|
||||
set(VERSION_MINOR 0)
|
||||
endif ()
|
||||
if (CMAKE_MATCH_3)
|
||||
set(VERSION_PATCH ${CMAKE_MATCH_3})
|
||||
else ()
|
||||
set(VERSION_PATCH 0)
|
||||
endif ()
|
||||
|
||||
set(GIT_TAG_VERSION ${GIT_TAG_VERSION} PARENT_SCOPE)
|
||||
set(VERSION_MAJOR ${VERSION_MAJOR} PARENT_SCOPE)
|
||||
set(VERSION_MINOR ${VERSION_MINOR} PARENT_SCOPE)
|
||||
set(VERSION_PATCH ${VERSION_PATCH} PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
function(setGitTagVersionDefines TARGET)
|
||||
getGitTagVersion()
|
||||
|
||||
message("Adding targets to ${TARGET}_X_VERSION")
|
||||
|
||||
target_compile_definitions(${TARGET} PUBLIC
|
||||
${TARGET}_MAJOR_VERSION=${VERSION_MAJOR}
|
||||
${TARGET}_MINOR_VERSION=${VERSION_MINOR}
|
||||
${TARGET}_PATCH_VERSION=${VERSION_PATCH}
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(addGitTagDefine TARGET)
|
||||
getGitTag(GIT_TAG)
|
||||
setGitTagVersionDefines(${TARGET})
|
||||
target_compile_definitions(${TARGET} PRIVATE FGL_GIT_TAG="${GIT_TAG}")
|
||||
endfunction()
|
||||
|
||||
function(getIsUnsynced OUTPUT_VARIABLE)
|
||||
find_package(Git QUIET)
|
||||
if (GIT_FOUND)
|
||||
# Get the commit hash of the latest tag
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} rev-list -n 1 $ (${GIT_EXECUTABLE} describe --tags --abbrev=0)
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE TAG_COMMIT
|
||||
ERROR_VARIABLE GIT_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
# Get the current commit hash
|
||||
execute_process(
|
||||
COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE CURRENT_COMMIT
|
||||
ERROR_VARIABLE GIT_ERROR2
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
ERROR_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
if (NOT GIT_ERROR AND NOT GIT_ERROR2)
|
||||
if (NOT "${CURRENT_COMMIT}" STREQUAL "${TAG_COMMIT}")
|
||||
set(${OUTPUT_VARIABLE} "1" PARENT_SCOPE)
|
||||
else ()
|
||||
set(${OUTPUT_VARIABLE} "0" PARENT_SCOPE)
|
||||
endif ()
|
||||
else ()
|
||||
set(${OUTPUT_VARIABLE} "-1" PARENT_SCOPE)
|
||||
endif ()
|
||||
else ()
|
||||
set(${OUTPUT_VARIABLE} "-1" PARENT_SCOPE)
|
||||
endif ()
|
||||
endfunction()
|
||||
|
||||
function(addGitUnsyncedDefine TARGET)
|
||||
getIsUnsynced(GIT_UNSYNCED)
|
||||
target_compile_definitions(${TARGET} PRIVATE FGL_GIT_UNSYNCED=${GIT_UNSYNCED})
|
||||
endfunction()
|
||||
Reference in New Issue
Block a user