+2015-04-27 Michael Catanzaro <mcatanzaro@igalia.com>
+
+ [CMake] Should be possible for an option to conflict with other options
+ https://bugs.webkit.org/show_bug.cgi?id=143956
+
+ Reviewed by Martin Robinson.
+
+ Add WEBKIT_OPTION_CONFLICT macro, which fails the build if conflicting options are on.
+
+ * Source/cmake/WebKitFeatures.cmake:
+
2015-04-22 Martin Robinson <mrobinson@igalia.com>
[CMake] Autogenerate cmakeconfig.h.cmake
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}_CONFLICTS "")
set(_WEBKIT_AVAILABLE_OPTIONS_${_name}_DEPENDENCIES "")
list(APPEND _WEBKIT_AVAILABLE_OPTIONS ${_name})
EXPOSE_VARIABLE_TO_BUILD(${_name})
set(_WEBKIT_AVAILABLE_OPTIONS_INITIAL_VALUE_${_name} ${_value})
endmacro()
+macro(WEBKIT_OPTION_CONFLICT _name _conflict)
+ list(APPEND _WEBKIT_AVAILABLE_OPTIONS_${_name}_CONFLICTS ${_conflict})
+endmacro()
+
macro(WEBKIT_OPTION_DEPEND _name _depend)
list(APPEND _WEBKIT_AVAILABLE_OPTIONS_${_name}_DEPENDENCIES ${_depend})
endmacro()
if (NOT ${_dependency})
message(STATUS "Disabling ${_name} since ${_dependency} is disabled.")
set(${_name} OFF)
- set(_RESTART_DEPENDENCY_PROCESSING TRUE)
+ set(_OPTION_CHANGED TRUE)
break ()
endif ()
endforeach ()
endmacro()
+macro(_WEBKIT_OPTION_ENFORCE_ALL_DEPENDS)
+ set(_OPTION_CHANGED TRUE)
+ while (${_OPTION_CHANGED})
+ set(_OPTION_CHANGED FALSE)
+ foreach (_name ${_WEBKIT_AVAILABLE_OPTIONS})
+ if (${_name})
+ _WEBKIT_OPTION_ENFORCE_DEPENDS(${_name})
+ endif ()
+ endforeach ()
+ endwhile ()
+endmacro()
+
+macro(_WEBKIT_OPTION_ENFORCE_CONFLICTS _name)
+ foreach (_conflict ${_WEBKIT_AVAILABLE_OPTIONS_${_name}_CONFLICTS})
+ if (${_conflict})
+ message(FATAL_ERROR "${_name} conflicts with ${_conflict}. You must disable one or the other.")
+ endif ()
+ endforeach ()
+endmacro()
+
+macro(_WEBKIT_OPTION_ENFORCE_ALL_CONFLICTS)
+ foreach (_name ${_WEBKIT_AVAILABLE_OPTIONS})
+ if (${_name})
+ _WEBKIT_OPTION_ENFORCE_CONFLICTS(${_name})
+ endif ()
+ endforeach ()
+endmacro()
+
macro(WEBKIT_OPTION_END)
list(SORT _WEBKIT_AVAILABLE_OPTIONS)
set(_MAX_FEATURE_LENGTH 0)
endif ()
endforeach ()
- 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 ()
- endforeach ()
- endwhile ()
+ # Run through every possible depends to make sure we have disabled anything
+ # that could cause an unnecessary conflict before processing conflicts.
+ _WEBKIT_OPTION_ENFORCE_ALL_DEPENDS()
+ _WEBKIT_OPTION_ENFORCE_ALL_CONFLICTS()
foreach (_name ${_WEBKIT_AVAILABLE_OPTIONS})
if (${_name})