# Copyright 2021 The Fuchsia 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/host.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_test.gni")

if (is_host) {
  rustc_binary("update_crates_bin") {
    edition = "2021"
    output_name = "update_crates"
    with_unit_tests = true
    deps = [
      "//third_party/rust_crates:anyhow",
      "//third_party/rust_crates:argh",
      "//third_party/rust_crates:scopeguard",
      "//third_party/rust_crates:serde",
      "//third_party/rust_crates:serde_json",
      "//third_party/rust_crates:toml",
      "//third_party/rust_crates:toml_edit",
    ]
    sources = [
      "src/check.rs",
      "src/main.rs",
      "src/update.rs",
    ]
  }
}

install_host_tools("install_update_crates") {
  deps = [ ":update_crates_bin" ]
  outputs = [ "update_crates" ]
}

group("update_crates") {
  deps = [
    ":install_update_crates",
    ":update_crates_bin($host_toolchain)",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":update_crates_bin_test($host_toolchain)",
    "tests",
  ]
}
