# Copyright 2015 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.

import("//mojo/public/dart/rules.gni")
import("//mojo/services/mojo_services.gni")

# TODO(johnmccutchan): Automate this.
# for i in `find lib/|grep mojom.dart|sort`;do echo "  \"$i\",";done
bindings_sources = [
  "lib/activity/activity.mojom.dart",
  "lib/authentication/authentication.mojom.dart",
  "lib/contacts/contacts.mojom.dart",
  "lib/http_server/http_request.mojom.dart",
  "lib/http_server/http_response.mojom.dart",
  "lib/http_server/http_server_factory.mojom.dart",
  "lib/http_server/http_server.mojom.dart",
  "lib/icu_data/icu_data.mojom.dart",
  "lib/input/input.mojom.dart",
  "lib/keyboard/keyboard.mojom.dart",
  "lib/mojo/asset_bundle/asset_bundle.mojom.dart",
  "lib/mojo/authenticating_url_loader_interceptor_meta_factory.mojom.dart",
  "lib/mojo/camera.mojom.dart",
  "lib/mojo/clipboard.mojom.dart",
  "lib/mojo/content_handler.mojom.dart",
  "lib/mojo/cookie_store.mojom.dart",
  "lib/mojo/device_info.mojom.dart",
  "lib/mojo/files/directory.mojom.dart",
  "lib/mojo/files/file.mojom.dart",
  "lib/mojo/files/files.mojom.dart",
  "lib/mojo/files/ioctl.mojom.dart",
  "lib/mojo/files/ioctl_terminal.mojom.dart",
  "lib/mojo/files/types.mojom.dart",
  "lib/mojo/geocoder.mojom.dart",
  "lib/mojo/geometry.mojom.dart",
  "lib/mojo/gfx/composition/hit_tests.mojom.dart",
  "lib/mojo/gfx/composition/nodes.mojom.dart",
  "lib/mojo/gfx/composition/renderers.mojom.dart",
  "lib/mojo/gfx/composition/resources.mojom.dart",
  "lib/mojo/gfx/composition/scenes.mojom.dart",
  "lib/mojo/gfx/composition/scene_token.mojom.dart",
  "lib/mojo/gfx/composition/scheduling.mojom.dart",
  "lib/mojo/host_resolver.mojom.dart",
  "lib/mojo/http_connection.mojom.dart",
  "lib/mojo/http_message.mojom.dart",
  "lib/mojo/http_server.mojom.dart",
  "lib/mojo/input_event_constants.mojom.dart",
  "lib/mojo/input_events.mojom.dart",
  "lib/mojo/input_key_codes.mojom.dart",
  "lib/mojo/location.mojom.dart",
  "lib/mojo/location_service.mojom.dart",
  "lib/mojo/native_viewport_event_dispatcher.mojom.dart",
  "lib/mojo/navigation.mojom.dart",
  "lib/mojo/net_address.mojom.dart",
  "lib/mojo/network_service.mojom.dart",
  "lib/mojo/quads.mojom.dart",
  "lib/mojo/service_registry.mojom.dart",
  "lib/mojo/sharing.mojom.dart",
  "lib/mojo/surface_id.mojom.dart",
  "lib/mojo/surfaces.mojom.dart",
  "lib/mojo/tcp_bound_socket.mojom.dart",
  "lib/mojo/tcp_connected_socket.mojom.dart",
  "lib/mojo/tcp_server_socket.mojom.dart",
  "lib/mojo/terminal/terminal_client.mojom.dart",
  "lib/mojo/terminal/terminal.mojom.dart",
  "lib/mojo/udp_socket.mojom.dart",
  "lib/mojo/ui/input_connection.mojom.dart",
  "lib/mojo/ui/input_dispatcher.mojom.dart",
  "lib/mojo/ui/layouts.mojom.dart",
  "lib/mojo/ui/view_associates.mojom.dart",
  "lib/mojo/ui/view_manager.mojom.dart",
  "lib/mojo/ui/view_provider.mojom.dart",
  "lib/mojo/ui/views.mojom.dart",
  "lib/mojo/ui/view_trees.mojom.dart",
  "lib/mojo/url_loader_interceptor.mojom.dart",
  "lib/mojo/url_loader.mojom.dart",
  "lib/mojo/url_response_disk_cache.mojom.dart",
  "lib/mojo/web_socket.mojom.dart",
  "lib/native_support/process.mojom.dart",
  "lib/nfc/nfc.mojom.dart",
  "lib/notifications/notifications.mojom.dart",
  "lib/prediction/prediction.mojom.dart",
  "lib/sensors/sensors.mojom.dart",
  "lib/speech_recognizer/speech_recognizer.mojom.dart",
  "lib/tracing/tracing.mojom.dart",
  "lib/vsync/vsync.mojom.dart",
]

dart_pkg("mojo_services") {
  sources = [
              "CHANGELOG.md",
              "README.md",
              "pubspec.yaml",
            ] + bindings_sources

  deps = [
    "//mojo/public/dart",
    "//mojo/services",
  ]
}
