diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ca5b7ed1..0c7cfb7d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -27,8 +27,9 @@ set(projectPrefix MP_UNITS_) list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") -include(CheckCXXFeatureSupported) include(AddMPUnitsModule) +include(CheckCacheVarValues) +include(CheckCXXFeatureSupported) include(GNUInstallDirs) # check if libc++ is being used @@ -77,21 +78,12 @@ option(${projectPrefix}API_NO_CRTP "Enable class definitions without CRTP idiom" ) option(${projectPrefix}API_FREESTANDING "Builds only freestanding part of the library" OFF) set(${projectPrefix}API_CONTRACTS GSL-LITE CACHE STRING "Enable contract checking") +check_cache_var_values(API_CONTRACTS NONE GSL-LITE MS-GSL) message(STATUS "${projectPrefix}API_STD_FORMAT: ${${projectPrefix}API_STD_FORMAT}") message(STATUS "${projectPrefix}API_NO_CRTP: ${${projectPrefix}API_NO_CRTP}") message(STATUS "${projectPrefix}API_FREESTANDING: ${${projectPrefix}API_FREESTANDING}") - -function(cache_var_values name) - set_property(CACHE ${projectPrefix}${name} PROPERTY STRINGS ${ARGN}) - if(NOT ${projectPrefix}${name} IN_LIST ARGN) - message(FATAL_ERROR - "Invalid value '${${projectPrefix}${name}}' provided for a cache variable ${projectPrefix}${name} (${ARGN} allowed)" - ) - endif() - message(STATUS "${projectPrefix}${name}: ${${projectPrefix}${name}}") -endfunction() -cache_var_values(API_CONTRACTS NONE GSL-LITE MS-GSL) +message(STATUS "${projectPrefix}API_CONTRACTS: ${${projectPrefix}API_CONTRACTS}") # validate options if(${projectPrefix}API_FREESTANDING AND NOT ${projectPrefix}API_CONTRACTS STREQUAL "NONE") diff --git a/src/cmake/CheckCacheVarValues.cmake b/src/cmake/CheckCacheVarValues.cmake new file mode 100644 index 00000000..5f15b352 --- /dev/null +++ b/src/cmake/CheckCacheVarValues.cmake @@ -0,0 +1,32 @@ +# The MIT License (MIT) +# +# Copyright (c) 2018 Mateusz Pusz +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +cmake_minimum_required(VERSION 3.25) + +function(check_cache_var_values name) + set_property(CACHE ${projectPrefix}${name} PROPERTY STRINGS ${ARGN}) + if(NOT ${projectPrefix}${name} IN_LIST ARGN) + message(FATAL_ERROR + "Invalid value '${${projectPrefix}${name}}' provided for a cache variable ${projectPrefix}${name} (${ARGN} allowed)" + ) + endif() +endfunction()