forked from shader-slang/slang
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAutoOption.cmake
49 lines (43 loc) · 1.42 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
43
44
45
46
47
48
49
function(auto_option name package description)
set(${name} "AUTO" CACHE STRING ${description})
set_property(CACHE ${name} PROPERTY STRINGS AUTO ON OFF)
if(${${name}} OR ${${name}} STREQUAL "AUTO")
if(${${name}} STREQUAL "AUTO")
set(req)
else()
set(req REQUIRED)
endif()
find_package(${package} ${req})
if(${${package}_FOUND})
set(${name} TRUE CACHE STRING ${description} FORCE)
else()
set(${name} FALSE CACHE STRING ${description} FORCE)
endif()
endif()
endfunction()
function(enum_option name init description)
set(enums)
set(is_enum TRUE)
foreach(enum_or_desc ${ARGN})
if(is_enum)
list(APPEND enums ${enum_or_desc})
string(APPEND description "\n" "${enum_or_desc}" ": ")
set(is_enum FALSE)
else()
string(APPEND description "${enum_or_desc}")
set(is_enum TRUE)
endif()
endforeach()
set(${name} ${init} CACHE STRING ${description})
set_property(CACHE ${name} PROPERTY STRINGS ${enums})
foreach(enum ${enums})
if(${${name}} STREQUAL ${enum})
return()
endif()
endforeach()
message(FATAL_ERROR "${name} must be one of ${enums}")
endfunction()
function(advanced_option name description default)
option(${name} ${description} ${default})
mark_as_advanced(${name})
endfunction()