summaryrefslogtreecommitdiffstats
path: root/cmake/AutoOption.cmake
blob: 3f7cdee0ea20ff86d9cdd548ebee9cb1a1621010 (plain)
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
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()