# 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/dart_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",
                             [
                               "absolute",
                               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",
                          [
                            "absolute",
                            rebase_path("../../pkg/analyzer_cli"),
                          ],
                          "list lines")
  inputs = cli_files + analyzer_files
}

sdk_lib_files = exec_script("../../tools/list_dart_files.py",
                            [
                              "absolute",
                              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")

  dart_action(target_name) {
    script = "../../pkg/analyzer/tool/summary/build_sdk_summaries.dart"
    packages = "../../.packages"
    inputs = sdk_lib_files + analyzer_files
    output = "$root_gen_dir/$type.sum"
    outputs = [
      output,
    ]
    args = [
      "build-$type",
      rebase_path(output),
      rebase_path("../../sdk"),
    ]
  }
}

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

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