# Copyright 2018 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/chromecast_build.gni")
import("//build/config/fuchsia/config.gni")
import("//build/config/fuchsia/fuchsia_package_metadata.gni")
import("//build/config/gclient_args.gni")
import("//build/config/sysroot.gni")
import("//build/util/generate_wrapper.gni")

assert(is_fuchsia)

declare_args() {
  # Sets the Fuchsia Amber repository which will be used by default by the
  # generated installation scripts. If not specified, then no default directory
  # will be used.
  default_fuchsia_out_dir = ""

  # Sets the Fuchsia device node name which will be used by default by the
  # generated runner scripts. If not specficed, then no default node name will
  # be used.
  default_fuchsia_device_node_name = ""

  # CPU architecture of the host used to run the tests.
  test_host_cpu = host_cpu

  # Sets whether emulators need to be included in the test isolates
  test_isolate_uses_emulator = true

  # A list of additional Fuchsia boot images to include in the test isolates.
  fuchsia_additional_boot_images = []

  # This variable controls the browser included in the Telemetry based test
  # targets.
  fuchsia_browser_type = "web_engine_shell"
}

# Generates a wrapper script under root_build_dir/bin that performs an
# operation, such as deployment or execution, using a package and its
# dependencies.
#
# Parameters:
#   output_name_format: The format string for the generated script's filename.
#                       The placeholder string %package% will be substituted
#                       with |package| (or |package_name|, if set).
#                       Examples: "run_%package%", "install_%package%"
#   package: The package() target to run.
#   package_name: Specifies the name of the generated package, if its
#       filename is different than the |package| target name. This value must
#       match package_name in the |package| target.
#   package_deps: An array of [package, package_name] array pairs
#       which specify additional dependency packages to be installed
#       prior to execution.
#   executable: The underlying script to be called by the script.
#   executable_args: The list of arguments to pass to |executable|.
#                    Runtime commandline arguments can be passed to
#                    |executable| using the placeholder %args%.
#
#                    In addition, the script is passed the following
#                    executable_args:
#                      --package - the path to a .FAR package to install.
#                      --package_name - the name of the package to use as an
#                                       entry point.
#   include_fuchsia_out_dir: If true, adds |default_fuchsia_out_dir|
#                            to executable_args (when set in GN args).
template("fuchsia_run_script_with_packages") {
  if (defined(invoker.package_name)) {
    _pkg_shortname = invoker.package_name
  } else {
    _pkg_shortname = get_label_info(invoker.package, "name")
  }

  _generated_script_path =
      "$root_build_dir/bin/" +
      string_replace(invoker.output_name_format, "%package%", _pkg_shortname)

  generate_wrapper(target_name) {
    forward_variables_from(invoker,
                           TESTONLY_AND_VISIBILITY + [
                                 "executable",
                                 "executable_args",
                                 "data",
                                 "include_fuchsia_out_dir",
                                 "target",
                               ])

    wrapper_script = _generated_script_path
    deps = [ invoker.package ]

    if (!defined(data_deps)) {
      data_deps = []
    }
    data_deps += [ "//build/config/fuchsia:deployment_resources" ]

    _combined_package_list = [ invoker.package ]

    if (defined(invoker.package_deps)) {
      foreach(package_dep, invoker.package_deps) {
        _combined_package_list += [ package_dep[0] ]
      }
    }
    foreach(package_dep, _combined_package_list) {
      data_deps += [
        package_dep,
        package_dep + "__archive-manifest",
        package_dep + "__archive-metadata",
      ]
    }

    if (defined(invoker.data_deps)) {
      data_deps += invoker.data_deps
    }

    # Compute the list of full paths to package files, including dependencies.
    if (defined(invoker.package_deps)) {
      foreach(package_dep, invoker.package_deps) {
        package_dep_target = package_dep[0]
        deps += [ package_dep_target ]
        data_deps += [ package_dep_target ]
      }
    }

    # Include package information inside the wrapper script.
    if (!defined(executable_args)) {
      executable_args = []
    }

    if (defined(include_fuchsia_out_dir) && include_fuchsia_out_dir &&
        default_fuchsia_out_dir != "") {
      executable_args += [
        "--fuchsia-out-dir",
        default_fuchsia_out_dir,
      ]
    }
  }

  # Create a wrapper script rather than using a group() in order to ensure
  # "ninja $target_name" always works.
  if (defined(invoker.executable_wrapper)) {
    generate_wrapper(invoker.executable_wrapper) {
      forward_variables_from(invoker, TESTONLY_AND_VISIBILITY)
      executable = _generated_script_path
      wrapper_script = "$root_build_dir/${invoker.executable_wrapper}"
      deps = [ ":${invoker._run_target}" ]
    }
  }
}

# Generates a script which deploys a package to the TUF repo of a Fuchsia
# build output directory.
template("fuchsia_package_installer") {
  if (defined(invoker.package_name)) {
    pkg_shortname = invoker.package_name
  } else {
    pkg_shortname = get_label_info(invoker.package, "name")
  }
  fuchsia_package_metadata(pkg_shortname) {
    forward_variables_from(invoker,
                           TESTONLY_AND_VISIBILITY + [
                                 "package",
                                 "package_deps",
                               ])
  }
  fuchsia_run_script_with_packages(target_name) {
    forward_variables_from(invoker,
                           "*",
                           TESTONLY_AND_VISIBILITY + [ "executable_args" ])
    forward_variables_from(invoker, TESTONLY_AND_VISIBILITY)
    executable = rebase_path("//build/fuchsia/test/deploy_to_fuchsia.py")
    executable_args = [
      "--out-dir",
      "@WrappedPath(.)",
      pkg_shortname,
    ]
    output_name_format = "deploy_%package%"
    include_fuchsia_out_dir = true
  }
}

# Generates scripts for installing and running test packages.
# See fuchsia_run_script_with_packages() for the full list of parameters.
template("fuchsia_test_runner") {
  _run_target = "${target_name}__runner"
  _install_target = "${target_name}__installer"

  fuchsia_run_script_with_packages(_run_target) {
    forward_variables_from(invoker,
                           TESTONLY_AND_VISIBILITY + [
                                 "data",
                                 "data_deps",
                                 "package",
                                 "package_name",
                                 "package_deps",
                               ])

    _test_runner_py = "//build/fuchsia/test/run_test.py"

    executable = rebase_path(_test_runner_py)

    if (defined(invoker.is_test_exe) && invoker.is_test_exe) {
      data += [ "//.vpython3" ]
    }
    output_name_format = "run_%package%"
    executable_wrapper = invoker.target_name

    # Populate the arguments used by the test runner, defined at build-time.
    executable_args = [
      "--out-dir",
      "@WrappedPath(.)",
    ]

    executable_args += [ package_name ]

    if (defined(invoker.use_test_server) && invoker.use_test_server) {
      executable_args += [ "--enable-test-server" ]
    }

    if (default_fuchsia_device_node_name != "") {
      executable_args += [
        "--target-id",
        default_fuchsia_device_node_name,
      ]
    }

    # Declare the files that are needed for test execution on LUCI swarming
    # test clients, both directly (via data) or indirectly (via data_deps).
    if (!defined(data)) {
      data = []
    }
    data += [
      _test_runner_py,
      "$root_gen_dir/package_metadata/${invoker.package_name}.meta",
    ]

    # TODO(crbug.com/1256870): Remove this once all out-of-tree references
    # to "package_name_override" are migrated to "package_name".
    if (defined(invoker.package_name_override)) {
      package_name = invoker.package_name_override
    }
  }
  fuchsia_package_installer(_install_target) {
    forward_variables_from(invoker,
                           TESTONLY_AND_VISIBILITY + [
                                 "package",
                                 "package_name",
                                 "package_deps",
                               ])
  }
}
