# 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/rust/rustc_library.gni")
import("//build/testing/test_spec.gni")

assert(is_host, "pkg is for use with the host toolchain only")

template("ffx_pkg_lib") {
  rustc_library(target_name) {
    forward_variables_from(invoker, "*", [ "deps" ])
    name = "pkg"
    edition = "2024"
    with_unit_tests = true

    deps = [
      "//src/developer/ffx/config:lib",
      "//src/developer/ffx/lib/target_net:lib",
      "//src/developer/ffx/lib/timeout:lib",
      "//src/lib/fuchsia-async",
      "//src/lib/fuchsia-hyper",
      "//src/lib/fuchsia-url",
      "//src/sys/lib/fidl-fuchsia-pkg-ext",
      "//src/sys/pkg/lib/fuchsia-repo",
      "//third_party/rust_crates:async-lock",
      "//third_party/rust_crates:camino",
      "//third_party/rust_crates:http",
      "//third_party/rust_crates:log",
      "//third_party/rust_crates:nix",
      "//third_party/rust_crates:schemars",
      "//third_party/rust_crates:serde",
      "//third_party/rust_crates:serde_json",
      "//third_party/rust_crates:thiserror",
      "//third_party/rust_crates:tuf",
      "//third_party/rust_crates:url",
    ]
    if (defined(invoker.deps)) {
      deps += invoker.deps
    }

    test_deps = [
      ":empty-repo-keys",
      ":empty-repo-metadata",
      "//src/lib/fuchsia",
      "//third_party/rust_crates:pretty_assertions",
      "//third_party/rust_crates:tempfile",
    ]

    sources = [
      "src/config.rs",
      "src/instance.rs",
      "src/lib.rs",
      "src/repo.rs",
    ]

    relative_root_out_dir = rebase_path(root_out_dir, root_build_dir)
    rustenv = [ "ROOT_OUT_DIR=$relative_root_out_dir" ]
  }
}

host_test_data("empty-repo-keys") {
  sources = [
    "//src/sys/pkg/tests/pkg-resolver/template/keys/root.json",
    "//src/sys/pkg/tests/pkg-resolver/template/keys/snapshot.json",
    "//src/sys/pkg/tests/pkg-resolver/template/keys/targets.json",
    "//src/sys/pkg/tests/pkg-resolver/template/keys/timestamp.json",
  ]
  outputs = [
    "$root_out_dir/test_data/ffx_lib_pkg/empty-repo/keys/{{source_file_part}}",
  ]
}

host_test_data("empty-repo-metadata") {
  sources = [
    "//src/sys/pkg/tests/pkg-resolver/template/repository/1.root.json",
    "//src/sys/pkg/tests/pkg-resolver/template/repository/1.snapshot.json",
    "//src/sys/pkg/tests/pkg-resolver/template/repository/1.targets.json",
    "//src/sys/pkg/tests/pkg-resolver/template/repository/root.json",
    "//src/sys/pkg/tests/pkg-resolver/template/repository/snapshot.json",
    "//src/sys/pkg/tests/pkg-resolver/template/repository/targets.json",
    "//src/sys/pkg/tests/pkg-resolver/template/repository/timestamp.json",
  ]
  outputs = [ "$root_out_dir/test_data/ffx_lib_pkg/empty-repo/repository/{{source_file_part}}" ]
}

ffx_pkg_lib("pkg") {
  deps = [
    "//sdk/fidl/fuchsia.pkg:fuchsia.pkg_rust_flex",
    "//sdk/fidl/fuchsia.pkg.rewrite:fuchsia.pkg.rewrite_rust_flex",
    "//sdk/rust/zx-status",
    "//src/lib/fdomain/client:flex_fidl",
    "//src/sys/lib/fidl-fuchsia-pkg-rewrite-ext",
  ]
}

ffx_pkg_lib("pkg_fdomain") {
  deps = [
    "//sdk/fidl/fuchsia.pkg:fuchsia.pkg_rust_fdomain_flex",
    "//sdk/fidl/fuchsia.pkg.rewrite:fuchsia.pkg.rewrite_rust_fdomain_flex",
    "//sdk/rust/zx-status",
    "//src/lib/fdomain/client:flex_fdomain",
    "//src/sys/lib/fidl-fuchsia-pkg-rewrite-ext:fidl-fuchsia-pkg-rewrite-ext_fdomain",
  ]
  features = [ "fdomain" ]
}

group("tests") {
  testonly = true
  deps = [ ":pkg_test" ]
}
