# Copyright 2019 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("//src/sys/build/components.gni")
import("//src/sys/build/fuchsia_test_package.gni")

iquery_deps = [
  "//garnet/lib/rust/files_async",
  "//garnet/lib/rust/io_util",
  "//sdk/fidl/fuchsia.diagnostics:fuchsia.diagnostics-rustc",
  "//sdk/fidl/fuchsia.inspect:fuchsia.inspect-rustc",
  "//sdk/fidl/fuchsia.inspect.deprecated:fuchsia.inspect.deprecated-rustc",
  "//sdk/fidl/fuchsia.io:fuchsia.io-rustc",
  "//sdk/fidl/fuchsia.sys:fuchsia.sys-rustc",
  "//src/diagnostics/lib/inspect-fidl-load",
  "//src/diagnostics/lib/selectors",
  "//src/lib/diagnostics/data/rust",
  "//src/lib/diagnostics/hierarchy/rust",
  "//src/lib/diagnostics/inspect/rust",
  "//src/lib/diagnostics/reader/rust",
  "//src/lib/diagnostics/testing/rust",
  "//src/lib/fdio/rust:fdio",
  "//src/lib/fidl/rust/fidl",
  "//src/lib/fuchsia-async",
  "//src/lib/fuchsia-component",
  "//src/lib/syslog/rust:syslog",
  "//src/lib/zircon/rust:fuchsia-zircon",
  "//third_party/rust_crates:anyhow",
  "//third_party/rust_crates:argh",
  "//third_party/rust_crates:async-trait",
  "//third_party/rust_crates:derivative",
  "//third_party/rust_crates:difference",
  "//third_party/rust_crates:futures",
  "//third_party/rust_crates:glob",
  "//third_party/rust_crates:lazy_static",
  "//third_party/rust_crates:matches",
  "//third_party/rust_crates:nom",
  "//third_party/rust_crates:num-traits",
  "//third_party/rust_crates:pretty_assertions",
  "//third_party/rust_crates:regex",
  "//third_party/rust_crates:serde",
  "//third_party/rust_crates:serde_json",
  "//third_party/rust_crates:tempfile",
  "//third_party/rust_crates:thiserror",
]

iquery_sources = [
  "src/command_line.rs",
  "src/commands/list.rs",
  "src/commands/list_accessors.rs",
  "src/commands/list_files.rs",
  "src/commands/mod.rs",
  "src/commands/selectors.rs",
  "src/commands/show.rs",
  "src/commands/show_file.rs",
  "src/commands/types.rs",
  "src/commands/utils.rs",
  "src/constants.rs",
  "src/location.rs",
  "src/main.rs",
  "src/text_formatter.rs",
  "src/types.rs",
]

rustc_binary("bin") {
  name = "iquery"
  edition = "2018"
  force_opt = "z"

  # TODO(fxbug.dev/64097): extract to a template
  # iquery must always be small (even in debug builds) since it is part of bootfs.
  #
  # The add/remove/add ensures we get the configuration without producing errors for builds which
  # enable ThinLTO themselves.
  configs += [ "//build/config/lto:thinlto" ]
  configs -= [ "//build/config/lto:thinlto" ]
  configs += [ "//build/config/lto:thinlto" ]

  # we can't dynamically link std when we're in the zbi
  configs -= [ "//build/config/fuchsia:dynamic_rust_standard_library" ]

  deps = iquery_deps

  sources = iquery_sources
}

rustc_test("bin_test") {
  output_name = "iquery_bin_test"
  source_root = "src/main.rs"

  deps = iquery_deps

  sources = iquery_sources
  sources += [
    "src/tests/commands.rs",
    "src/tests/macros.rs",
    "src/tests/mod.rs",
    "src/tests/utils.rs",
  ]

  inputs = [
    "test_data/list_accessors.json",
    "test_data/list_accessors.text",
    "test_data/list_archive.json",
    "test_data/list_archive.text",
    "test_data/list_filter_manifest.json",
    "test_data/list_filter_manifest.text",
    "test_data/list_no_dups.json",
    "test_data/list_no_dups.text",
    "test_data/list_test.json",
    "test_data/list_test.text",
    "test_data/list_with_url.json",
    "test_data/list_with_url.text",
    "test_data/list_files_test.json",
    "test_data/list_files_test.text",
    "test_data/list_files_cwd.json",
    "test_data/list_files_cwd.text",
    "test_data/show_file_test.text",
    "test_data/show_file_test.json",
    "test_data/show_file_vmo.json",
    "test_data/show_file_vmo.text",
    "test_data/selectors_archive.json",
    "test_data/selectors_archive.text",
    "test_data/selectors_filter_test.json",
    "test_data/selectors_filter_test.text",
    "test_data/selectors_test.json",
    "test_data/selectors_test.text",
    "test_data/show_all_test.json",
    "test_data/show_all_test.text",
    "test_data/show_archive.json",
    "test_data/show_archive.text",
    "test_data/show_filter_test.text",
    "test_data/show_filter_test.json",
    "test_data/show_filter_no_selectors_test.text",
    "test_data/show_filter_no_selectors_test.json",
    "test_data/show_test.json",
    "test_data/show_test.text",
  ]
}

fuchsia_component("iquery-bin-test") {
  testonly = true
  manifest = "meta/iquery-bin-test.cmx"
  deps = [
    ":bin_test",
    "test/basic_component",
    "test/test_component",
  ]
}

fuchsia_test_package("iquery-tests") {
  test_components = [ ":iquery-bin-test" ]
}

group("tests") {
  testonly = true

  deps = [ ":iquery-tests" ]
}

group("iquery") {
  deps = [
    ":bin",
    "//build/validate:non_production_tag",
  ]
}
