# 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/components.gni")
import("//build/host.gni")
import("//build/rust/rustc_binary.gni")
import("//build/rust/rustc_test.gni")
import("//build/sdk/sdk_host_tool.gni")

rustc_binary("cmc") {
  name = "cmc"
  with_unit_tests = true
  edition = "2021"

  deps = [
    "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_rust",
    "//sdk/fidl/fuchsia.data:fuchsia.data_rust",
    "//src/lib/fidl/rust/fidl",
    "//src/sys/lib/cm_rust",
    "//src/sys/lib/cm_types",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:serde_json",
    "//third_party/rust_crates:serde_json5",
    "//third_party/rust_crates:strsim",
    "//third_party/rust_crates:structopt",
    "//tools/lib/cml",
    "//tools/lib/reference_doc",
  ]

  test_deps = [
    "//third_party/rust_crates:assert_matches",
    "//third_party/rust_crates:difference",
    "//third_party/rust_crates:tempfile",
  ]

  sources = [
    "src/compile.rs",
    "src/format.rs",
    "src/include.rs",
    "src/main.rs",
    "src/merge.rs",
    "src/opts.rs",
    "src/reference.rs",
    "src/util.rs",
  ]
}

sdk_host_tool("cmc_sdk") {
  category = "partner"
  output_name = "cmc"
  deps = [ ":cmc" ]
}

rustc_test("cmc_integration_test_bin") {
  name = "cmc_integration_test"
  edition = "2021"
  source_root = "tests/integration_test.rs"
  deps = [
    "//sdk/fidl/fuchsia.component.decl:fuchsia.component.decl_rust",
    "//sdk/fidl/fuchsia.data:fuchsia.data_rust",
    "//sdk/fidl/fuchsia.io:fuchsia.io_rust",
    "//src/lib/fidl/rust/fidl",
    "//src/lib/fuchsia",
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:difference",
  ]

  sources = [ "tests/integration_test.rs" ]
}

fuchsia_component_manifest("example_component_manifest") {
  testonly = true
  restricted_features = [ "allow_long_names" ]
  component_name = "example"
  manifest = "meta/example.cml"
}

fuchsia_component("example_component") {
  cm_label = ":example_component_manifest"
  deps = [ ":example_component_config_values" ]
  testonly = true
  check_references = false
}

fuchsia_unittest_package("cmc_integration_test") {
  deps = [
    ":cmc_integration_test_bin",
    ":example_component",
  ]
}

install_host_tools("install") {
  deps = [ ":cmc" ]

  outputs = [ "cmc" ]
}

fuchsia_structured_config_values("example_component_config_values") {
  testonly = true
  cm_label = ":example_component_manifest"
  values = {
    my_flag = true
    my_uint8 = 42
    my_string = "test_string"
    my_vector_of_string = [
      "hello, world!",
      "hello, again!",
    ]
  }
}

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