# Copyright 2014 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/mojo_application.gni")
import("//mojo/public/tools/bindings/mojom.gni")

group("indirect_service") {
  deps = [
    ":indirect_service_demo",
    ":indirect_integer_service",
    ":integer_service",
  ]
}

mojo_native_application("indirect_service_demo") {
  output_name = "indirect_service_demo"

  sources = [
    "indirect_service_demo.cc",
  ]

  deps = [
    ":bindings",
    "//base",
    "//mojo/application",
    "//mojo/environment:chromium",
    "//mojo/message_pump",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/utility",
  ]
}

mojo_native_application("integer_service") {
  output_name = "integer_service"

  sources = [
    "integer_service.cc",
  ]

  deps = [
    ":bindings",
    "//mojo/public/cpp/application:standalone",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/utility",
  ]
}

mojo_native_application("indirect_integer_service") {
  output_name = "indirect_integer_service"

  sources = [
    "indirect_integer_service.cc",
  ]

  deps = [
    ":bindings",
    "//mojo/public/cpp/application:standalone",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/utility",
  ]
}

mojom("bindings") {
  sources = [
    "indirect_service_demo.mojom",
  ]
}
