# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This list contains the name of external platforms that are passed to the
# --ozone-platform command line argument or used for the ozone_platform build
# config. For example ozone_external_platforms = [ "foo1", "foo2", ... ]
ozone_external_platforms = []

# This list contains dependencies for external platforms. Typically, the Ozone
# implementations are placed into ui/ozone/platform/ and so this will look
# something like:
# ozone_external_platform_deps = [ "platform/foo1", "platform/foo_2", ... ]
ozone_external_platform_deps = []

# If a platform has unit tests, the corresponding source_set can be listed here
# so that they get included into ozone_unittests.
# ozone_external_platform_test_deps = [ "platform/foo1:foo1_unitests", ... ]
ozone_external_platform_test_deps = []

# If a platform has integration tests, the corresponding source_set can be
# listed here so that they get included into ozone_integration_tests.
ozone_external_platform_integration_test_deps = []

# If a platform has test support files for ui, the corresponding source_set can
# be listed here so that they get included into ui_test_support.
# ozone_external_platform_ui_test_support_deps = [ "platform/foo1:ui_test_support", ... ]
ozone_external_platform_ui_test_support_deps = []

# If a platform has a test support for interactive_ui_tests, the corresponding
# source_set can be listed here so that they can included into
# interactive_ui_tests.
ozone_external_interactive_ui_tests_deps = []
