From 1f709b985d75a3b27e8ea26af219c0396bcdc350 Mon Sep 17 00:00:00 2001 From: Lars Bilke <lars.bilke@ufz.de> Date: Wed, 30 Sep 2020 10:49:41 +0200 Subject: [PATCH] [CMake] Move git info to PreFind. --- scripts/cmake/PreFind.cmake | 67 +++++++++++++++++++++++++++++++- scripts/cmake/ProjectSetup.cmake | 66 ------------------------------- 2 files changed, 65 insertions(+), 68 deletions(-) diff --git a/scripts/cmake/PreFind.cmake b/scripts/cmake/PreFind.cmake index 58aa681e37f..308323a35d7 100644 --- a/scripts/cmake/PreFind.cmake +++ b/scripts/cmake/PreFind.cmake @@ -1,5 +1,11 @@ +### Git detection ### find_package(Git REQUIRED) +if(DEFINED ENV{OGS_VERSION}) + set(OGS_VERSION $ENV{OGS_VERSION}) + message(STATUS "OGS VERSION: ${OGS_VERSION} (set via environment)") +endif() + if(NOT IS_GIT_REPO) execute_process(COMMAND ${GIT_EXECUTABLE} status WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} @@ -8,8 +14,7 @@ if(NOT IS_GIT_REPO) if(IS_GIT_REPO GREATER 0) set(IS_GIT_REPO FALSE CACHE INTERNAL "") if(DEFINED OGS_VERSION) - message(WARNING "Using user-provided OGS_VERSION: ${OGS_VERSION}!") - message(WARNING "Submodule setup is skipped!") + message(WARNING "Using user-provided OGS_VERSION; Submodule setup is skipped!") else() message(FATAL_ERROR "No git repository found at ${PROJECT_SOURCE_DIR}! " "Please use git to obtain the source code! See " @@ -21,6 +26,64 @@ if(NOT IS_GIT_REPO) endif() endif() +if(IS_GIT_REPO) + # Get version info from Git, implementation based on + # https://github.com/tomtom-international/cpp-dependencies + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --long --dirty --always + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + RESULT_VARIABLE DESCRIBE_RESULT + OUTPUT_VARIABLE DESCRIBE_STDOUT + ) + if(DESCRIBE_RESULT EQUAL 0) + string(STRIP "${DESCRIBE_STDOUT}" DESCRIBE_STDOUT) + message(STATUS "Git reported this project's version as '${DESCRIBE_STDOUT}'") + if(DESCRIBE_STDOUT MATCHES "^(.*)-(dirty)$") + set(DESCRIBE_DIRTY "${CMAKE_MATCH_2}") + set(DESCRIBE_STDOUT "${CMAKE_MATCH_1}") + endif() + if(DESCRIBE_STDOUT MATCHES "^([0-9a-f]+)$") + set(DESCRIBE_COMMIT_NAME "${CMAKE_MATCH_1}") + set(DESCRIBE_STDOUT "") + elseif(DESCRIBE_STDOUT MATCHES "^(.*)-g([0-9a-f]+)$") + set(DESCRIBE_COMMIT_NAME "g${CMAKE_MATCH_2}") + set(DESCRIBE_STDOUT "${CMAKE_MATCH_1}") + endif() + if(DESCRIBE_STDOUT MATCHES "^(.*)-([0-9]+)$") + set(DESCRIBE_COMMIT_COUNT "${CMAKE_MATCH_2}") + set(DESCRIBE_TAG "${CMAKE_MATCH_1}") + set(DESCRIBE_STDOUT "") + endif() + + set(OGS_VERSION ${DESCRIBE_TAG}) + if(DESCRIBE_COMMIT_COUNT GREATER 0) + set(OGS_VERSION "${OGS_VERSION}-${DESCRIBE_COMMIT_COUNT}-${DESCRIBE_COMMIT_NAME}") + endif() + + if(DESCRIBE_DIRTY) + string(TIMESTAMP DESCRIBE_DIRTY_TIMESTAMP "%Y%m%d%H%M%S" UTC) + set(OGS_VERSION "${OGS_VERSION}.dirty.${DESCRIBE_DIRTY_TIMESTAMP}") + endif() + message(STATUS "OGS VERSION: ${OGS_VERSION}") + else() + message(WARNING "Git repository contains no tags! Please run: git fetch --tags") + endif() + + # Get git commit + execute_process( + COMMAND ${GIT_EXECUTABLE} log -1 --format=%H + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_SHA1 + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + execute_process( + COMMAND ${GIT_EXECUTABLE} log -1 --format=%h + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + OUTPUT_VARIABLE GIT_SHA1_SHORT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +endif() if(OGS_USE_PYTHON) find_package(Python3 COMPONENTS Interpreter Development REQUIRED) else() diff --git a/scripts/cmake/ProjectSetup.cmake b/scripts/cmake/ProjectSetup.cmake index 0432deda6ef..4b5c27caecc 100644 --- a/scripts/cmake/ProjectSetup.cmake +++ b/scripts/cmake/ProjectSetup.cmake @@ -27,69 +27,3 @@ if(APPLE) else() set(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}") endif() - -if(NOT IS_GIT_REPO) - return() -endif() - -if(DEFINED ENV{OGS_VERSION}) - set(OGS_VERSION $ENV{OGS_VERSION}) - message(STATUS "OGS VERSION: ${OGS_VERSION} (set via environment)") -else() - # Get version info from Git, implementation based on - # https://github.com/tomtom-international/cpp-dependencies - execute_process( - COMMAND ${GIT_EXECUTABLE} describe --tags --long --dirty --always - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - RESULT_VARIABLE DESCRIBE_RESULT - OUTPUT_VARIABLE DESCRIBE_STDOUT - ) - if(DESCRIBE_RESULT EQUAL 0) - string(STRIP "${DESCRIBE_STDOUT}" DESCRIBE_STDOUT) - message(STATUS "Git reported this project's version as '${DESCRIBE_STDOUT}'") - if(DESCRIBE_STDOUT MATCHES "^(.*)-(dirty)$") - set(DESCRIBE_DIRTY "${CMAKE_MATCH_2}") - set(DESCRIBE_STDOUT "${CMAKE_MATCH_1}") - endif() - if(DESCRIBE_STDOUT MATCHES "^([0-9a-f]+)$") - set(DESCRIBE_COMMIT_NAME "${CMAKE_MATCH_1}") - set(DESCRIBE_STDOUT "") - elseif(DESCRIBE_STDOUT MATCHES "^(.*)-g([0-9a-f]+)$") - set(DESCRIBE_COMMIT_NAME "g${CMAKE_MATCH_2}") - set(DESCRIBE_STDOUT "${CMAKE_MATCH_1}") - endif() - if(DESCRIBE_STDOUT MATCHES "^(.*)-([0-9]+)$") - set(DESCRIBE_COMMIT_COUNT "${CMAKE_MATCH_2}") - set(DESCRIBE_TAG "${CMAKE_MATCH_1}") - set(DESCRIBE_STDOUT "") - endif() - - set(OGS_VERSION ${DESCRIBE_TAG}) - if(DESCRIBE_COMMIT_COUNT GREATER 0) - set(OGS_VERSION "${OGS_VERSION}-${DESCRIBE_COMMIT_COUNT}-${DESCRIBE_COMMIT_NAME}") - endif() - - if(DESCRIBE_DIRTY) - string(TIMESTAMP DESCRIBE_DIRTY_TIMESTAMP "%Y%m%d%H%M%S" UTC) - set(OGS_VERSION "${OGS_VERSION}.dirty.${DESCRIBE_DIRTY_TIMESTAMP}") - endif() - message(STATUS "OGS VERSION: ${OGS_VERSION}") - else() - message(WARNING "Git repository contains no tags! Please run: git fetch --tags") - endif() -endif() - -# Get git commit -execute_process( - COMMAND ${GIT_EXECUTABLE} log -1 --format=%H - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_SHA1 - OUTPUT_STRIP_TRAILING_WHITESPACE -) - -execute_process( - COMMAND ${GIT_EXECUTABLE} log -1 --format=%h - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_SHA1_SHORT - OUTPUT_STRIP_TRAILING_WHITESPACE -) -- GitLab