# Copyright 2018 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/package.gni")
import("//build/rust/rustc_binary.gni")
import("//build/test/test_package.gni")
import("//build/testing/environments.gni")
import("//garnet/bin/pkg_resolver/pkg_resolver_config.gni")

rustc_binary("bin") {
  name = "pkg_resolver"
  with_unit_tests = true
  edition = "2018"

  deps = [
    "//garnet/lib/rust/fidl_fuchsia_amber_ext",
    "//garnet/lib/rust/fidl_fuchsia_pkg_ext",
    "//garnet/lib/rust/files_async",
    "//garnet/lib/rust/io_util",
    "//garnet/lib/rust/sysconfig-client",
    "//garnet/public/lib/fidl/rust/fidl",
    "//garnet/public/rust/fdio",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-component",
    "//garnet/public/rust/fuchsia-hyper",
    "//garnet/public/rust/fuchsia-syslog",
    "//garnet/public/rust/fuchsia-zircon",
    "//src/lib/inspect/rust/fuchsia-inspect",
    "//src/sys/lib/fuchsia_url:fuchsia_url",
    "//src/sys/lib/fuchsia_url_rewrite",

    # "//garnet/public/rust/tuf", FIXME re-enable once tuf is on futures alpha 13
    "//sdk/fidl/fuchsia.amber:fuchsia.amber-rustc",
    "//sdk/fidl/fuchsia.pkg:fuchsia.pkg-rustc",
    "//sdk/fidl/fuchsia.pkg.rewrite:fuchsia.pkg.rewrite-rustc",
    "//third_party/rust_crates:failure",
    "//third_party/rust_crates:futures-preview",
    "//third_party/rust_crates:hyper",
    "//third_party/rust_crates:hyper-rustls",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:maplit",
    "//third_party/rust_crates:matches",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:pin-utils",
    "//third_party/rust_crates:serde",
    "//third_party/rust_crates:serde_derive",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:tempfile",
    "//third_party/rust_crates:url",
    "//zircon/system/fidl/fuchsia-io:fuchsia-io-rustc",
  ]

  non_rust_deps = [ "//zircon/public/lib/sysconfig-sync-client-c" ]
}

# Ensure the contents of this package stay in sync with //garnet/tests/amberctl:amberctl-tests
package("pkg_resolver") {
  deps = [
    ":bin",
  ]
  binaries = [
    {
      name = "pkg_resolver"
    },
  ]

  meta = [
    {
      path = rebase_path("meta/pkg_resolver.cmx")
      dest = "pkg_resolver.cmx"
    },
  ]
}

test_package("pkg_resolver_tests") {
  deps = [
    ":bin_test",
  ]

  tests = [
    {
      name = "pkg_resolver_bin_test"
      environments = basic_envs
    },
  ]
}

pkg_resolver_config("disable_dynamic_configuration") {
  disable_dynamic_configuration = true
}
