diff --git a/cmake/rsp/debug.cmake b/cmake/rsp/debug.cmake new file mode 100644 index 0000000..3e82993 --- /dev/null +++ b/cmake/rsp/debug.cmake @@ -0,0 +1,40 @@ +# -------------------------------------------------------------------------------------------------------------- # +# Debug utilities functions +# -------------------------------------------------------------------------------------------------------------- # + +include_guard(GLOBAL) + +# Debug +message(VERBOSE "rsp/debug module included") + +if (NOT COMMAND "dump") + + #! dump : Outputs given variables' name and value + # + # @param ... Variables to output + # + function(dump) + foreach (var ${ARGN}) + message("${var} = ${${var}}") + endforeach () + + # Output as warning so that the developer is able to see call stack! + message(WARNING " ${CMAKE_CURRENT_FUNCTION}() called from ${CMAKE_CURRENT_LIST_FILE}") + endfunction() +endif () + +if (NOT COMMAND "dd") + + #! dump and die: Outputs given variables' name and value and stops build + # + # @param ... Variables to output + # + function(dd) + foreach (var ${ARGN}) + message("${var} = ${${var}}") + endforeach () + + # Output as fatal error to ensure that build stops. + message(FATAL_ERROR " ${CMAKE_CURRENT_FUNCTION}() called from ${CMAKE_CURRENT_LIST_FILE}") + endfunction() +endif () \ No newline at end of file diff --git a/cmake/rsp/helpers.cmake b/cmake/rsp/helpers.cmake index 05d2325..05f6910 100644 --- a/cmake/rsp/helpers.cmake +++ b/cmake/rsp/helpers.cmake @@ -120,35 +120,3 @@ if (NOT COMMAND "safeguard_properties") endforeach () endfunction() endif () - -if (NOT COMMAND "dump") - - #! dump : Outputs given variables' name and value - # - # @param ... Variables to output - # - function(dump) - foreach (var ${ARGN}) - message("${var} = ${${var}}") - endforeach () - - # Output as warning so that the developer is able to see call stack! - message(WARNING " ${CMAKE_CURRENT_FUNCTION}() called from ${CMAKE_CURRENT_LIST_FILE}") - endfunction() -endif () - -if (NOT COMMAND "dd") - - #! dump and die: Outputs given variables' name and value and stops build - # - # @param ... Variables to output - # - function(dd) - foreach (var ${ARGN}) - message("${var} = ${${var}}") - endforeach () - - # Output as fatal error to ensure that build stops. - message(FATAL_ERROR " ${CMAKE_CURRENT_FUNCTION}() called from ${CMAKE_CURRENT_LIST_FILE}") - endfunction() -endif () \ No newline at end of file diff --git a/cmake/rsp/version.cmake b/cmake/rsp/version.cmake index 90c1a69..2b07922 100644 --- a/cmake/rsp/version.cmake +++ b/cmake/rsp/version.cmake @@ -8,81 +8,7 @@ include_guard(GLOBAL) message(VERBOSE "rsp/version module included") include("rsp/git") - -if (NOT COMMAND "semver_parse") - #! semver_parse : Parses a semantic version string - # - # @see https://semver.org/ - # - # @example - # semver_parse(VERSION "v3.4.22-beta.3+AF1004" OUTPUT foo) - # message("${foo_VERSION}") # 3.4.22 - # - # @param VERSION The version string to parse - # @param OUTPUT The output variable to assign parsed results to - # - # @return - # [OUTPUT] The full version string as provided, e.g. "v3.4.22-beta.3+AF1004" - # [OUTPUT]_VERSION CMake friendly version (major.minor.patch), e.g. "3.4.22" - # [OUTPUT]_SEMVER Full version string (without eventual "v" prefix), e.g. "3.4.22-beta.3+AF1004" - # [OUTPUT]_MAJOR Major version, e.g. "3" - # [OUTPUT]_MINOR Minor version, e.g. "4" - # [OUTPUT]_PATCH Patch version, e.g. "22" - # [OUTPUT]_PRE_RELEASE Pre-release, e.g. "beta.3" - # [OUTPUT]_BUILD_METADATA build-meta data, e.g. "AF1004" - # - # @throws If given VERSION is not a valid semantic version - # - function(semver_parse) - set(options "") # N/A - set(oneValueArgs VERSION OUTPUT) - set(multiValueArgs "") # N/A - - cmake_parse_arguments(INPUT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - - # Ensure required arguments are defined - foreach (name ${oneValueArgs}) - if (NOT DEFINED INPUT_${name}) - message(FATAL_ERROR "${name} argument is missing, for ${CMAKE_CURRENT_FUNCTION}()") - endif () - endforeach () - - # Remove eventual "v" prefix from given version string - string(REGEX REPLACE "^[v]" "" cleanVersion "${INPUT_VERSION}") - - # Parse given version string - 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}") - if (CMAKE_MATCH_COUNT LESS 3) - message(FATAL_ERROR "${cleanVersion} is not a valid semantic version") - endif () - - # Extract parts - set("${INPUT_OUTPUT}" "${INPUT_VERSION}") # Full version, as provided - set("${INPUT_OUTPUT}_SEMVER" "${CMAKE_MATCH_0}") # Semantic version (without "v" prefix") - set("${INPUT_OUTPUT}_MAJOR" "${CMAKE_MATCH_1}") - set("${INPUT_OUTPUT}_MINOR" "${CMAKE_MATCH_2}") - set("${INPUT_OUTPUT}_PATCH" "${CMAKE_MATCH_3}") - set("${INPUT_OUTPUT}_PRE_RELEASE" "${CMAKE_MATCH_4}") - set("${INPUT_OUTPUT}_BUILD_METADATA" "${CMAKE_MATCH_5}") - set("${INPUT_OUTPUT}_VERSION" "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}") # major.minor.patch - - # Remove eventual "-" or "+" prefixes from pre-release and build-metadata - string(REGEX REPLACE "^[-]" "" ${INPUT_OUTPUT}_PRE_RELEASE "${${INPUT_OUTPUT}_PRE_RELEASE}") - string(REGEX REPLACE "^[+]" "" ${INPUT_OUTPUT}_BUILD_METADATA "${${INPUT_OUTPUT}_BUILD_METADATA}") - - return( - PROPAGATE - "${INPUT_OUTPUT}" - "${INPUT_OUTPUT}_VERSION" - "${INPUT_OUTPUT}_SEMVER" - "${INPUT_OUTPUT}_MAJOR" - "${INPUT_OUTPUT}_MINOR" - "${INPUT_OUTPUT}_PATCH" - "${INPUT_OUTPUT}_PRE_RELEASE" - "${INPUT_OUTPUT}_BUILD_METADATA" - ) - endfunction() -endif () +include("rsp/version/semver") if (NOT COMMAND "write_version_file") @@ -283,4 +209,4 @@ if (NOT COMMAND "version_from_file") "${INPUT_OUTPUT}_BUILD_METADATA" ) endfunction() -endif () \ No newline at end of file +endif () diff --git a/cmake/rsp/version/semver.cmake b/cmake/rsp/version/semver.cmake new file mode 100644 index 0000000..15f1516 --- /dev/null +++ b/cmake/rsp/version/semver.cmake @@ -0,0 +1,84 @@ +# -------------------------------------------------------------------------------------------------------------- # +# Semantic Version utilities +# -------------------------------------------------------------------------------------------------------------- # + +include_guard(GLOBAL) + +# Debug +message(VERBOSE "rsp/version/semver module included") + +if (NOT COMMAND "semver_parse") + + #! semver_parse : Parses a semantic version string + # + # @see https://semver.org/ + # + # @example + # semver_parse(VERSION "v3.4.22-beta.3+AF1004" OUTPUT foo) + # message("${foo_VERSION}") # 3.4.22 + # + # @param VERSION The version string to parse + # @param OUTPUT The output variable to assign parsed results to + # + # @return + # [OUTPUT] The full version string as provided, e.g. "v3.4.22-beta.3+AF1004" + # [OUTPUT]_VERSION CMake friendly version (major.minor.patch), e.g. "3.4.22" + # [OUTPUT]_SEMVER Full version string (without eventual "v" prefix), e.g. "3.4.22-beta.3+AF1004" + # [OUTPUT]_MAJOR Major version, e.g. "3" + # [OUTPUT]_MINOR Minor version, e.g. "4" + # [OUTPUT]_PATCH Patch version, e.g. "22" + # [OUTPUT]_PRE_RELEASE Pre-release, e.g. "beta.3" + # [OUTPUT]_BUILD_METADATA build-meta data, e.g. "AF1004" + # + # @throws If given VERSION is not a valid semantic version + # + function(semver_parse) + set(options "") # N/A + set(oneValueArgs VERSION OUTPUT) + set(multiValueArgs "") # N/A + + cmake_parse_arguments(INPUT "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + # Ensure required arguments are defined + foreach (name ${oneValueArgs}) + if (NOT DEFINED INPUT_${name}) + message(FATAL_ERROR "${name} argument is missing, for ${CMAKE_CURRENT_FUNCTION}()") + endif () + endforeach () + + # Remove eventual "v" prefix from given version string + string(REGEX REPLACE "^[v]" "" cleanVersion "${INPUT_VERSION}") + + # Parse given version string + 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}") + if (CMAKE_MATCH_COUNT LESS 3) + message(FATAL_ERROR "${cleanVersion} is not a valid semantic version") + endif () + + # Extract parts + set("${INPUT_OUTPUT}" "${INPUT_VERSION}") # Full version, as provided + set("${INPUT_OUTPUT}_SEMVER" "${CMAKE_MATCH_0}") # Semantic version (without "v" prefix") + set("${INPUT_OUTPUT}_MAJOR" "${CMAKE_MATCH_1}") + set("${INPUT_OUTPUT}_MINOR" "${CMAKE_MATCH_2}") + set("${INPUT_OUTPUT}_PATCH" "${CMAKE_MATCH_3}") + set("${INPUT_OUTPUT}_PRE_RELEASE" "${CMAKE_MATCH_4}") + set("${INPUT_OUTPUT}_BUILD_METADATA" "${CMAKE_MATCH_5}") + set("${INPUT_OUTPUT}_VERSION" "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}") # major.minor.patch + + # Remove eventual "-" or "+" prefixes from pre-release and build-metadata + string(REGEX REPLACE "^[-]" "" ${INPUT_OUTPUT}_PRE_RELEASE "${${INPUT_OUTPUT}_PRE_RELEASE}") + string(REGEX REPLACE "^[+]" "" ${INPUT_OUTPUT}_BUILD_METADATA "${${INPUT_OUTPUT}_BUILD_METADATA}") + + return( + PROPAGATE + "${INPUT_OUTPUT}" + "${INPUT_OUTPUT}_VERSION" + "${INPUT_OUTPUT}_SEMVER" + "${INPUT_OUTPUT}_MAJOR" + "${INPUT_OUTPUT}_MINOR" + "${INPUT_OUTPUT}_PATCH" + "${INPUT_OUTPUT}_PRE_RELEASE" + "${INPUT_OUTPUT}_BUILD_METADATA" + ) + endfunction() +endif ()