Select Git revision
GitVersion.cmake

Sylvain Fargier authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
GitVersion.cmake 1.66 KiB
find_program(GIT_EXE NAMES git git.cmd PATHS
${GIT_PATH}
ENV PATH
$ENV{GIT_PATH}
CMAKE_FIND_ROOT_PATH_BOTH)
if(NOT GIT_EXE)
find_package(Git)
if(GIT_FOUND)
set(GIT_EXE ${GIT_EXECUTABLE})
endif(GIT_FOUND)
endif(NOT GIT_EXE)
if(NOT CMAKE_SCRIPT_MODE_FILE)
add_custom_target(git_check ALL DEPENDS ${CMAKE_BINARY_DIR}/.git_version)
set(GIT_WORKDIR "${CMAKE_SOURCE_DIR}")
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/.git_version
COMMAND ${CMAKE_COMMAND} -DGIT_WORKDIR="${GIT_WORKDIR}" -P "${CMAKE_CURRENT_LIST_FILE}"
DEPENDS ${CMAKE_SOURCE_DIR}/.git)
include(GitBadge)
endif(NOT CMAKE_SCRIPT_MODE_FILE)
if (EXISTS "${CMAKE_SOURCE_DIR}/.git/shallow")
# Use git fetch --unshallow to count commits
message(STATUS "Count commits: shallow clone")
set(GIT_COUNT "0")
else()
execute_process(
COMMAND ${GIT_EXE} "log" "--pretty=format:"
WORKING_DIRECTORY "${GIT_WORKDIR}"
ERROR_FILE "${CMAKE_BINARY_DIR}/.git_error.log"
OUTPUT_FILE ${CMAKE_BINARY_DIR}/.git_version)
file(READ ${CMAKE_BINARY_DIR}/.git_version GIT_COUNT)
string(LENGTH "${GIT_COUNT}" GIT_COUNT)
file(WRITE ${CMAKE_BINARY_DIR}/.git_version ${GIT_COUNT})
message(STATUS "Count commits: ${GIT_COUNT}")
endif()
execute_process(
COMMAND ${GIT_EXE} "rev-parse" "--short" "HEAD"
WORKING_DIRECTORY "${GIT_WORKDIR}"
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE GIT_SHORT)
execute_process(
COMMAND ${GIT_EXE} "status" "-s"
WORKING_DIRECTORY "${GIT_WORKDIR}"
OUTPUT_VARIABLE GIT_DIRTY)
if(GIT_DIRTY)
message(STATUS "Git tree is dirty")
set(GIT_DIRTY "+")
endif(GIT_DIRTY)