# Copyright 2020 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.

# Generates FFX subcommand with a plugin commands
#

import("//build/python/python_action.gni")

template("command") {
  output_name = target_name
  if (defined(invoker.output_name)) {
    output_name = invoker.output_name
  }
  plugin_deps = []
  if (defined(invoker.plugin_deps)) {
    plugin_deps += invoker.plugin_deps
  }

  libraries = []
  foreach(dep, plugin_deps) {
    libraries += [ get_label_info(dep, "name") ]
  }

  generated_file = "$target_gen_dir/" + output_name

  python_action(target_name) {
    binary_label = "//src/developer/ffx/build:gn_generate_cmd"
    template = "//src/developer/ffx/build/templates/command.rs.jinja"
    args = [
      "--out",
      rebase_path(generated_file, root_build_dir),
      "--deps",
      string_join(",", libraries),
      "--template",
      rebase_path(template, root_build_dir),
    ]

    # Rebuild if the template changes
    inputs = [ template ]
    outputs = [ generated_file ]
    deps = [ "//src/developer/ffx/build:gn_generate_cmd" ]
  }
}
