-
Notifications
You must be signed in to change notification settings - Fork 7
/
AutoOption.cmake
42 lines (38 loc) · 1.29 KB
/
AutoOption.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# Add a new option with default value "auto":
# autoOption(FOOBAR "Support foobar")
#
# To check if FOOBAR support should be enabled, use:
# if(FOOBAR)
#
# If necessary dependencies for FOOBAR are missing, use:
# autoDisable(FOOBAR "Did not find baz")
#
# Example:
# autoOption(FOOBAR "Support foobar")
# if(FOOBAR)
# Check for FOOBAR here.
# if(NOT BAZ_FOUND)
# autoDisable(FOOBAR "Did not find baz")
# endif()
# endif()
function(autoOption name description)
set(${name} AUTO CACHE STRING "${description}")
set_property(CACHE ${name} PROPERTY STRINGS AUTO ON OFF)
if((NOT ${name} STREQUAL ON) AND
(NOT ${name} STREQUAL OFF) AND
(NOT ${name} STREQUAL AUTO))
message(FATAL_ERROR "Value of ${name} must be one of ON/OFF/AUTO, but is ${${name}}")
endif()
endfunction()
function(autoDisable name reason)
message(STATUS "${reason}")
if(${name} STREQUAL AUTO)
message(STATUS "Disabled.")
SET(${name} OFF PARENT_SCOPE)
elseif(${name} STREQUAL ON)
message(SEND_ERROR "Aborting because ${name} was set to ON.")
else()
message(AUTHOR_WARNING "Unexpected value for ${name}: ${${name}}.")
endif()
endfunction()
# vim: filetype=cmake:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80:foldmethod=marker