# Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

# This build rule will copy the source for one Dart SDK library.
#
# Required arguments:
#   sdk_lib_name
#       The name of a Dart SDK library.
#
# Optional arguments:
#   destination
#       Base path to copy sources. Default value is "$root_gen_dir/dart_sdk".
#
#   dart_root
#       Path to the Dart SDK source root. Default value is "//dart".
#
# The sources will be copied into $root_gen_dir/dart_sdk/$sdk_lib_name/.
#
template("dart_sdk_lib_copy") {
  assert(defined(invoker.sdk_lib_name))
  if (defined(invoker.dart_root)) {
    dart_root = rebase_path(invoker.dart_root)
  } else {
    dart_root = rebase_path("//dart")
  }
  if (defined(invoker.destination)) {
    destination = invoker.destination
  } else {
    destination = "$root_gen_dir/dart_sdk"
  }
  dart_sdk_sdk_lib_path =
      rebase_path("sdk/lib", "", dart_root)
  dart_sdk_tools_gypi_to_gn_path =
      rebase_path("tools/gypi_to_gn.py", "", dart_root)
  # The name of the SDK library being copied.
  lib_name = invoker.sdk_lib_name
  # The path to the libraries source directory.
  lib_path = rebase_path(lib_name, "", dart_sdk_sdk_lib_path)
  # The path to the sources gypi.
  lib_sources_gypi = lib_name + "_sources.gypi"
  # Get the contents of the gypi file.
  sdk_lib_sources_gypi =
      exec_script(dart_sdk_tools_gypi_to_gn_path,
                  [rebase_path(lib_sources_gypi, "", lib_path)],
                  "scope",
                  [rebase_path(lib_sources_gypi, "", lib_path)])
  copy(target_name) {
    sources = rebase_path(sdk_lib_sources_gypi.sources, "", lib_path)
    outputs = [ "$destination/$lib_name/{{source_file_part}}" ]
  }
}
