# 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/dart_action.gni")
import("../application_snapshot.gni")

group("dartanalyzer") {
  deps = [
    ":generate_dartanalyzer_snapshot",
    ":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 = [
    "--help",
    # TODO(34616): This is broken on Fuchsia.
    # "--dart-sdk=" + rebase_path("../../sdk/"),
    # "--train-snapshot",
    # rebase_path("../../tests/language_2/first_test.dart")
  ]
  name = "dartanalyzer"
}

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

prebuilt_dart_action("generate_summary_strong") {
  script = "../../pkg/analyzer/tool/summary/build_sdk_summaries.dart"
  packages = "../../.packages"
  inputs = sdk_lib_files + analyzer_files
  output = "$root_gen_dir/strong.sum"
  outputs = [ output ]
  vm_args = [ "-Dsdk_hash=$sdk_hash" ]
  args = [
    "build",
    rebase_path(output),
    rebase_path("../../sdk"),
  ]
}
