string(REPLACE "[built-in]" "" _allowed "${ARGN}")
# Set the cache properties
- set(${NAME} ${DEFAULT} CACHE STRING ${_description})
+ set(${NAME} ${DEFAULT} CACHE STRING "${_description}")
set_property(CACHE ${NAME} PROPERTY STRINGS ${_allowed})
# Check that the value is one of the allowed
message(FATAL_ERROR "Invalid value for ${NAME}: ${${NAME}}")
endfunction()
+# Declares a cache variable with ON/OFF/AUTO values
+#
+# Usage:
+# gmx_option_trivalue(VAR "Description" DEFAULT)
+#
+# Output:
+# VAR is created in the cache, and the caller can assume that the value is
+# always one of ON/OFF/AUTO. Additionally, VAR_AUTO is set if value is AUTO,
+# and VAR_FORCE is set if value is ON.
+# These make it convenient to check for any combination of states with simple
+# if() statements (simple if(VAR) matches AUTO and ON).
+function(GMX_OPTION_TRIVALUE NAME DESCRIPTION DEFAULT)
+ set(_description "${DESCRIPTION}. ON/OFF/AUTO")
+ set(${NAME} ${DEFAULT} CACHE STRING "${_description}")
+ set_property(CACHE ${NAME} PROPERTY STRINGS ON OFF AUTO)
+
+ set(${NAME}_AUTO OFF)
+ set(${NAME}_FORCE OFF)
+ string(TOUPPER "${${NAME}}" ${NAME})
+ if ("${NAME}" STREQUAL "AUTO")
+ set(${NAME}_AUTO ON)
+ elseif (${NAME})
+ set(${NAME}_FORCE ON)
+ set(${NAME} ON)
+ else()
+ set(${NAME} OFF)
+ endif()
+ # Always provide the sanitized value to the caller
+ set(${NAME} "${${NAME}}" PARENT_SCOPE)
+ set(${NAME}_AUTO "${${NAME}_AUTO}" PARENT_SCOPE)
+ set(${NAME}_FORCE "${${NAME}_FORCE}" PARENT_SCOPE)
+endfunction()
+
# Hides or shows a cache value based on conditions
#
# Usage: