You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
2.5 KiB
CMake

cmake_minimum_required(VERSION 3.15)
function(get_commit_isdirty)
execute_process(COMMAND
"${GIT_EXECUTABLE}" status --short --untracked-files=no
WORKING_DIRECTORY "${WORK_DIR}"
OUTPUT_VARIABLE COMMIT_ISDIRTY_OUT
RESULT_VARIABLE exit_code
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(exit_code EQUAL 0 AND "${COMMIT_ISDIRTY_OUT}" STREQUAL "")
set(COMMIT_ISDIRTY 0 PARENT_SCOPE)
else()
set(COMMIT_ISDIRTY 1 PARENT_SCOPE)
endif()
endfunction()
function(get_commit_hash)
execute_process(COMMAND
"${GIT_EXECUTABLE}" rev-parse --short=12 HEAD
WORKING_DIRECTORY "${WORK_DIR}"
OUTPUT_VARIABLE COMMIT_HASH_VAR
RESULT_VARIABLE exit_code
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(exit_code EQUAL 0)
set(COMMIT_HASH ${COMMIT_HASH_VAR} PARENT_SCOPE)
else()
set(COMMIT_HASH unknown PARENT_SCOPE)
endif()
endfunction()
function(get_patch_version)
if(${DAEMON_PATCH_VERSION} STREQUAL patch)
execute_process(COMMAND
"${GIT_EXECUTABLE}" describe --tags --first-parent --abbrev=0
WORKING_DIRECTORY "${WORK_DIR}"
OUTPUT_VARIABLE LAST_TAG
RESULT_VARIABLE exit_code
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(exit_code EQUAL 0)
set(GET_PATCH_VERSION_CMD ${GIT_EXECUTABLE} rev-list HEAD...${LAST_TAG} --count)
else()
set(GET_PATCH_VERSION_CMD ${GIT_EXECUTABLE} rev-list HEAD --count)
endif()
execute_process(COMMAND
${GET_PATCH_VERSION_CMD}
WORKING_DIRECTORY "${WORK_DIR}"
OUTPUT_VARIABLE NUMBER_PATCH
RESULT_VARIABLE exit_code
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(exit_code EQUAL 0)
set(DAEMON_PATCH_VERSION ${NUMBER_PATCH} PARENT_SCOPE)
else()
set(DAEMON_PATCH_VERSION 0 PARENT_SCOPE)
endif()
endif()
endfunction()
find_package(Git QUIET)
if(Git_FOUND)
get_commit_isdirty()
get_commit_hash()
get_patch_version()
else()
message(WARNING "Git not found, it is impossible to get the hash and patch version (they will be set to zero)")
if(${DAEMON_PATCH_VERSION} STREQUAL patch)
set(DAEMON_PATCH_VERSION 0)
endif()
set(COMMIT_ISDIRTY 1)
set(COMMIT_HASH unknown)
endif()
configure_file(${IN_FILE} ${OUT_FILE} @ONLY)