Skip to content

Commit 52b9fcd

Browse files
committed
Merge branch 'main' into add-required-args-macro
2 parents c241267 + f31201e commit 52b9fcd

File tree

4 files changed

+126
-108
lines changed

4 files changed

+126
-108
lines changed

cmake/rsp/debug.cmake

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# -------------------------------------------------------------------------------------------------------------- #
2+
# Debug utilities functions
3+
# -------------------------------------------------------------------------------------------------------------- #
4+
5+
include_guard(GLOBAL)
6+
7+
# Debug
8+
message(VERBOSE "rsp/debug module included")
9+
10+
if (NOT COMMAND "dump")
11+
12+
#! dump : Outputs given variables' name and value
13+
#
14+
# @param ... Variables to output
15+
#
16+
function(dump)
17+
foreach (var ${ARGN})
18+
message("${var} = ${${var}}")
19+
endforeach ()
20+
21+
# Output as warning so that the developer is able to see call stack!
22+
message(WARNING " ${CMAKE_CURRENT_FUNCTION}() called from ${CMAKE_CURRENT_LIST_FILE}")
23+
endfunction()
24+
endif ()
25+
26+
if (NOT COMMAND "dd")
27+
28+
#! dump and die: Outputs given variables' name and value and stops build
29+
#
30+
# @param ... Variables to output
31+
#
32+
function(dd)
33+
foreach (var ${ARGN})
34+
message("${var} = ${${var}}")
35+
endforeach ()
36+
37+
# Output as fatal error to ensure that build stops.
38+
message(FATAL_ERROR " ${CMAKE_CURRENT_FUNCTION}() called from ${CMAKE_CURRENT_LIST_FILE}")
39+
endfunction()
40+
endif ()

cmake/rsp/helpers.cmake

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -156,35 +156,3 @@ if (NOT COMMAND "safeguard_properties")
156156
endforeach ()
157157
endfunction()
158158
endif ()
159-
160-
if (NOT COMMAND "dump")
161-
162-
#! dump : Outputs given variables' name and value
163-
#
164-
# @param ... Variables to output
165-
#
166-
function(dump)
167-
foreach (var ${ARGN})
168-
message("${var} = ${${var}}")
169-
endforeach ()
170-
171-
# Output as warning so that the developer is able to see call stack!
172-
message(WARNING " ${CMAKE_CURRENT_FUNCTION}() called from ${CMAKE_CURRENT_LIST_FILE}")
173-
endfunction()
174-
endif ()
175-
176-
if (NOT COMMAND "dd")
177-
178-
#! dump and die: Outputs given variables' name and value and stops build
179-
#
180-
# @param ... Variables to output
181-
#
182-
function(dd)
183-
foreach (var ${ARGN})
184-
message("${var} = ${${var}}")
185-
endforeach ()
186-
187-
# Output as fatal error to ensure that build stops.
188-
message(FATAL_ERROR " ${CMAKE_CURRENT_FUNCTION}() called from ${CMAKE_CURRENT_LIST_FILE}")
189-
endfunction()
190-
endif ()

cmake/rsp/version.cmake

Lines changed: 2 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -8,81 +8,7 @@ include_guard(GLOBAL)
88
message(VERBOSE "rsp/version module included")
99

1010
include("rsp/git")
11-
12-
if (NOT COMMAND "semver_parse")
13-
#! semver_parse : Parses a semantic version string
14-
#
15-
# @see https://semver.org/
16-
#
17-
# @example
18-
# semver_parse(VERSION "v3.4.22-beta.3+AF1004" OUTPUT foo)
19-
# message("${foo_VERSION}") # 3.4.22
20-
#
21-
# @param VERSION <string> The version string to parse
22-
# @param OUTPUT <variable> The output variable to assign parsed results to
23-
#
24-
# @return
25-
# [OUTPUT] The full version string as provided, e.g. "v3.4.22-beta.3+AF1004"
26-
# [OUTPUT]_VERSION CMake friendly version (major.minor.patch), e.g. "3.4.22"
27-
# [OUTPUT]_SEMVER Full version string (without eventual "v" prefix), e.g. "3.4.22-beta.3+AF1004"
28-
# [OUTPUT]_MAJOR Major version, e.g. "3"
29-
# [OUTPUT]_MINOR Minor version, e.g. "4"
30-
# [OUTPUT]_PATCH Patch version, e.g. "22"
31-
# [OUTPUT]_PRE_RELEASE Pre-release, e.g. "beta.3"
32-
# [OUTPUT]_BUILD_METADATA build-meta data, e.g. "AF1004"
33-
#
34-
# @throws If given VERSION is not a valid semantic version
35-
#
36-
function(semver_parse)
37-
set(options "") # N/A
38-
set(oneValueArgs VERSION OUTPUT)
39-
set(multiValueArgs "") # N/A
40-
41-
cmake_parse_arguments(INPUT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
42-
43-
# Ensure required arguments are defined
44-
foreach (name ${oneValueArgs})
45-
if (NOT DEFINED INPUT_${name})
46-
message(FATAL_ERROR "${name} argument is missing, for ${CMAKE_CURRENT_FUNCTION}()")
47-
endif ()
48-
endforeach ()
49-
50-
# Remove eventual "v" prefix from given version string
51-
string(REGEX REPLACE "^[v]" "" cleanVersion "${INPUT_VERSION}")
52-
53-
# Parse given version string
54-
string(REGEX MATCH "^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[\.0-9A-Za-z-]+)?([+][\.0-9A-Za-z-]+)?$" matches "${cleanVersion}")
55-
if (CMAKE_MATCH_COUNT LESS 3)
56-
message(FATAL_ERROR "${cleanVersion} is not a valid semantic version")
57-
endif ()
58-
59-
# Extract parts
60-
set("${INPUT_OUTPUT}" "${INPUT_VERSION}") # Full version, as provided
61-
set("${INPUT_OUTPUT}_SEMVER" "${CMAKE_MATCH_0}") # Semantic version (without "v" prefix")
62-
set("${INPUT_OUTPUT}_MAJOR" "${CMAKE_MATCH_1}")
63-
set("${INPUT_OUTPUT}_MINOR" "${CMAKE_MATCH_2}")
64-
set("${INPUT_OUTPUT}_PATCH" "${CMAKE_MATCH_3}")
65-
set("${INPUT_OUTPUT}_PRE_RELEASE" "${CMAKE_MATCH_4}")
66-
set("${INPUT_OUTPUT}_BUILD_METADATA" "${CMAKE_MATCH_5}")
67-
set("${INPUT_OUTPUT}_VERSION" "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}") # major.minor.patch
68-
69-
# Remove eventual "-" or "+" prefixes from pre-release and build-metadata
70-
string(REGEX REPLACE "^[-]" "" ${INPUT_OUTPUT}_PRE_RELEASE "${${INPUT_OUTPUT}_PRE_RELEASE}")
71-
string(REGEX REPLACE "^[+]" "" ${INPUT_OUTPUT}_BUILD_METADATA "${${INPUT_OUTPUT}_BUILD_METADATA}")
72-
73-
return(
74-
PROPAGATE
75-
"${INPUT_OUTPUT}"
76-
"${INPUT_OUTPUT}_VERSION"
77-
"${INPUT_OUTPUT}_SEMVER"
78-
"${INPUT_OUTPUT}_MAJOR"
79-
"${INPUT_OUTPUT}_MINOR"
80-
"${INPUT_OUTPUT}_PATCH"
81-
"${INPUT_OUTPUT}_PRE_RELEASE"
82-
"${INPUT_OUTPUT}_BUILD_METADATA"
83-
)
84-
endfunction()
85-
endif ()
11+
include("rsp/version/semver")
8612

8713
if (NOT COMMAND "write_version_file")
8814

@@ -283,4 +209,4 @@ if (NOT COMMAND "version_from_file")
283209
"${INPUT_OUTPUT}_BUILD_METADATA"
284210
)
285211
endfunction()
286-
endif ()
212+
endif ()

cmake/rsp/version/semver.cmake

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# -------------------------------------------------------------------------------------------------------------- #
2+
# Semantic Version utilities
3+
# -------------------------------------------------------------------------------------------------------------- #
4+
5+
include_guard(GLOBAL)
6+
7+
# Debug
8+
message(VERBOSE "rsp/version/semver module included")
9+
10+
if (NOT COMMAND "semver_parse")
11+
12+
#! semver_parse : Parses a semantic version string
13+
#
14+
# @see https://semver.org/
15+
#
16+
# @example
17+
# semver_parse(VERSION "v3.4.22-beta.3+AF1004" OUTPUT foo)
18+
# message("${foo_VERSION}") # 3.4.22
19+
#
20+
# @param VERSION <string> The version string to parse
21+
# @param OUTPUT <variable> The output variable to assign parsed results to
22+
#
23+
# @return
24+
# [OUTPUT] The full version string as provided, e.g. "v3.4.22-beta.3+AF1004"
25+
# [OUTPUT]_VERSION CMake friendly version (major.minor.patch), e.g. "3.4.22"
26+
# [OUTPUT]_SEMVER Full version string (without eventual "v" prefix), e.g. "3.4.22-beta.3+AF1004"
27+
# [OUTPUT]_MAJOR Major version, e.g. "3"
28+
# [OUTPUT]_MINOR Minor version, e.g. "4"
29+
# [OUTPUT]_PATCH Patch version, e.g. "22"
30+
# [OUTPUT]_PRE_RELEASE Pre-release, e.g. "beta.3"
31+
# [OUTPUT]_BUILD_METADATA build-meta data, e.g. "AF1004"
32+
#
33+
# @throws If given VERSION is not a valid semantic version
34+
#
35+
function(semver_parse)
36+
set(options "") # N/A
37+
set(oneValueArgs VERSION OUTPUT)
38+
set(multiValueArgs "") # N/A
39+
40+
cmake_parse_arguments(INPUT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
41+
42+
# Ensure required arguments are defined
43+
foreach (name ${oneValueArgs})
44+
if (NOT DEFINED INPUT_${name})
45+
message(FATAL_ERROR "${name} argument is missing, for ${CMAKE_CURRENT_FUNCTION}()")
46+
endif ()
47+
endforeach ()
48+
49+
# Remove eventual "v" prefix from given version string
50+
string(REGEX REPLACE "^[v]" "" cleanVersion "${INPUT_VERSION}")
51+
52+
# Parse given version string
53+
string(REGEX MATCH "^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[\.0-9A-Za-z-]+)?([+][\.0-9A-Za-z-]+)?$" matches "${cleanVersion}")
54+
if (CMAKE_MATCH_COUNT LESS 3)
55+
message(FATAL_ERROR "${cleanVersion} is not a valid semantic version")
56+
endif ()
57+
58+
# Extract parts
59+
set("${INPUT_OUTPUT}" "${INPUT_VERSION}") # Full version, as provided
60+
set("${INPUT_OUTPUT}_SEMVER" "${CMAKE_MATCH_0}") # Semantic version (without "v" prefix")
61+
set("${INPUT_OUTPUT}_MAJOR" "${CMAKE_MATCH_1}")
62+
set("${INPUT_OUTPUT}_MINOR" "${CMAKE_MATCH_2}")
63+
set("${INPUT_OUTPUT}_PATCH" "${CMAKE_MATCH_3}")
64+
set("${INPUT_OUTPUT}_PRE_RELEASE" "${CMAKE_MATCH_4}")
65+
set("${INPUT_OUTPUT}_BUILD_METADATA" "${CMAKE_MATCH_5}")
66+
set("${INPUT_OUTPUT}_VERSION" "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}") # major.minor.patch
67+
68+
# Remove eventual "-" or "+" prefixes from pre-release and build-metadata
69+
string(REGEX REPLACE "^[-]" "" ${INPUT_OUTPUT}_PRE_RELEASE "${${INPUT_OUTPUT}_PRE_RELEASE}")
70+
string(REGEX REPLACE "^[+]" "" ${INPUT_OUTPUT}_BUILD_METADATA "${${INPUT_OUTPUT}_BUILD_METADATA}")
71+
72+
return(
73+
PROPAGATE
74+
"${INPUT_OUTPUT}"
75+
"${INPUT_OUTPUT}_VERSION"
76+
"${INPUT_OUTPUT}_SEMVER"
77+
"${INPUT_OUTPUT}_MAJOR"
78+
"${INPUT_OUTPUT}_MINOR"
79+
"${INPUT_OUTPUT}_PATCH"
80+
"${INPUT_OUTPUT}_PRE_RELEASE"
81+
"${INPUT_OUTPUT}_BUILD_METADATA"
82+
)
83+
endfunction()
84+
endif ()

0 commit comments

Comments
 (0)