70 lines
2.9 KiB
Plaintext
70 lines
2.9 KiB
Plaintext
find_program(Git_EXECUTABLE NAMES git)
|
|
|
|
execute_process( COMMAND ${Git_EXECUTABLE} "log" "-n" "1" "--pretty=\"%h\""
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
OUTPUT_VARIABLE Git_Commit_Hash
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
if (Git_Commit_Hash)
|
|
string(REGEX REPLACE "^\"(.*)\"$" "\\1" Git_Commit_Hash ${Git_Commit_Hash} )
|
|
endif()
|
|
|
|
# Check whether we have exact match on tag
|
|
execute_process( COMMAND ${Git_EXECUTABLE} "describe" "--tags" "--exact-match"
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
RESULT_VARIABLE Git_exact_match_tag
|
|
OUTPUT_VARIABLE Git_Tag
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_QUIET)
|
|
|
|
if (Git_exact_match_tag EQUAL 0)
|
|
string(REGEX REPLACE "^v(0|[1-9][0-9]*)[.](0|[1-9][0-9]*)[.](0|[1-9][0-9]*)(-[.0-9A-Za-z-]+)?([+][.0-9A-Za-z-]+)?$" "\\1.\\2.\\3" Bare_Tag ${Git_Tag})
|
|
set(APPLICATION_VERSION "${Bare_Tag}")
|
|
else()
|
|
execute_process( COMMAND ${Git_EXECUTABLE} "describe" "--abbrev=0" "--tags"
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
RESULT_VARIABLE Git_latest_tag
|
|
OUTPUT_VARIABLE Git_Tag
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_QUIET)
|
|
if (NOT Git_latest_tag EQUAL 0)
|
|
set(Git_Tag "0.0.0")
|
|
message(STATUS "WARNING: No git tag is found, using: ${Git_Tag}")
|
|
endif()
|
|
|
|
string(REGEX REPLACE "^v(0|[1-9][0-9]*)[.](0|[1-9][0-9]*)[.](0|[1-9][0-9]*)(-[.0-9A-Za-z-]+)?([+][.0-9A-Za-z-]+)?$" "\\1.\\2.\\3" Bare_Tag ${Git_Tag})
|
|
if (Git_Commit_Hash)
|
|
string(TIMESTAMP timestamp "%Y%m%d%H%M%S")
|
|
set(APPLICATION_VERSION "${Bare_Tag}+${timestamp}+git.${Git_Commit_Hash}")
|
|
else()
|
|
set(APPLICATION_VERSION "${Bare_Tag}-dev")
|
|
endif()
|
|
endif()
|
|
|
|
execute_process( COMMAND ${Git_EXECUTABLE} "diff" "--shortstat"
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
OUTPUT_VARIABLE Dirty1
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_QUIET)
|
|
execute_process( COMMAND ${Git_EXECUTABLE} "diff" "--shortstat" "--cached"
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
OUTPUT_VARIABLE Dirty2
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_QUIET)
|
|
if (Dirty2 OR Dirty1)
|
|
set(APPLICATION_VERSION "${APPLICATION_VERSION}-dirty")
|
|
endif()
|
|
|
|
string (TIMESTAMP Build_DT "%Y-%m-%dT%H:%M:%SZ" UTC)
|
|
|
|
set (APPLICATION_COMMIT "${Git_Commit_Hash}" CACHE INTERNAL "Application commit hash")
|
|
set (APPLICATION_VERSION "${APPLICATION_VERSION}" CACHE INTERNAL "Application version")
|
|
set (APPLICATION_BUILD_DATETIME "${Build_DT}" CACHE INTERNAL "Application build date and time")
|
|
|
|
message("-- Project version is: ${APPLICATION_VERSION}")
|
|
message("-- Project commit hash is: ${APPLICATION_COMMIT}")
|
|
message("-- Project build date and time is: ${APPLICATION_BUILD_DATETIME}")
|
|
|
|
configure_file(
|
|
"${CMAKE_CURRENT_LIST_DIR}/version.h.in"
|
|
"${CMAKE_BINARY_DIR}/include/di/version.h"
|
|
) |