# 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/extensions/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/services/device_sync/public/mojom/typemaps.gni",
  "//chromeos/services/secure_channel/public/mojom/typemaps.gni",
  "//components/arc/common/typemaps.gni",
  "//components/metrics/public/cpp/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/mojo/interfaces/typemaps.gni",
  "//mojo/public/cpp/base/typemaps.gni",
  "//mojo/public/cpp/bindings/tests/chromium_typemaps.gni",
  "//net/interfaces/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/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/cursor/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/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 = ""
