diff options
Diffstat (limited to 'cmake/Version.cmake')
-rw-r--r-- | cmake/Version.cmake | 70 |
1 files changed, 56 insertions, 14 deletions
diff --git a/cmake/Version.cmake b/cmake/Version.cmake index 9beb338..8a6a2fd 100644 --- a/cmake/Version.cmake +++ b/cmake/Version.cmake @@ -31,40 +31,82 @@ macro(gen_project_version VERSION_INPUT_FILE VERSION_INPUT_FILE_TEMPLATE VERSION endmacro(gen_project_version VERSION_INPUT_FILE VERSION_INPUT_FILE_TEMPLATE VERSION_OUTPUT_FILE) # macro to get Git version information -macro(get_repository_version REPOSITORY_VERSION VERSION_HEADER_FILE VERSION_BUILD_TYPE GIT_EXECUTABLE REPOSITORY_DIR) +macro(get_repository_version REPOSITORY_VERSION REPOSITORY_BRANCH VERSION_HEADER_FILE VERSION_BUILD_TYPE GIT_EXECUTABLE REPOSITORY_DIR) + # set empty Git version information + set(GIT_VERSION "") + # set empty Git branch information + set(GIT_BRANCH "") + # check if generated version header from source package is available if(EXISTS ${VERSION_HEADER_FILE}) # get version information from the generated version header of the source package - file(READ ${VERSION_HEADER_FILE} GIT_VERSION) - string(REGEX MATCH "DNBD3_VERSION[ \t]+\"([0-9][A-Za-z0-9.+~-]*)\"" GIT_VERSION ${GIT_VERSION}) + file(READ ${VERSION_HEADER_FILE} GIT_VERSION_VERBOSE) + string(REGEX MATCH "DNBD3_VERSION[ \t]+\"([0-9][A-Za-z0-9.+~-]*)\"" GIT_VERSION ${GIT_VERSION_VERBOSE}) set(GIT_VERSION "${CMAKE_MATCH_1}") + + # get branch information from the generated version header of the source package + file(READ ${VERSION_HEADER_FILE} GIT_BRANCH_VERBOSE) + string(REGEX MATCH "DNBD3_BRANCH[ \t]+\"([0-9][A-Za-z0-9.+~-]*)\"" GIT_BRANCH ${GIT_BRANCH_VERBOSE}) + set(GIT_BRANCH "${CMAKE_MATCH_1}") else(EXISTS ${VERSION_HEADER_FILE}) # get detailed Git version information from Git repository execute_process(COMMAND ${GIT_EXECUTABLE} describe HEAD WORKING_DIRECTORY ${REPOSITORY_DIR} - OUTPUT_VARIABLE GIT_VERSION - OUTPUT_STRIP_TRAILING_WHITESPACE) - execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD - WORKING_DIRECTORY ${REPOSITORY_DIR} - OUTPUT_VARIABLE GIT_BRANCH + OUTPUT_VARIABLE GIT_VERSION_VERBOSE + RESULT_VARIABLE GIT_RETURN_CODE + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) + # parse version information from repository if Git command succeeds + if(GIT_RETURN_CODE EQUAL 0) + # remove the first letter of the version to satisfy packaging rules + string(REGEX MATCH "([0-9]+:)?[0-9][A-Za-z0-9.+~-]*" GIT_VERSION ${GIT_VERSION_VERBOSE}) + endif(GIT_RETURN_CODE EQUAL 0) + # overwrite version from Git if version is unknown if(GIT_VERSION STREQUAL "") - set(GIT_VERSION "unknown") + # overwrite version information with unknown version 'v0.0' + set(GIT_VERSION "0.0") + + # print a message in Release build configuration to warn about the unknown version + if(${VERSION_BUILD_TYPE} MATCHES "Release") + message(WARNING "The version information from Git tags in this dnbd3 Git repository is missing! Please fetch all Git tags of this repository for a ${VERSION_BUILD_TYPE} build!") + endif(${VERSION_BUILD_TYPE} MATCHES "Release") endif(GIT_VERSION STREQUAL "") + + # get current branch of Git repository + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${REPOSITORY_DIR} + OUTPUT_VARIABLE GIT_BRANCH_VERBOSE + RESULT_VARIABLE GIT_RETURN_CODE + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + + # check output to get branch information + if(GIT_RETURN_CODE EQUAL 0) + set(GIT_BRANCH ${GIT_BRANCH_VERBOSE}) + endif(GIT_RETURN_CODE EQUAL 0) + if(GIT_BRANCH STREQUAL "") + # overwrite branch information with 'unknown' branch set(GIT_BRANCH "unknown") + + # print a message in Release build configuration to warn about the unknown branch + if(${VERSION_BUILD_TYPE} MATCHES "Release") + message(WARNING "The current branch in the dnbd3 Git repository is unknown! Please check the branches of this repository for a ${VERSION_BUILD_TYPE} build!") + endif(${VERSION_BUILD_TYPE} MATCHES "Release") endif(GIT_BRANCH STREQUAL "") # get status of Git repository execute_process(COMMAND ${GIT_EXECUTABLE} status --porcelain WORKING_DIRECTORY ${REPOSITORY_DIR} OUTPUT_VARIABLE GIT_STATUS + RESULT_VARIABLE GIT_RETURN_CODE + ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) # check if Git repository is dirty - if(NOT GIT_STATUS STREQUAL "") + if(GIT_RETURN_CODE EQUAL 0 AND NOT GIT_STATUS STREQUAL "") # the Git repository is dirty, thus extend the version information set(GIT_VERSION "${GIT_VERSION}+MOD") @@ -72,10 +114,10 @@ macro(get_repository_version REPOSITORY_VERSION VERSION_HEADER_FILE VERSION_BUIL if(${VERSION_BUILD_TYPE} MATCHES "Release") message(WARNING "This dnbd3 Git repository is dirty! Please commit or revert all changes for a ${VERSION_BUILD_TYPE} build!") endif(${VERSION_BUILD_TYPE} MATCHES "Release") - endif(NOT GIT_STATUS STREQUAL "") + endif(GIT_RETURN_CODE EQUAL 0 AND NOT GIT_STATUS STREQUAL "") endif(EXISTS ${VERSION_HEADER_FILE}) - # remove the first letter of the version to satisfy packaging rules - # and return to caller - string(REGEX MATCH "([0-9]+:)?[0-9][A-Za-z0-9.+~-]*" ${REPOSITORY_VERSION} ${GIT_VERSION}) + # return version and branch to caller + set(${REPOSITORY_VERSION} ${GIT_VERSION}) + set(${REPOSITORY_BRANCH} ${GIT_BRANCH}) endmacro(get_repository_version) |