summaryrefslogtreecommitdiff
path: root/cmake/AutoOption.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/AutoOption.cmake')
-rw-r--r--cmake/AutoOption.cmake44
1 files changed, 44 insertions, 0 deletions
diff --git a/cmake/AutoOption.cmake b/cmake/AutoOption.cmake
new file mode 100644
index 000000000..3f7cdee0e
--- /dev/null
+++ b/cmake/AutoOption.cmake
@@ -0,0 +1,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()