diff options
author | Balint Dobszay <balint.dobszay@arm.com> | 2021-11-08 11:59:10 +0100 |
---|---|---|
committer | György Szing <gyorgy.szing@arm.com> | 2021-11-29 17:12:07 +0100 |
commit | 384fc50dd83b903039b498e52cd7077cd99510bb (patch) | |
tree | eab0baffd36878ad84817e7f4b7b53b833fdc883 | |
parent | 882a2db4f9181fc6ddb505b82262f82e5a0c2fd5 (diff) | |
download | trusted-services-384fc50dd83b903039b498e52cd7077cd99510bb.tar.gz |
Add TsGetVersion CMake module
Add new module with helper functions to handle version number parsing.
Signed-off-by: Balint Dobszay <balint.dobszay@arm.com>
Change-Id: I459736b0ac4a0d4280187f3849fded028042497b
-rw-r--r-- | deployments/deployment.cmake | 1 | ||||
-rw-r--r-- | tools/cmake/common/TsGetVersion.cmake | 63 |
2 files changed, 64 insertions, 0 deletions
diff --git a/deployments/deployment.cmake b/deployments/deployment.cmake index ca2a5e1ca..e1aaed033 100644 --- a/deployments/deployment.cmake +++ b/deployments/deployment.cmake @@ -23,6 +23,7 @@ set(ENV{TS_ROOT} "${TS_ROOT}") include(${TS_ROOT}/tools/cmake/common/Utils.cmake REQUIRED) include(${TS_ROOT}/tools/cmake/common/AddComponents.cmake REQUIRED) include(${TS_ROOT}/tools/cmake/common/AddPlatform.cmake REQUIRED) +include(${TS_ROOT}/tools/cmake/common/TsGetVersion.cmake REQUIRED) # Check build environment requirements are met ts_verify_build_env() diff --git a/tools/cmake/common/TsGetVersion.cmake b/tools/cmake/common/TsGetVersion.cmake new file mode 100644 index 000000000..df15b66a5 --- /dev/null +++ b/tools/cmake/common/TsGetVersion.cmake @@ -0,0 +1,63 @@ +#------------------------------------------------------------------------------- +# Copyright (c) 2021, Arm Limited and Contributors. All rights reserved. +# +# SPDX-License-Identifier: BSD-3-Clause +# +#------------------------------------------------------------------------------- + +include_guard(DIRECTORY) + +include(${TS_ROOT}/tools/cmake/common/Utils.cmake REQUIRED) + +#[===[.rst: +.. cmake:command:: version_semver_read + + .. code:: cmake + + version_semver_read(FILE <path> MAJOR <major> MINOR <minor> PATCH <patch>) + + Parse version number from file to variables. The file must contain the version number in + semantic versioning format (https://semver.org). The file must not contain anything else, e.g. + no newline at the end, etc. + + INPUTS: + + ``FILE`` + Path to file that contains the version number. + + OUTPUTS: + + ``MAJOR`` + Major version parsed from the file. + + ``MINOR`` + Minor version parsed from the file. + + ``PATCH`` + Patch version parsed from the file. + +#]===] +function(version_semver_read) + set(options) + set(oneValueArgs FILE MAJOR MINOR PATCH) + set(multiValueArgs) + cmake_parse_arguments(_MY_PARAMS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + check_args(version_semver_read FILE MAJOR MINOR PATCH) + + file(READ "${_MY_PARAMS_FILE}" version_string) + + # Note: double backslash is parsed in a quoted argument as just a single backslash. So the regex + # itself contains a single backslash, which escapes the period to a literal period. + string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" regexOut "${version_string}") + + if(NOT CMAKE_MATCH_COUNT EQUAL 3) + message(FATAL_ERROR + "${_MY_PARAMS_FILE} contains invalid semantic version: \"${version_string}\"") + endif() + + # CMAKE_MATCH_0 is the entire match, 1, 2, etc. are the actual capture groups + set(${_MY_PARAMS_MAJOR} ${CMAKE_MATCH_1} PARENT_SCOPE) + set(${_MY_PARAMS_MINOR} ${CMAKE_MATCH_2} PARENT_SCOPE) + set(${_MY_PARAMS_PATCH} ${CMAKE_MATCH_3} PARENT_SCOPE) +endfunction() |