# Copyright 2017 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/cpp/service.gni")
import("//services/service_manager/public/service_manifest.gni")

source_set("lib") {
  sources = [
    "file_patcher_impl.cc",
    "file_patcher_impl.h",
    "patch_service.cc",
    "patch_service.h",
  ]

  deps = [
    "//base",
    "//components/filesystem/public/interfaces",
    "//courgette:courgette_lib",
    "//mojo/public/cpp/bindings",
  ]

  public_deps = [
    "//components/patch_service/public/interfaces",
    "//services/service_manager/public/cpp",
  ]
}

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