# 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",
    "service_manager.cc",
    "service_manager.h",
    "service_overrides.cc",
    "service_overrides.h",
    "switches.cc",
    "switches.h",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  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",
  ]
}
