Skip to content
Snippets Groups Projects
Verified Commit 1f709b98 authored by Lars Bilke's avatar Lars Bilke
Browse files

[CMake] Move git info to PreFind.

parent ce148dad
No related branches found
No related tags found
No related merge requests found
### Git detection ###
find_package(Git REQUIRED) 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) if(NOT IS_GIT_REPO)
execute_process(COMMAND ${GIT_EXECUTABLE} status execute_process(COMMAND ${GIT_EXECUTABLE} status
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
...@@ -8,8 +14,7 @@ if(NOT IS_GIT_REPO) ...@@ -8,8 +14,7 @@ if(NOT IS_GIT_REPO)
if(IS_GIT_REPO GREATER 0) if(IS_GIT_REPO GREATER 0)
set(IS_GIT_REPO FALSE CACHE INTERNAL "") set(IS_GIT_REPO FALSE CACHE INTERNAL "")
if(DEFINED OGS_VERSION) if(DEFINED OGS_VERSION)
message(WARNING "Using user-provided OGS_VERSION: ${OGS_VERSION}!") message(WARNING "Using user-provided OGS_VERSION; Submodule setup is skipped!")
message(WARNING "Submodule setup is skipped!")
else() else()
message(FATAL_ERROR "No git repository found at ${PROJECT_SOURCE_DIR}! " message(FATAL_ERROR "No git repository found at ${PROJECT_SOURCE_DIR}! "
"Please use git to obtain the source code! See " "Please use git to obtain the source code! See "
...@@ -21,6 +26,64 @@ if(NOT IS_GIT_REPO) ...@@ -21,6 +26,64 @@ if(NOT IS_GIT_REPO)
endif() endif()
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) if(OGS_USE_PYTHON)
find_package(Python3 COMPONENTS Interpreter Development REQUIRED) find_package(Python3 COMPONENTS Interpreter Development REQUIRED)
else() else()
......
...@@ -27,69 +27,3 @@ if(APPLE) ...@@ -27,69 +27,3 @@ if(APPLE)
else() else()
set(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}") set(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}")
endif() 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
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment