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

import("//build/compiled_action.gni")
import("../application_snapshot.gni")

group("dartanalyzer") {
  deps = [
    ":generate_dartanalyzer_snapshot",
    ":generate_summary_spec",
    ":generate_summary_strong",
  ]
}

analyzer_files = exec_script("../../tools/list_dart_files.py",
                             [ rebase_path("../../pkg/analyzer") ],
                             "list lines")

application_snapshot("generate_dartanalyzer_snapshot") {
  main_dart = "../../pkg/analyzer_cli/bin/analyzer.dart"
  training_args = [
    "--dart-sdk=" + rebase_path("../../sdk"),
    rebase_path("../../tests/language/first_test.dart"),
  ]
  name = "dartanalyzer"
  cli_files = exec_script("../../tools/list_dart_files.py",
                          [ rebase_path("../../pkg/analyzer_cli") ],
                          "list lines")
  inputs = cli_files + analyzer_files
}

sdk_lib_files = exec_script("../../tools/list_dart_files.py",
                            [ rebase_path("../../sdk/lib") ],
                            "list lines")

template("generate_summary") {
  assert(defined(invoker.type), "Must specify the summary type")
  type = invoker.type
  assert(type == "spec" || type == "strong")
  compiled_action(target_name) {
    tool = "../../runtime/bin:dart"
    inputs = sdk_lib_files + analyzer_files

    output = "$root_gen_dir/$type.sum"
    outputs = [
      output,
    ]

    dot_packages = rebase_path("../../.packages")
    build_sdk_summaries =
        rebase_path("../../pkg/analyzer/tool/summary/build_sdk_summaries.dart")
    abs_output = rebase_path(output)

    args = [
      "--packages=$dot_packages",
      build_sdk_summaries,
      "build-$type",
      abs_output,
      rebase_path("../../sdk"),
    ]
  }
}

generate_summary("generate_summary_spec") {
  type = "spec"
}

generate_summary("generate_summary_strong") {
  type = "strong"
}
