# 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/rust/toolchain.gni")
import("//build/toolchain/basic_toolchain.gni")

group("disable_strict_sources_check_allowlist") {
  #  ________  _________  ________  ________
  # |\   ____\|\___   ___\\   __  \|\   __  \
  # \ \  \___|\|___ \  \_\ \  \|\  \ \  \|\  \
  #  \ \_____  \   \ \  \ \ \  \\\  \ \   ____\
  #   \|____|\  \   \ \  \ \ \  \\\  \ \  \___|
  #     ____\_\  \   \ \__\ \ \_______\ \__\
  #    |\_________\   \|__|  \|_______|\|__|
  #    \|_________|
  # This is an allowlist of packages that do not enforce that the source files
  # are listed in `source`. This is only intended to be used as a temporary
  # allowlist during soft migrations.
  visibility = []
}

cargo_toml_gen_desc_out = "$target_out_dir/cargo_toml_gen_desc.json"
action("cargo_toml_gen_desc") {
  visibility = [ ":cargo_toml_gen" ]
  script = "//scripts/generate_cargo_desc.py"
  sources = []
  inputs = []
  outputs = [ cargo_toml_gen_desc_out ]
  depfile = "$cargo_toml_gen_desc_out.d"
  args = [
    "--root_build_dir",
    ".",
    "--fuchsia_dir",
    rebase_path("//", root_build_dir),
    "--gn_binary",
    rebase_path("//prebuilt/third_party/gn/${host_platform}/gn",
                root_build_dir),
    "--output",
    rebase_path(cargo_toml_gen_desc_out, root_build_dir),
    "--depfile",
    rebase_path("$cargo_toml_gen_desc_out.d", root_build_dir),
  ]
}

# NOTE: This target is used by "fx set --cargo-toml-gen ..." which
# will do the following:
#
#  1) Ensure that "fx gen" (and "fx build") will pass `--ide-json`
#     to `gn gen`, which generates an up-to-date
#     `$root_build_dir/project.json` file, used here as input.
#
#  2) Add this target to the base packages list to ensure its
#     action script is run by "fx build".
#
# For more details, see docs/development/language/rust/README.md
#
action("cargo_toml_gen") {
  # Nothing in-tree should depend on Cargo files.
  # TODO(bwb) remove base_packages visibility when auto-generation is disabled
  visibility = [
    "//:additional_base_packages",
    "//:additional_cache_packages",
    "//:additional_universe_packages",
  ]
  script = "//scripts/generate_cargo.py"
  sources = []
  inputs = [ cargo_toml_gen_desc_out ]

  outputs = [ "$root_build_dir/cargo/generate_cargo.stamp" ]
  depfile = "$root_build_dir/cargo/generate_cargo.stamp.d"
  args = [
    rebase_path(cargo_toml_gen_desc_out, root_build_dir),
    "--root_build_dir",
    ".",
    "--fuchsia_dir",
    rebase_path("//", root_build_dir),
  ]
  deps = [ ":cargo_toml_gen_desc" ]
}
