blob: 1816568e7c176b811ecfa17eaabcc12d84290423 [file] [log] [blame]
get_filename_component(VERSION_SRC_DIR ${CMAKE_CURRENT_LIST_DIR} DIRECTORY)
set(VERSION_SRC_DIR "${VERSION_SRC_DIR}/..")
find_package(Git)
function(set_open62541_version)
# Generate a git-describe version string from Git repository tags
if(GIT_EXECUTABLE AND NOT DEFINED OPEN62541_VERSION)
execute_process(
COMMAND ${GIT_EXECUTABLE} describe --tags --dirty --match "v*"
WORKING_DIRECTORY "${VERSION_SRC_DIR}"
OUTPUT_VARIABLE GIT_DESCRIBE_VERSION
RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT GIT_DESCRIBE_ERROR_CODE)
# Example values can be:
# v1.2
# v1.2.3
# v1.2.3-rc1
# v1.2.3-rc1-dirty
# v1.2.3-5-g4538abcd
# v1.2.3-5-g4538abcd-dirty
set(OPEN62541_VERSION ${GIT_DESCRIBE_VERSION})
endif()
endif()
if(OPEN62541_VERSION)
STRING(REGEX REPLACE "^(v[0-9\\.]+)(.*)$"
"\\1"
GIT_VERSION_NUMBERS
"${OPEN62541_VERSION}" )
STRING(REGEX REPLACE "^v([0-9\\.]+)(.*)$"
"\\2"
GIT_VERSION_LABEL
"${OPEN62541_VERSION}" )
if("${GIT_VERSION_NUMBERS}" MATCHES "^v([0-9]+)(.*)$")
STRING(REGEX REPLACE "^v([0-9]+)\\.?(.*)$"
"\\1"
GIT_VER_MAJOR
"${GIT_VERSION_NUMBERS}" )
if("${GIT_VERSION_NUMBERS}" MATCHES "^v([0-9]+)\\.([0-9]+)(.*)$")
STRING(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)(.*)$"
"\\2"
GIT_VER_MINOR
"${GIT_VERSION_NUMBERS}" )
if("${GIT_VERSION_NUMBERS}" MATCHES "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)$")
STRING(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+)(.*)$"
"\\3"
GIT_VER_PATCH
"${GIT_VERSION_NUMBERS}" )
else()
set(GIT_VER_PATCH 0)
endif()
else()
set(GIT_VER_MINOR 0)
set(GIT_VER_PATCH 0)
endif()
else()
set(GIT_VER_MAJOR 0)
set(GIT_VER_MINOR 0)
set(GIT_VER_PATCH 0)
endif()
set(OPEN62541_VER_MAJOR ${GIT_VER_MAJOR} PARENT_SCOPE)
set(OPEN62541_VER_MINOR ${GIT_VER_MINOR} PARENT_SCOPE)
set(OPEN62541_VER_PATCH ${GIT_VER_PATCH} PARENT_SCOPE)
set(OPEN62541_VER_LABEL "${GIT_VERSION_LABEL}" PARENT_SCOPE)
set(OPEN62541_VER_COMMIT ${OPEN62541_VERSION} PARENT_SCOPE)
else()
# Final fallback: Just use a bogus version string that is semantically older
# than anything else and spit out a warning to the developer.
set(OPEN62541_VERSION "v0.0.0-unknown" PARENT_SCOPE)
set(OPEN62541_VER_MAJOR 0 PARENT_SCOPE)
set(OPEN62541_VER_MINOR 0 PARENT_SCOPE)
set(OPEN62541_VER_PATCH 0 PARENT_SCOPE)
set(OPEN62541_VER_LABEL "-unknown" PARENT_SCOPE)
set(OPEN62541_VER_COMMIT "undefined" PARENT_SCOPE)
message(WARNING "Failed to determine OPEN62541_VERSION from repository tags. Using default version \"${OPEN62541_VERSION}\".")
endif()
endfunction()