[CMake] Should be possible for an option to depend on multiple options
authormcatanzaro@igalia.com <mcatanzaro@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Apr 2015 19:42:34 +0000 (19:42 +0000)
committermcatanzaro@igalia.com <mcatanzaro@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Apr 2015 19:42:34 +0000 (19:42 +0000)
https://bugs.webkit.org/show_bug.cgi?id=143839

Reviewed by Martin Robinson.

Use a list instead of a single variable to track the dependencies of each option. Iterate
over the list as many times as necessary to ensure all options are properly disabled.

* Source/cmake/WebKitFeatures.cmake:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@183202 268f45cc-cd09-0410-ab3c-d52691b4dbfc

ChangeLog
Source/cmake/WebKitFeatures.cmake

index 5c793e9..ff8b2a7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2015-04-23  Michael Catanzaro  <mcatanzaro@igalia.com>
 
+        [CMake] Should be possible for an option to depend on multiple options
+        https://bugs.webkit.org/show_bug.cgi?id=143839
+
+        Reviewed by Martin Robinson.
+
+        Use a list instead of a single variable to track the dependencies of each option. Iterate
+        over the list as many times as necessary to ensure all options are properly disabled.
+
+        * Source/cmake/WebKitFeatures.cmake:
+
+2015-04-23  Michael Catanzaro  <mcatanzaro@igalia.com>
+
         [CMake] ENABLE_THREADED_COMPOSITOR should not be at the bottom of the options list
         https://bugs.webkit.org/show_bug.cgi?id=144103
 
index 2a47e81..d6b7789 100644 (file)
@@ -7,6 +7,7 @@ macro(WEBKIT_OPTION_DEFINE _name _description _public _initial_value)
     set(_WEBKIT_AVAILABLE_OPTIONS_DESCRIPTION_${_name} ${_description})
     set(_WEBKIT_AVAILABLE_OPTIONS_IS_PUBLIC_${_name} ${_public})
     set(_WEBKIT_AVAILABLE_OPTIONS_INITIAL_VALUE_${_name} ${_initial_value})
+    set(_WEBKIT_AVAILABLE_OPTIONS_${_name}_DEPENDENCIES "")
     list(APPEND _WEBKIT_AVAILABLE_OPTIONS ${_name})
 endmacro()
 
@@ -16,7 +17,7 @@ macro(WEBKIT_OPTION_DEFAULT_PORT_VALUE _name _public _value)
 endmacro()
 
 macro(WEBKIT_OPTION_DEPEND _name _depend)
-    set(_WEBKIT_AVAILABLE_OPTIONS_DEPENDENCY_OF_${_name} ${_depend})
+    list(APPEND _WEBKIT_AVAILABLE_OPTIONS_${_name}_DEPENDENCIES ${_depend})
 endmacro()
 
 macro(WEBKIT_OPTION_BEGIN)
@@ -168,6 +169,17 @@ macro(WEBKIT_OPTION_BEGIN)
     WEBKIT_OPTION_DEPEND(ENABLE_TOUCH_SLIDER ENABLE_TOUCH_EVENTS)
 endmacro()
 
+macro(_WEBKIT_OPTION_ENFORCE_DEPENDS _name)
+    foreach (_dependency ${_WEBKIT_AVAILABLE_OPTIONS_${_name}_DEPENDENCIES})
+        if (NOT ${_dependency})
+            message(STATUS "Disabling ${_name} since ${_dependency} is disabled.")
+            set(${_name} OFF)
+            set(_RESTART_DEPENDENCY_PROCESSING TRUE)
+            break ()
+        endif ()
+    endforeach ()
+endmacro()
+
 macro(WEBKIT_OPTION_END)
     list(SORT _WEBKIT_AVAILABLE_OPTIONS)
     set(_MAX_FEATURE_LENGTH 0)
@@ -181,14 +193,19 @@ macro(WEBKIT_OPTION_END)
         if (NOT _WEBKIT_AVAILABLE_OPTIONS_IS_PUBLIC_${_name})
             mark_as_advanced(FORCE ${_name})
         endif ()
+    endforeach ()
 
-        if (${_name} AND DEFINED _WEBKIT_AVAILABLE_OPTIONS_DEPENDENCY_OF_${_name})
-            if (NOT ${${_WEBKIT_AVAILABLE_OPTIONS_DEPENDENCY_OF_${_name}}})
-                message(STATUS "Disabling ${_name} since ${_WEBKIT_AVAILABLE_OPTIONS_DEPENDENCY_OF_${_name}} support is disabled.")
-                set(${_name} OFF)
+    set(_RESTART_DEPENDENCY_PROCESSING TRUE)
+    while (${_RESTART_DEPENDENCY_PROCESSING})
+        set(_RESTART_DEPENDENCY_PROCESSING FALSE)
+        foreach (_name ${_WEBKIT_AVAILABLE_OPTIONS})
+            if (${_name})
+                _WEBKIT_OPTION_ENFORCE_DEPENDS(${_name})
             endif ()
-        endif ()
+        endforeach ()
+    endwhile ()
 
+    foreach (_name ${_WEBKIT_AVAILABLE_OPTIONS})
         if (${_name})
             list(APPEND FEATURE_DEFINES ${_name})
             set(FEATURE_DEFINES_WITH_SPACE_SEPARATOR "${FEATURE_DEFINES_WITH_SPACE_SEPARATOR} ${_name}")