# Copyright 2018 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("//build/config/chromeos/rules.gni")
import("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")

assert(is_chromeos, "Non-Chrome-OS builds must not depend on //chromeos")

source_set("settings") {
  configs += [ "//chromeos:chromeos_implementation" ]
  public_deps = [
    ":cros_settings_names",
  ]
  deps = [
    "//base",
    "//base:i18n",
    "//chromeos:chromeos_constants",
    "//chromeos:chromeos_export",
    "//chromeos:cryptohome_proto",
    "//chromeos/dbus",
    "//chromeos/login",
    "//components/policy/core/common:common_constants",
    "//components/policy/proto",
    "//dbus",
    "//google_apis",
    "//third_party/icu",
    "//third_party/protobuf:protobuf_lite",
  ]
  sources = [
    "cros_settings_provider.cc",
    "cros_settings_provider.h",
    "install_attributes.cc",
    "install_attributes.h",
    "system_settings_provider.cc",
    "system_settings_provider.h",
    "timezone_settings.cc",
    "timezone_settings.h",
    "timezone_settings_helper.cc",
    "timezone_settings_helper.h",
  ]
}

source_set("cros_settings_names") {
  configs += [ "//chromeos:chromeos_implementation" ]
  deps = [
    "//chromeos:chromeos_export",
  ]
  sources = [
    "cros_settings_names.cc",
    "cros_settings_names.h",
  ]
}

source_set("unit_tests") {
  testonly = true
  deps = [
    ":settings",
    "//base",
    "//base:i18n",
    "//base/test:test_support",
    "//chromeos:chromeos_constants",
    "//chromeos:cryptohome_proto",
    "//chromeos/dbus",
    "//components/policy/proto",
    "//dbus",
    "//google_apis",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/icu",
    "//third_party/protobuf:protobuf_lite",
  ]
  sources = [
    "install_attributes_unittest.cc",
    "timezone_settings_unittest.cc",
  ]
}
