# 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_sdk.gni")

# GYP version: mojo/public/mojo_public.gyp:mojo_application_base
mojo_sdk_source_set("application") {
  sources = [
    "application_connection.h",
    "application_delegate.h",
    "application_impl.h",
    "connect.h",
    "connection_context.h",
    "interface_factory.h",
    "lib/application_connection.cc",
    "lib/application_delegate.cc",
    "lib/application_impl.cc",
    "lib/interface_factory_connector.h",
    "lib/service_connector_registry.cc",
    "lib/service_connector_registry.h",
    "lib/service_provider_impl.cc",
    "lib/service_registry.cc",
    "lib/service_registry.h",
    "service_connector.h",
    "service_provider_impl.h",
  ]

  mojo_sdk_deps = [
    "mojo/public/cpp/bindings",
    "mojo/public/cpp/environment",
    "mojo/public/cpp/system",
    "mojo/public/interfaces/application",
  ]
}

# GYP version: mojo/public/mojo_public.gyp:mojo_application_standalone
mojo_sdk_source_set("standalone") {
  sources = [
    "lib/application_runner.cc",
  ]

  public_deps = [
    ":application",
  ]

  mojo_sdk_deps = [
    "mojo/public/cpp/environment:standalone",
    "mojo/public/cpp/utility",
  ]
}

mojo_sdk_source_set("test_support") {
  testonly = true
  sources = [
    "application_test_base.h",
    "lib/application_test_base.cc",
  ]

  deps = [
    ":application",
    "//testing/gtest",
  ]

  mojo_sdk_deps = [
    "mojo/public/cpp/bindings",
    "mojo/public/cpp/environment",
    "mojo/public/cpp/system",
    "mojo/public/interfaces/application",
  ]
}

mojo_sdk_source_set("test_support_standalone") {
  testonly = true
  sources = [
    "lib/application_test_main.cc",
  ]

  public_deps = [
    ":test_support",
  ]

  deps = [
    ":application",
  ]

  mojo_sdk_deps = [
    "mojo/public/interfaces/application",
    "mojo/public/cpp/environment:standalone",
    "mojo/public/cpp/system",
    "mojo/public/cpp/utility",
    "mojo/public/interfaces/application",
  ]
}
