# 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")

source_set("lib") {
  sources = [
    "file_service.cc",
    "file_service.h",
    "file_system.cc",
    "file_system.h",
    "user_id_map.cc",
    "user_id_map.h",
  ]

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

  deps = [
    "//base",
    "//components/services/filesystem:lib",
    "//components/services/filesystem/public/interfaces",
    "//components/services/leveldb:lib",
    "//components/services/leveldb/public/interfaces",
    "//mojo/public/cpp/system",
    "//services/file/public/mojom",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/mojom",
    "//url",
  ]
}

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