# 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/cmx/cmx.gni")
import("//build/images/manifest.gni")

# Deprecated!!! Please use the `package` rule instead.
#
# Defines a fuchsia component.
#
# This template is used to define a unit of component.
# A component always has a manifest defining that component.
#
# Parameters
#
#   manifest (required)
#     [path] Defines the manifest source path for this component.
#
#   manifest_dest (optional)
#     [path] Defines the destination of the component manifest within the assembled package.
#
#     If not provided, defaults to "meta/<manifest>.cmx" if manifest was .cmx, and "meta/<manifest>.cm" if manifest was .cml.
#
#   binary (required)
#     [path] The path to the primary binary for the component.
#
#   binary_dest (optional)
#     [path] Defines the destination of the primary binary within the assembled package.
#
#   loadable_modules (optional)
#     [list of scopes] Defines the loadable modules in the package.  These
#     are produced by `loadable_module()` GN targets, and are typically
#     placed in the `lib/` directory of the assembled packaged.
#
#     Entries in a scope in the loadable_modules list:
#
#       name (required)
#         [string] Name of the loadable_module.
#
#       dest (optional, default: "lib")
#         [string] Location the lib will be placed in the package.
#
#   resources (optional)
#     [list of scopes] Defines the resources for this component. A resource is a
#     data file that may be produced by the build system, checked in to a
#     source repository, or produced by another system that runs before the
#     build. Resources are placed in the `data/` directory of the assembled
#     package.
#
#     Entries in a scope in the resources list:
#
#       path (required)
#         [path] Location of resource in source or build directory. If the
#         resource is checked in, this will typically be specified as a
#         path relative to the BUILD.gn file containing the `package()`
#         target. If the resource is generated, this will typically be
#         specified relative to `$target_gen_dir`.
#
#       dest (required)
#         [path] Location the resource will be placed within `data/`.
#
#   test (optional)
#     [bool] Should be true if this component is test.
#
#   deps (optional)
#   public_deps (optional)
#   data_deps (optional)
#   visibility (optional)
#   testonly (optional)
#     Usual GN meanings.
#
template("deprecated_fuchsia_component") {
  if (current_toolchain == target_toolchain) {
    component_label = get_label_info(":$target_name", "label_with_toolchain")
    forward_variables_from(invoker, [ "testonly" ])
    component = {
      forward_variables_from(invoker,
                             [
                               "binary",
                               "binary_dest",
                               "data_deps",
                               "deps",
                               "public_deps",
                               "loadable_modules",
                               "resources",
                               "visibility",
                               "manifest",
                               "manifest_dest",
                               "test",
                             ])
      assert(defined(manifest),
             "Component $component_label should define manifest")
      manifest_extension = get_path_info(manifest, "extension")
      assert(
          manifest_extension == "cmx" || manifest_extension == "cml",
          "Component $component_label's manifest $manifest should have extension .cmx or .cml")
      if (!defined(manifest_dest)) {
        if (manifest_extension == "cmx") {
          manifest_dest = "meta/" + get_path_info(manifest, "file")
        } else {
          manifest_dest = "meta/" + get_path_info(manifest, "name") + ".cm"
        }
      } else {
        manifest_dest_extension = get_path_info(manifest_dest, "extension")
        if (manifest_extension == "cmx") {
          assert(
              manifest_dest_extension == "cmx",
              "Component $component_label's manifest_dest $manifest_dest should have extension .cmx")
        } else {
          assert(
              manifest_dest_extension == "cm",
              "Component $component_label's manifest_dest $manifest_dest should have extension .cm")
        }
      }

      if (!defined(deps)) {
        deps = []
      }
      if (!defined(data_deps)) {
        data_deps = []
      }
      if (!defined(public_deps)) {
        public_deps = []
      }
      if (!defined(test)) {
        test = false
      }
      assert(!test, "test = true is currently unsupported. See IN-933")
      if (!defined(loadable_modules)) {
        loadable_modules = []
      }
      if (!defined(manifest)) {
        manifest = rebase_path("meta/${name}.cmx")
      }
      if (!defined(resources)) {
        resources = []
      }
    }

    component_manifest = []
    if (get_path_info(component.manifest, "extension") == "cmx") {
      validate = "validate_" + target_name + "_" +
                 get_path_info(component.manifest_dest, "file")

      cmx_validate(validate) {
        data = component.manifest

        # the cmx file may be generated by one of this component's dependencies,
        # but we don't know which one, so depend on all package deps here.
        deps = component.deps
        public_deps = component.public_deps
      }
      component.deps += [ ":$validate" ]

      # Collect the component's primary manifest.
      component_manifest += [
        {
          dest = component.manifest_dest
          source = rebase_path(component.manifest)
        },
      ]
    } else if (get_path_info(component.manifest, "extension") == "cml") {
      compiled = "compiled_" + target_name + "_" +
                 get_path_info(component.manifest_dest, "file")

      cm_compile(compiled) {
        data = component.manifest

        # the cm file may be generated by one of this component's dependencies,
        # but we don't know which one, so depend on all package deps here.
        deps = component.deps
        public_deps = component.public_deps
      }
      component.deps += [ ":$compiled" ]
      compiled_outputs = get_target_outputs(":$compiled")

      # Collect the component's primary manifest.
      component_manifest += [
        {
          dest = component.manifest_dest
          source = rebase_path(compiled_outputs[0])
        },
      ]
    }

    if (defined(component.binary) && !defined(component.binary_dest)) {
      bin_dir = "bin/"
      if (component.test) {
        bin_dir = "test/"
      }
      component.binary_dest = bin_dir + get_path_info(component.binary, "file")
    }
    if (defined(component.binary_dest)) {
      component_manifest += [
        {
          dest = component.binary_dest
          source = rebase_path(component.binary, "", root_out_dir)
        },
      ]
    }
    foreach(module, component.loadable_modules) {
      component_manifest += [
        {
          if (defined(module.dest)) {
            dest = module.dest
          } else {
            dest = "lib"
          }
          dest += "/${module.name}"
          source = rebase_path(module.name, "", root_out_dir)
        },
      ]
    }
    foreach(resource, component.resources) {
      component_manifest += [
        {
          dest = "data/${resource.dest}"
          source = rebase_path(resource.path)
        },
      ]
    }

    # Collect all the arguments describing input manifest files
    # and all the entries we've just synthesized in `component_manifest`.
    manifest_args = []
    foreach(entry, component_manifest) {
      manifest_args += [ "--entry=${entry.dest}=${entry.source}" ]
    }

    # Generate component build manifest with all its dynamically linked libraries
    # resolved.
    # TODO(raggi): replace this with metadata propagation
    generate_response_file(target_name) {
      output_name = target_name + ".rsp"
      response_file_contents = manifest_args
      deps = component.deps
      public_deps = component.public_deps
    }
  } else {
    group(target_name) {
      forward_variables_from(invoker,
                             [
                               "public_deps",
                               "deps",
                               "testonly",
                             ])
    }

    # Suppress unused variable warnings.
    not_needed(invoker, "*")
  }
}
