diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 1f6a1d46b..e941537bb 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -63,15 +63,19 @@ configure_file( if(TOPLEVEL_PROJECT) feature_summary(WHAT ALL VAR FEATURES) + message(STATUS "Building ${CMAKE_PROJECT_DESCRIPTION}:") message(STATUS "${FEATURES}") - message(STATUS "Building ${PROJECT_DESCRIPTION}:") - message(STATUS " VERSION: ${CMAKE_PROJECT_VERSION}") - message(STATUS " RELEASE: ${CMAKE_PROJECT_RELEASE}") - message(STATUS " GIT_REV: ${CMAKE_PROJECT_GIT_REV}") - message(STATUS " GIT_BRANCH: ${CMAKE_PROJECT_GIT_BRANCH}") - message(STATUS " VARIANT: ${CMAKE_PROJECT_VARIANT}") - message(STATUS " BUILD_ID: ${CMAKE_PROJECT_BUILD_ID}") - message(STATUS " BUILD_DATE: ${CMAKE_PROJECT_BUILD_DATE}") + + if(FOUND_GIT_VERSION) + message(STATUS " VERSION: ${CMAKE_PROJECT_VERSION}") + message(STATUS " RELEASE: ${CMAKE_PROJECT_RELEASE}") + message(STATUS " GIT_REV: ${CMAKE_PROJECT_GIT_REV}") + message(STATUS " GIT_BRANCH: ${CMAKE_PROJECT_GIT_BRANCH}") + message(STATUS " VARIANT: ${CMAKE_PROJECT_VARIANT}") + message(STATUS " BUILD_ID: ${CMAKE_PROJECT_BUILD_ID}") + message(STATUS " BUILD_DATE: ${CMAKE_PROJECT_BUILD_DATE}") + endif() + message(STATUS " ARCH: ${CMAKE_SYSTEM_PROCESSOR}") message(STATUS " OS: ${CMAKE_SYSTEM_NAME}") endif() diff --git a/common/cmake/GetVersion.cmake b/common/cmake/GetVersion.cmake index 89a895da1..8b01b2326 100644 --- a/common/cmake/GetVersion.cmake +++ b/common/cmake/GetVersion.cmake @@ -35,69 +35,72 @@ function(GetVersion DIR PREFIX) ) if(NOT RC EQUAL 0) - message(FATAL_ERROR + set(FOUND_GIT_VERSION OFF PARENT_SCOPE) + message(WARNING "Failed to retrieve version information from Git. " "Make sure that the source directory is a Git repo and " "contains at least one valid tag like 'v0.1.0'" ) + else() + set(FOUND_GIT_VERSION ON PARENT_SCOPE) + + string(REGEX REPLACE "^v([0-9]+\\.[0-9]+\\.[0-9]+)$" "\\1" VERSION ${VERSION_STR}) + string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" MAJOR_VERSION ${VERSION_STR}) + string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" MINOR_VERSION ${VERSION_STR}) + string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" PATCH_VERSION ${VERSION_STR}) + + string(TIMESTAMP BUILD_DATE "%Y%m%d") + + if(CMAKE_BUILD_TYPE) + string(TOLOWER "${CMAKE_BUILD_TYPE}" VARIANT) + else() + set(VARIANT "release") + endif() + + if(DEFINED ENV{CI}) + string(APPEND VARIANT "-ci") + string(SUBSTRING $ENV{CI_COMMIT_SHA} 0 7 GIT_REV) + set(GIT_BRANCH $ENV{CI_COMMIT_REF_NAME}) + else() + execute_process( + COMMAND git rev-parse --short=7 HEAD + WORKING_DIRECTORY ${DIR} + OUTPUT_VARIABLE GIT_REV + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + execute_process( + COMMAND git rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${DIR} + OUTPUT_VARIABLE GIT_BRANCH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + endif() + + if(DEFINED ENV{CI_COMMIT_TAG}) + set(RELEASE 1) + else() + string(REPLACE "-" "_" GIT_BRANCH_NORM ${GIT_BRANCH}) + string(REPLACE "-" "_" VARIANT_NORM ${VARIANT}) + + set(RELEASE "1.${GIT_BRANCH_NORM}_${VARIANT_NORM}.${BUILD_DATE}git${GIT_REV}") + endif() + + set(BUILD_ID "v${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${GIT_REV}-${VARIANT}" ) + + # Return results to parent scope + set(${PREFIX}_VERSION_STR ${VERSION_STR} PARENT_SCOPE) + set(${PREFIX}_VERSION ${VERSION} PARENT_SCOPE) + set(${PREFIX}_MAJOR_VERSION ${MAJOR_VERSION} PARENT_SCOPE) + set(${PREFIX}_MINOR_VERSION ${MINOR_VERSION} PARENT_SCOPE) + set(${PREFIX}_PATCH_VERSION ${PATCH_VERSION} PARENT_SCOPE) + set(${PREFIX}_RELEASE ${RELEASE} PARENT_SCOPE) + set(${PREFIX}_GIT_REV ${GIT_REV} PARENT_SCOPE) + set(${PREFIX}_GIT_BRANCH ${GIT_BRANCH} PARENT_SCOPE) + set(${PREFIX}_GIT_BRANCH_NORM ${GIT_BRANCH_NORM} PARENT_SCOPE) + set(${PREFIX}_VARIANT ${VARIANT} PARENT_SCOPE) + set(${PREFIX}_VARIANT_NORM ${VARIANT_NORM} PARENT_SCOPE) + set(${PREFIX}_BUILD_ID ${BUILD_ID} PARENT_SCOPE) + set(${PREFIX}_BUILD_DATE ${BUILD_DATE} PARENT_SCOPE) endif() - - string(REGEX REPLACE "^v([0-9]+\\.[0-9]+\\.[0-9]+)$" "\\1" VERSION ${VERSION_STR}) - string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\1" MAJOR_VERSION ${VERSION_STR}) - string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\2" MINOR_VERSION ${VERSION_STR}) - string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)$" "\\3" PATCH_VERSION ${VERSION_STR}) - - string(TIMESTAMP BUILD_DATE "%Y%m%d") - - if(CMAKE_BUILD_TYPE) - string(TOLOWER "${CMAKE_BUILD_TYPE}" VARIANT) - else() - set(VARIANT "release") - endif() - - if(DEFINED ENV{CI}) - string(APPEND VARIANT "-ci") - string(SUBSTRING $ENV{CI_COMMIT_SHA} 0 7 GIT_REV) - set(GIT_BRANCH $ENV{CI_COMMIT_REF_NAME}) - else() - execute_process( - COMMAND git rev-parse --short=7 HEAD - WORKING_DIRECTORY ${DIR} - OUTPUT_VARIABLE GIT_REV - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - - execute_process( - COMMAND git rev-parse --abbrev-ref HEAD - WORKING_DIRECTORY ${DIR} - OUTPUT_VARIABLE GIT_BRANCH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - endif() - - if(DEFINED ENV{CI_COMMIT_TAG}) - set(RELEASE 1) - else() - string(REPLACE "-" "_" GIT_BRANCH_NORM ${GIT_BRANCH}) - string(REPLACE "-" "_" VARIANT_NORM ${VARIANT}) - - set(RELEASE "1.${GIT_BRANCH_NORM}_${VARIANT_NORM}.${BUILD_DATE}git${GIT_REV}") - endif() - - set(BUILD_ID "v${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}-${GIT_REV}-${VARIANT}" ) - - # Return results to parent scope - set(${PREFIX}_VERSION_STR ${VERSION_STR} PARENT_SCOPE) - set(${PREFIX}_VERSION ${VERSION} PARENT_SCOPE) - set(${PREFIX}_MAJOR_VERSION ${MAJOR_VERSION} PARENT_SCOPE) - set(${PREFIX}_MINOR_VERSION ${MINOR_VERSION} PARENT_SCOPE) - set(${PREFIX}_PATCH_VERSION ${PATCH_VERSION} PARENT_SCOPE) - set(${PREFIX}_RELEASE ${RELEASE} PARENT_SCOPE) - set(${PREFIX}_GIT_REV ${GIT_REV} PARENT_SCOPE) - set(${PREFIX}_GIT_BRANCH ${GIT_BRANCH} PARENT_SCOPE) - set(${PREFIX}_GIT_BRANCH_NORM ${GIT_BRANCH_NORM} PARENT_SCOPE) - set(${PREFIX}_VARIANT ${VARIANT} PARENT_SCOPE) - set(${PREFIX}_VARIANT_NORM ${VARIANT_NORM} PARENT_SCOPE) - set(${PREFIX}_BUILD_ID ${BUILD_ID} PARENT_SCOPE) - set(${PREFIX}_BUILD_DATE ${BUILD_DATE} PARENT_SCOPE) endfunction(GetVersion)