panda3d/cmake/macros/PerConfigOption.cmake

51 lines
1.5 KiB
CMake

# Filename: PerConfigOption.cmake
#
# This contains a convenience function for defining per-config options.
# In single-config generators, it will set the option based on the defined
# CMAKE_BUILD_TYPE. In multi-config generators, it will create separate
# options, one per config.
#
# Function: per_config_option
# Usage:
# option(name "help string" [Config1] [Config2] [...ConfigN])
#
# Example:
# per_config_option(DO_DEBUGGING "Enables debugging." Debug Standard)
set(_PER_CONFIG_OPTIONS CACHE INTERNAL "Internal variable")
function(per_config_option name help)
set(_configs ${ARGN})
# In single-config generatotrs, we simply create one config.
if(NOT IS_MULTICONFIG)
list(FIND _configs "${CMAKE_BUILD_TYPE}" _index)
if(${_index} GREATER -1)
option("${name}" "${help}" ON)
else()
option("${name}" "${help}" OFF)
endif()
elseif(DEFINED "${name}")
# It's been explicitly defined, so that makes it not a multi-configuration
# variable anymore.
option("${name}" "${help}")
return()
else()
foreach(_config ${CMAKE_CONFIGURATION_TYPES})
string(TOUPPER "${_config}" _config_upper)
list(FIND _configs "${_config}" _index)
if(${_index} GREATER -1)
option("${name}_${_config_upper}" "${help}" ON)
else()
option("${name}_${_config_upper}" "${help}" OFF)
endif()
endforeach()
endif()
list(APPEND _PER_CONFIG_OPTIONS "${name}")
set(_PER_CONFIG_OPTIONS "${_PER_CONFIG_OPTIONS}" CACHE INTERNAL "Internal variable")
endfunction(per_config_option)