Files
fgl_cmake_modules/modules/git/commit.cmake

88 lines
2.3 KiB
CMake

function(getCommitHash OUTPUT_VARIABLE)
find_package(Git QUIET)
if (GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_HASH
ERROR_VARIABLE GIT_ERROR
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
)
if (NOT GIT_ERROR)
set(${OUTPUT_VARIABLE} ${GIT_HASH} PARENT_SCOPE)
else ()
set(${OUTPUT_VARIABLE} "unknown" PARENT_SCOPE)
endif ()
else ()
set(${OUTPUT_VARIABLE} "unknown" PARENT_SCOPE)
endif ()
endfunction()
function(getBranchName OUTPUT_VARIABLE)
find_package(Git QUIET)
if (GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_BRANCH
ERROR_VARIABLE GIT_ERROR
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
)
if (NOT GIT_ERROR)
set(${OUTPUT_VARIABLE} ${GIT_BRANCH} PARENT_SCOPE)
else ()
set(${OUTPUT_VARIABLE} "unknown" PARENT_SCOPE)
endif ()
else ()
set(${OUTPUT_VARIABLE} "unknown" PARENT_SCOPE)
endif ()
endfunction()
function(addGitCommitDefine TARGET)
getCommitHash(GIT_HASH)
target_compile_definitions(${TARGET} PRIVATE FGL_GIT_COMMIT="${GIT_HASH}")
endfunction()
function(addGitBranchDefine TARGET)
getBranchName(GIT_BRANCH)
target_compile_definitions(${TARGET} PRIVATE FGL_GIT_BRANCH="${GIT_BRANCH}")
endfunction()
function(getIsDirty OUTPUT_VARIABLE)
find_package(Git QUIET)
if (GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} status --porcelain
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_STATUS
ERROR_VARIABLE GIT_ERROR
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_STRIP_TRAILING_WHITESPACE
)
if (NOT GIT_ERROR)
if (GIT_STATUS)
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(addGitDirtyDefine TARGET)
getIsDirty(GIT_DIRTY)
target_compile_definitions(${TARGET} PRIVATE FGL_GIT_DIRTY=${GIT_DIRTY})
endfunction()
function(AddGitInfo TARGET)
addGitCommitDefine(${TARGET})
addGitBranchDefine(${TARGET})
addGitDirtyDefine(${TARGET})
endfunction()