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

_typemap_imports = [
  "//ash/public/interfaces/typemaps.gni",
  "//chrome/chrome_cleaner/interfaces/typemaps/typemaps.gni",
  "//chrome/common/importer/typemaps.gni",
  "//chrome/common/media_router/mojo/typemaps.gni",
  "//chrome/typemaps.gni",
  "//chromecast/common/mojom/typemaps.gni",
  "//chromeos/typemaps.gni",
  "//chromeos/components/multidevice/mojom/typemaps.gni",
  "//chromeos/services/secure_channel/public/mojom/typemaps.gni",
  "//components/arc/common/typemaps.gni",
  "//components/sync/mojo/typemaps.gni",
  "//components/typemaps.gni",
  "//content/common/bluetooth/typemaps.gni",
  "//content/common/typemaps.gni",
  "//content/public/common/typemaps.gni",
  "//device/bluetooth/public/mojom/typemaps.gni",
  "//device/bluetooth/public/mojom/test/typemaps.gni",
  "//device/gamepad/public/cpp/typemaps.gni",
  "//gpu/ipc/common/typemaps.gni",
  "//ipc/typemaps.gni",
  "//media/capture/mojom/typemaps.gni",
  "//media/learning/mojo/public/cpp/typemaps.gni",
  "//media/mojo/interfaces/typemaps.gni",
  "//mojo/public/cpp/base/typemaps.gni",
  "//mojo/public/cpp/bindings/tests/chromium_typemaps.gni",
  "//sandbox/mac/mojom/typemaps.gni",
  "//services/audio/public/cpp/typemaps.gni",
  "//services/device/public/mojom/typemaps.gni",
  "//services/identity/public/cpp/typemaps.gni",
  "//services/media_session/public/cpp/typemaps.gni",
  "//services/network/public/cpp/typemaps.gni",
  "//services/preferences/public/cpp/typemaps.gni",
  "//services/proxy_resolver/public/cpp/typemaps.gni",
  "//services/resource_coordinator/public/cpp/typemaps.gni",
  "//services/service_manager/public/cpp/typemaps.gni",
  "//services/ws/public/mojom/ime/typemaps.gni",
  "//services/viz/privileged/cpp/typemaps.gni",
  "//services/viz/privileged/interfaces/compositing/typemaps.gni",
  "//services/viz/public/cpp/compositing/typemaps.gni",
  "//services/viz/public/cpp/hit_test/typemaps.gni",
  "//skia/public/interfaces/typemaps.gni",
  "//third_party/blink/common/typemaps.gni",
  "//third_party/blink/public/public_typemaps.gni",
  "//ui/accessibility/mojom/typemaps.gni",
  "//ui/base/mojo/typemaps.gni",
  "//ui/base/accelerators/mojo/typemaps.gni",
  "//ui/display/mojo/typemaps.gni",
  "//ui/events/devices/mojo/typemaps.gni",
  "//ui/events/mojo/typemaps.gni",
  "//ui/gfx/typemaps.gni",
  "//ui/latency/mojo/typemaps.gni",
  "//ui/ozone/public/interfaces/typemaps.gni",
  "//ui/message_center/public/mojo/typemaps.gni",
  "//url/mojom/typemaps.gni",
]

_typemaps = []
foreach(typemap_import, _typemap_imports) {
  # Avoid reassignment error by assigning to empty scope first.
  _imported = {
  }
  _imported = read_file(typemap_import, "scope")
  _typemaps += _imported.typemaps
}

typemaps = []
foreach(typemap, _typemaps) {
  typemaps += [
    {
      filename = typemap
      config = read_file(typemap, "scope")
    },
  ]
}

component_macro_suffix = ""
