# Copyright 2017 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/dart/dart_library.gni")
import("//build/dart/dart_package_config.gni")
import("//build/dart/toolchain.gni")

# Wraps a dart snapshot in a script to be invoked by dart
#
# Parameters
#
#   dart (required)
#     The path to the dart binary
#
#   snapshot (required)
#     The path to the dart snapshot
#
#   deps (optional)
#     Dependencies of this application
#
#   output_name (optional)
#     Name of the output file to generate. Defaults to $target_name.
template("_dart_snapshot_invocation") {
  assert(defined(invoker.dart), "Must specify the path to the dart binary")
  assert(defined(invoker.snapshot),
         "Must specify the path to the dart snapshot")

  if (defined(invoker.output_name)) {
    app_name = invoker.output_name
  } else {
    app_name = target_name
  }

  # Builds a convenience script to invoke the app.
  action(target_name) {
    forward_variables_from(invoker,
                           [
                             "testonly",
                             "deps",
                           ])

    script = "//build/dart/gen_app_invocation.py"

    app_path = "$root_out_dir/dart-tools/$app_name"
    dart_binary = invoker.dart
    snapshot = invoker.snapshot

    inputs = [
      dart_binary,
      snapshot,
    ]
    outputs = [ app_path ]

    args = [
      "--out",
      rebase_path(app_path),
      "--dart",
      rebase_path(dart_binary),
      "--snapshot",
      rebase_path(snapshot),
    ]

    metadata = {
      # Record metadata for the //:tool_paths build API.
      tool_paths = [
        {
          cpu = current_cpu
          label = get_label_info(":$target_name", "label_with_toolchain")
          name = app_name
          os = current_os
          path = rebase_path(app_path, root_build_dir)
        },
      ]
    }
  }
}

# Defines a Dart application that can be run on the host
#
# Parameters
#
#   sources (optional)
#     The list of public sources in this library, i.e. Dart files in lib/ but
#     not in lib/src/. These sources must be within lib/.
#
#   package_name (optional)
#     Name of the dart package.
#
#   main_dart (required)
#     File containing the main function of the application.
#
#   deps (optional)
#     Dependencies of this application
#
#   non_dart_deps (optional)
#     List of labels this package depends on that are not Dart packages. It
#     typically doesn't need to be set.
#
#   output_name (optional)
#     Name of the output file to generate. Defaults to $target_name.
#
#   disable_analysis (optional)
#     Prevents analysis from being run on this target.
template("dart_tool") {
  assert(defined(invoker.main_dart), "Must specify main_dart file")

  _dart_deps = []
  if (defined(invoker.deps)) {
    _dart_deps += invoker.deps
  }

  _tool_deps = []
  if (defined(invoker.non_dart_deps)) {
    _tool_deps += invoker.non_dart_deps
  }

  dart_library_target_name = target_name + "_dart_library"

  if (defined(invoker.package_name)) {
    package_name = invoker.package_name
  } else if (!defined(invoker.infer_package_name) ||
             invoker.infer_package_name) {
    # Compute a package name from the label:
    #   //foo/bar --> foo.bar
    #   //foo/bar:blah --> foo.bar._blah
    #   //garnet/public/foo/bar --> foo.bar
    # Strip public directories.
    full_dir = get_label_info(":$dart_library_target_name", "dir")
    foreach(sdk_dir, sdk_dirs) {
      full_dir = string_replace(full_dir, "$sdk_dir/", "")
    }
    package_name = full_dir
    package_name = string_replace(package_name, "//", "")
    package_name = string_replace(package_name, "/", ".")

    # If the last directory name does not match the target name, add the
    # target name to the resulting package name.
    name = get_label_info(":$dart_library_target_name", "name")
    last_dir = get_path_info(full_dir, "name")
    if (last_dir != name) {
      package_name = "$package_name._$name"
    }
  } else {
    assert(false, "Must specify either a package_name or infer_package_name")
  }

  package_root = "."
  if (defined(invoker.package_root)) {
    package_root = invoker.package_root
  }

  source_dir = "$package_root/lib"
  if (defined(invoker.source_dir)) {
    source_dir = "$package_root/${invoker.source_dir}"
  }

  dart_library(dart_library_target_name) {
    forward_variables_from(invoker,
                           [
                             "disable_analysis",
                             "disable_metadata_entry",
                             "testonly",
                             "visibility",
                           ])
    package_name = package_name
    package_root = package_root
    source_dir = source_dir

    sources = []
    if (defined(invoker.sources)) {
      sources += invoker.sources
    }
    source_base = "lib"
    if (defined(invoker.source_dir)) {
      source_base = invoker.source_dir
    }
    sources += [ rebase_path(invoker.main_dart, source_base) ]
    deps = _dart_deps
  }

  # We only need to make a library if we are specifying sources.
  # If no sources are defined we still want to depend on the library
  # so we can run analysis on the main file.
  if (defined(invoker.sources)) {
    _dart_deps += [ ":$dart_library_target_name" ]
  } else {
    _tool_deps += [ ":$dart_library_target_name" ]
  }

  dart_binary = prebuilt_dart
  sdk_deps = []

  snapshot_path = "$target_gen_dir/${target_name}.snapshot"
  depfile_path = "${snapshot_path}.d"

  snapshot_target_name = target_name + "_snapshot"

  _dart_package_config_target_name = "${target_name}_dart_package"
  dart_package_config(_dart_package_config_target_name) {
    forward_variables_from(invoker,
                           [
                             "testonly",
                             "visibility",
                           ])
    deps = _dart_deps
  }

  _package_config_output = []
  _package_config_output =
      get_target_outputs(":$_dart_package_config_target_name")
  _packages_path = _package_config_output[0]

  # Creates a snapshot file.
  # The main advantage of snapshotting is that it sets up source dependencies
  # via a depfile so that a Dart app gets properly rebuilt when one of its
  # sources is modified.
  action(snapshot_target_name) {
    if (defined(invoker.testonly)) {
      testonly = invoker.testonly
    }

    depfile = depfile_path

    outputs = [ snapshot_path ]

    script = dart_binary

    # The snapshot path needs to be rebased on top of the root build dir so
    # that the resulting depfile gets properly formatted.
    rebased_snapshot_path = rebase_path(snapshot_path, root_build_dir)
    rebased_depfile_path = rebase_path(depfile_path)
    rebased_packages_path = rebase_path(_packages_path)

    main_uri = rebase_path(invoker.main_dart)

    # If we have sources defined we can check to see if the main file is included
    # in the source list. If so, we want to call the snapshot generation with
    # the `package:foo/main.dart` style. If not we want to pass in a file uri.
    if (defined(invoker.sources)) {
      package_relative = rebase_path(invoker.main_dart, source_dir)

      # Approximation for source_dir contains main_dart.
      if (get_path_info(get_path_info(package_relative, "dir"), "file") !=
          "bin") {
        main_uri = "package:" + package_name + "/" + package_relative
      }
    }

    args = [
      "--snapshot=$rebased_snapshot_path",
      "--snapshot-depfile=$rebased_depfile_path",
      "--packages=$rebased_packages_path",
      main_uri,
    ]

    deps = sdk_deps + [ ":$_dart_package_config_target_name" ]
  }

  # Builds a convenience script to invoke the app.
  _dart_snapshot_invocation(target_name) {
    forward_variables_from(invoker,
                           [
                             "testonly",
                             "output_name",
                           ])
    dart = dart_binary
    snapshot = snapshot_path

    deps = sdk_deps + _tool_deps + [ ":$snapshot_target_name" ]
  }
}

# Defines a Dart application that can be run on the host which is
# compiled from an existing snapshot
#
# Parameters
#
#   snapshot (required)
#     The path to the dart snapshot
#
#   deps (optional)
#     Dependencies of this application
#
#   output_name (optional)
#     Name of the output file to generate. Defaults to $target_name.
template("dart_prebuilt_tool") {
  assert(defined(invoker.snapshot),
         "Must specify the path to the dart snapshot")
  _dart_snapshot_invocation(target_name) {
    dart = prebuilt_dart
    forward_variables_from(invoker, "*")
  }
}
