# Copyright 2016 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("//testing/test.gni")

group("catalog") {
  testonly = true
  deps = [
    ":lib",
  ]
}

source_set("constants") {
  sources = [
    "store.cc",
    "store.h",
  ]
}

component("lib") {
  sources = [
    "catalog.cc",
    "catalog.h",
    "constants.cc",
    "constants.h",
    "entry.cc",
    "entry.h",
    "entry_cache.cc",
    "entry_cache.h",
    "instance.cc",
    "instance.h",
    "manifest_provider.h",
    "service_options.h",
  ]

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

  deps = [
    ":constants",
    "//base",
    "//components/services/filesystem:lib",
    "//services/catalog/public/cpp",
    "//services/catalog/public/mojom",
    "//services/service_manager/public/cpp",
  ]

  public_deps = [
    # directory.mojom.h is #included by catalog.h
    "//components/services/filesystem/public/interfaces",
  ]

  output_name = "catalog_lib"

  defines = [ "IS_CATALOG_IMPL" ]
}

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

source_set("unittests") {
  testonly = true
  sources = [
    "entry_unittest.cc",
  ]
  data = [
    "//services/catalog/test_data/",
  ]
  deps = [
    ":lib",
    "//base",
    "//services/service_manager/public/cpp",
    "//testing/gtest",
  ]
}
