Merge topic 'cxx-checks-tolerate-unused-arguments'
[kiteware-cmake.git] / Modules / CMakeInitializeConfigs.cmake
blob9dfe04086ba825ad2662f4878fa79d77811899af
1 # Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
2 # file Copyright.txt or https://cmake.org/licensing for details.
4 include_guard(GLOBAL)
6 # Initializes `<_PREFIX>_<CONFIG>` variables from the corresponding
7 # `<_PREFIX>_<CONFIG>_INIT`, for the configurations currently used.
8 function(cmake_initialize_per_config_variable _PREFIX _DOCSTRING)
9   string(STRIP "${${_PREFIX}_INIT}" _INIT)
10   set("${_PREFIX}" "${_INIT}"
11     CACHE STRING "${_DOCSTRING} during all build types.")
12   mark_as_advanced("${_PREFIX}")
14   if (NOT CMAKE_NOT_USING_CONFIG_FLAGS)
15     set(_CONFIGS Debug Release MinSizeRel RelWithDebInfo)
17     get_property(_GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
18     if (_GENERATOR_IS_MULTI_CONFIG)
19       list(APPEND _CONFIGS ${CMAKE_CONFIGURATION_TYPES})
20     else()
21       if (NOT CMAKE_NO_BUILD_TYPE)
22         set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE_INIT}" CACHE STRING
23           "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel ...")
24       endif()
25       list(APPEND _CONFIGS ${CMAKE_BUILD_TYPE})
26     endif()
28     list(REMOVE_DUPLICATES _CONFIGS)
29     foreach(_BUILD_TYPE IN LISTS _CONFIGS)
30       if (NOT "${_BUILD_TYPE}" STREQUAL "")
31         string(TOUPPER "${_BUILD_TYPE}" _BUILD_TYPE)
32         string(STRIP "${${_PREFIX}_${_BUILD_TYPE}_INIT}" _INIT)
33         set("${_PREFIX}_${_BUILD_TYPE}" "${_INIT}"
34           CACHE STRING "${_DOCSTRING} during ${_BUILD_TYPE} builds.")
35         mark_as_advanced("${_PREFIX}_${_BUILD_TYPE}")
36       endif()
37     endforeach()
38   endif()
39 endfunction()