# 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/common/extensions/typemaps.gni",
  "//chrome/common/importer/typemaps.gni",
  "//chrome/common/media_router/mojo/typemaps.gni",
  "//chrome/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/indexed_db/typemaps.gni",
  "//content/common/presentation/typemaps.gni",
  "//content/common/typemaps.gni",
  "//content/public/common/typemaps.gni",
  "//device/bluetooth/public/interfaces/typemaps.gni",
  "//device/gamepad/public/interfaces/typemaps.gni",
  "//extensions/common/typemaps.gni",
  "//gpu/ipc/common/typemaps.gni",
  "//media/capture/mojo/typemaps.gni",
  "//media/mojo/interfaces/typemaps.gni",
  "//mojo/common/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/interfaces/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/ui/public/interfaces/cursor/typemaps.gni",
  "//services/ui/public/interfaces/ime/typemaps.gni",
  "//services/viz/privileged/cpp/typemaps.gni",
  "//services/viz/privileged/interfaces/compositing/typemaps.gni",
  "//services/viz/public/cpp/compositing/typemaps.gni",
  "//skia/public/interfaces/typemaps.gni",
  "//third_party/WebKit/common/typemaps.gni",
  "//third_party/WebKit/public/public_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/mojo/typemaps.gni",
  "//url/mojo/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 = ""
