# Copyright 2019 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/chrome_build.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//testing/test.gni")

group("updater") {
  if (is_win) {
    deps = [
      "//chrome/updater/win",
    ]
  }
  if (is_mac) {
    deps = [
      "//chrome/updater/mac",
    ]
  }
}

source_set("common") {
  sources = [
    "configurator.cc",
    "configurator.h",
    "updater.cc",
    "updater.h",
  ]

  deps = [
    "//base",
    "//components/update_client",
    "//components/version_info",
    "//mojo/core/embedder",
    "//net",
  ]
}

source_set("updater_tests") {
  testonly = true

  sources = [
    "updater_unittest.cc",
  ]

  if (is_win) {
    data_deps = [
      "//chrome/updater/win:updater",
    ]
  }

  if (is_mac) {
    data_deps = [
      "//chrome/updater/mac:updater",
    ]
  }

  deps = [
    ":updater",
    "//base/test:test_support",
    "//testing/gtest",
  ]
}
