|
@@ -0,0 +1,86 @@
|
|
|
+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)
|
|
|
+ set(OPEN62541_VERSION ${GIT_DESCRIBE_VERSION})
|
|
|
+
|
|
|
+ # 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
|
|
|
+
|
|
|
+ STRING(REGEX REPLACE "^(v[0-9\\.]+)(.*)$"
|
|
|
+ "\\1"
|
|
|
+ GIT_VERSION_NUMBERS
|
|
|
+ "${GIT_DESCRIBE_VERSION}" )
|
|
|
+ STRING(REGEX REPLACE "^v([0-9\\.]+)(.*)$"
|
|
|
+ "\\2"
|
|
|
+ GIT_VERSION_LABEL
|
|
|
+ "${GIT_DESCRIBE_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)
|
|
|
+ endif()
|
|
|
+ set(OPEN62541_VER_COMMIT ${GIT_DESCRIBE_VERSION} PARENT_SCOPE)
|
|
|
+
|
|
|
+
|
|
|
+ endif()
|
|
|
+
|
|
|
+ # Final fallback: Just use a bogus version string that is semantically older
|
|
|
+ # than anything else and spit out a warning to the developer.
|
|
|
+ if(NOT DEFINED OPEN62541_VERSION)
|
|
|
+ set(OPEN62541_VERSION "v0.0.0-unknown")
|
|
|
+ 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()
|