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

import("//build/host.gni")

if (host_toolchain == current_toolchain) {
  # Copies templates to the specified output directory and generates a file
  # containing all copied paths.
  copy("templates") {
    # All template files available to fx create.
    sources = [
      "_copyright.tmpl",
      "_generated.tmpl",
      "component-v1/BUILD.gn.tmpl-cpp",
      "component-v1/BUILD.gn.tmpl-rust",
      "component-v1/README.md.tmpl",
      "component-v1/main.cc.tmpl-cpp",
      "component-v1/meta/{{PROJECT_NAME}}.cmx.tmpl-cpp",
      "component-v1/meta/{{PROJECT_NAME}}.cmx.tmpl-rust",
      "component-v1/src/main.rs.tmpl-rust",
      "component-v1/{{snake_case PROJECT_NAME}}.cc.tmpl-cpp",
      "component-v1/{{snake_case PROJECT_NAME}}.h.tmpl-cpp",
      "component-v1/{{snake_case PROJECT_NAME}}_unittest.cc.tmpl-cpp",
      "component-v2/BUILD.gn.tmpl-cpp",
      "component-v2/BUILD.gn.tmpl-rust",
      "component-v2/README.md.tmpl",
      "component-v2/main.cc.tmpl-cpp",
      "component-v2/meta/{{PROJECT_NAME}}-unittests.cml.tmpl-cpp",
      "component-v2/meta/{{PROJECT_NAME}}-unittests.cml.tmpl-rust",
      "component-v2/meta/{{PROJECT_NAME}}.cml.tmpl-cpp",
      "component-v2/meta/{{PROJECT_NAME}}.cml.tmpl-rust",
      "component-v2/src/main.rs.tmpl-rust",
      "component-v2/{{snake_case PROJECT_NAME}}.cc.tmpl-cpp",
      "component-v2/{{snake_case PROJECT_NAME}}.h.tmpl-cpp",
      "component-v2/{{snake_case PROJECT_NAME}}_unittest.cc.tmpl-cpp",
      "driver/BUILD.gn.tmpl-cpp",
      "driver/README.md.tmpl",
      "driver/unit-tests.cc.tmpl-cpp",
      "driver/{{snake_case PROJECT_NAME}}.bind.tmpl-cpp",
      "driver/{{snake_case PROJECT_NAME}}.cc.tmpl-cpp",
      "driver/{{snake_case PROJECT_NAME}}.h.tmpl-cpp",
    ]
    outputs =
        [ "${host_tools_dir}/create_templates/{{source_target_relative}}" ]

    # Write out all the template paths to a single file as JSON.
    # fx create will use the paths in this file as the available set of
    # template files.
    write_file("${host_tools_dir}/create_templates/templates.json",
               sources,
               "json")

    metadata = {
      # Include the template files as test dependencies.
      # Tests that depend on the `create` binary need to pull in the template files
      # transitively.
      test_runtime_deps =
          rebase_path(sources, "", "${host_tools_dir}/create_templates") +
          [ "${host_tools_dir}/create_templates/templates.json" ]
    }
  }
}
