# 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.

# Nothing outside //chrome/chrome_cleaner can depend on these targets.
visibility = [ "//chrome/chrome_cleaner/*" ]

source_set("engine_settings_header") {
  sources = [ "engine_settings.h" ]

  public_deps = [
    "//chrome/chrome_cleaner/logging/proto:shared_data_proto",
    "//components/chrome_cleaner/public/constants:constants",
  ]
}

source_set("dummy_engine_settings") {
  sources = [ "dummy_engine_settings.cc" ]

  deps = [ ":engine_settings_header" ]
}

source_set("settings_types") {
  sources = [ "settings_types.h" ]
}

source_set("settings") {
  sources = [
    "settings.cc",
    "settings.h",
  ]

  deps = [
    ":settings_types",
    "//base",
    "//chrome/chrome_cleaner:buildflags",
    "//chrome/chrome_cleaner/constants:common_strings",
    "//components/chrome_cleaner/public/constants:constants",
  ]

  public_deps = [
    ":engine_settings_header",
    ":settings_definitions",
    "//chrome/chrome_cleaner/logging/proto:shared_data_proto",
    "//mojo/public/cpp/platform",
  ]
}

source_set("settings_definitions") {
  sources = [ "settings_definitions.h" ]
}

# Settings definitions that must only by linked into the cleaner executable.
source_set("cleaner_settings_definitions") {
  sources = [ "cleaner_settings_definitions.cc" ]

  deps = [ ":settings_definitions" ]
}

# Settings definitions that must only by linked into the reporter executable.
source_set("reporter_settings_definitions") {
  sources = [ "reporter_settings_definitions.cc" ]

  deps = [ ":settings_definitions" ]
}

# Settings definitions that are linked into all other executables.
source_set("other_settings_definitions") {
  sources = [ "other_settings_definitions.cc" ]

  deps = [ ":settings_definitions" ]
}

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

source_set("default_matching_options") {
  sources = [
    "default_matching_options.cc",
    "default_matching_options.h",
  ]

  deps = [ ":settings" ]

  public_deps = [ ":matching_options" ]
}

source_set("unittest_sources") {
  testonly = true

  sources = [
    "cleaner_settings_unittest.cc",
    "reporter_settings_unittest.cc",
    "settings_unittest.cc",
  ]

  deps = [
    ":engine_settings_header",
    ":settings",
    ":settings_definitions",
    "//base",
    "//base/test:test_support",
    "//chrome/chrome_cleaner:buildflags",
    "//chrome/chrome_cleaner/constants:common_strings",
    "//chrome/chrome_cleaner/test:test_util",
    "//components/chrome_cleaner/public/constants:constants",
    "//components/chrome_cleaner/test:test_name_helper",
    "//testing/gtest",
  ]
}
