# 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/login",
    "//dbus",
    "//third_party/icu",
    "//third_party/protobuf:protobuf_lite",
  ]
  sources = [
    "cros_settings_provider.cc",
    "cros_settings_provider.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",
    "//dbus",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/icu",
    "//third_party/protobuf:protobuf_lite",
  ]
  sources = [
    "timezone_settings_unittest.cc",
  ]
}
