# 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("//services/service_manager/public/service_manifest.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//testing/test.gni")

group("all") {
  testonly = true
  deps = [
    ":service_manager",
    "//services/service_manager/background",
    "//services/service_manager/standalone",
  ]

  if (!is_ios) {
    deps += [
      # These tests heavily rely on service binaries, which are not supported on
      # iOS.
      "//services/service_manager/tests",
    ]
  }
}

source_set("service_manager") {
  sources = [
    "connect_params.cc",
    "connect_params.h",
    "connect_util.cc",
    "connect_util.h",
    "service_manager.cc",
    "service_manager.h",
    "service_overrides.cc",
    "service_overrides.h",
    "switches.cc",
    "switches.h",
  ]

  deps = [
    "//base/third_party/dynamic_annotations",
  ]

  public_deps = [
    "//base",
    "//mojo/public/cpp/bindings",
    "//services/catalog:lib",
    "//services/catalog/public/mojom:constants",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/mojom",
    "//services/service_manager/runner/host:lib",
    "//services/service_manager/sandbox",
  ]
}

service_manifest("manifest") {
  name = "service_manager"
  source = "manifest.json"
}
