# Copyright 2016 The Chromium 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_tool.gni")

dart_library("flutter_tools") {
  package_name = "flutter_tools"

  # Can be left empty as analysis is disabled.
  sources = []

  disable_analysis = true

  deps = [
    "//third_party/dart/pkg/analyzer",
    "//third_party/dart/third_party/pkg/linter",
    "//third_party/dart-pkg/pub/archive",
    "//third_party/dart-pkg/pub/args",
    "//third_party/dart-pkg/pub/bsdiff",
    "//third_party/dart-pkg/pub/build_daemon",
    "//third_party/dart-pkg/pub/build_runner_core",
    "//third_party/dart-pkg/pub/collection",
    "//third_party/dart-pkg/pub/completion",
    "//third_party/dart-pkg/pub/coverage",
    "//third_party/dart-pkg/pub/crypto",
    "//third_party/dart-pkg/pub/file",
    # The HTTP dependency is removed because http doesn't work on Fuchsia
    # because it uses mirrors which Fuchsia's Dart VM doesn't support.
    "//third_party/dart-pkg/pub/json_rpc_2",
    "//third_party/dart-pkg/pub/json_schema",
    "//third_party/dart-pkg/pub/meta",
    "//third_party/dart-pkg/pub/multicast_dns",
    "//third_party/dart-pkg/pub/mustache",
    "//third_party/dart-pkg/pub/package_config",
    "//third_party/dart-pkg/pub/path",
    "//third_party/dart-pkg/pub/platform",
    "//third_party/dart-pkg/pub/process",
    "//third_party/dart-pkg/pub/quiver",
    "//third_party/dart-pkg/pub/stack_trace",
    "//third_party/dart-pkg/pub/test",
    "//third_party/dart-pkg/pub/usage",
    "//third_party/dart-pkg/pub/web_socket_channel",
    "//third_party/dart-pkg/pub/xml",
    "//third_party/dart-pkg/pub/yaml",
  ]
}

dart_tool("fuchsia_builder") {
  main_dart = "bin/fuchsia_builder.dart"

  disable_analysis = true

  deps = [
    ":flutter_tools",
  ]
}

dart_tool("fuchsia_asset_builder") {
  main_dart = "bin/fuchsia_asset_builder.dart"

  disable_analysis = true

  sources = [
    "src/android/adb.dart",
    "src/android/android.dart",
    "src/android/android_device.dart",
    "src/android/android_emulator.dart",
    "src/android/android_sdk.dart",
    "src/android/android_studio.dart",
    "src/android/android_studio_validator.dart",
    "src/android/android_workflow.dart",
    "src/android/apk.dart",
    "src/android/gradle.dart",
    "src/application_package.dart",
    "src/artifacts.dart",
    "src/asset.dart",
    "src/base/build.dart",
    "src/base/common.dart",
    "src/base/config.dart",
    "src/base/context.dart",
    "src/base/file_system.dart",
    "src/base/fingerprint.dart",
    "src/base/flags.dart",
    "src/base/io.dart",
    "src/base/logger.dart",
    "src/base/net.dart",
    "src/base/os.dart",
    "src/base/platform.dart",
    "src/base/process.dart",
    "src/base/process_manager.dart",
    "src/base/terminal.dart",
    "src/base/utils.dart",
    "src/base/version.dart",
    "src/build_info.dart",
    "src/bundle.dart",
    "src/cache.dart",
    "src/compile.dart",
    "src/context_runner.dart",
    "src/dart/dependencies.dart",
    "src/dart/package_map.dart",
    "src/dart/pub.dart",
    "src/dart/sdk.dart",
    "src/dependency_checker.dart",
    "src/devfs.dart",
    "src/device.dart",
    "src/disabled_usage.dart",
    "src/doctor.dart",
    "src/emulator.dart",
    "src/flutter_manifest.dart",
    "src/globals.dart",
    "src/intellij/intellij.dart",
    "src/ios/cocoapods.dart",
    "src/ios/code_signing.dart",
    "src/ios/devices.dart",
    "src/ios/ios_emulators.dart",
    "src/ios/ios_workflow.dart",
    "src/ios/mac.dart",
    "src/ios/plist_utils.dart",
    "src/ios/simulators.dart",
    "src/ios/xcodeproj.dart",
    "src/plugins.dart",
    "src/project.dart",
    "src/protocol_discovery.dart",
    "src/resident_runner.dart",
    "src/run_cold.dart",
    "src/run_hot.dart",
    "src/runner/flutter_command.dart",
    "src/runner/flutter_command_runner.dart",
    "src/services.dart",
    "src/template.dart",
    "src/tester/flutter_tester.dart",
    "src/tracing.dart",
    "src/usage.dart",
    "src/version.dart",
    "src/vmservice.dart",
    "src/vmservice_record_replay.dart",
    "src/vscode/vscode.dart",
    "src/vscode/vscode_validator.dart",
  ]

  deps = [
    ":flutter_tools",
  ]
}

dart_tool("fuchsia_tester") {
  main_dart = "bin/fuchsia_tester.dart"

  disable_analysis = true

  sources = [
    "src/android/adb.dart",
    "src/android/android.dart",
    "src/android/android_device.dart",
    "src/android/android_emulator.dart",
    "src/android/android_sdk.dart",
    "src/android/android_studio.dart",
    "src/android/android_studio_validator.dart",
    "src/android/android_workflow.dart",
    "src/android/apk.dart",
    "src/android/gradle.dart",
    "src/application_package.dart",
    "src/artifacts.dart",
    "src/asset.dart",
    "src/base/build.dart",
    "src/base/common.dart",
    "src/base/config.dart",
    "src/base/context.dart",
    "src/base/file_system.dart",
    "src/base/fingerprint.dart",
    "src/base/flags.dart",
    "src/base/io.dart",
    "src/base/logger.dart",
    "src/base/net.dart",
    "src/base/os.dart",
    "src/base/platform.dart",
    "src/base/process.dart",
    "src/base/process_manager.dart",
    "src/base/terminal.dart",
    "src/base/utils.dart",
    "src/base/version.dart",
    "src/build_info.dart",
    "src/bundle.dart",
    "src/cache.dart",
    "src/compile.dart",
    "src/context_runner.dart",
    "src/dart/dependencies.dart",
    "src/dart/package_map.dart",
    "src/dart/pub.dart",
    "src/dart/sdk.dart",
    "src/dependency_checker.dart",
    "src/devfs.dart",
    "src/device.dart",
    "src/disabled_usage.dart",
    "src/doctor.dart",
    "src/emulator.dart",
    "src/flutter_manifest.dart",
    "src/globals.dart",
    "src/intellij/intellij.dart",
    "src/ios/cocoapods.dart",
    "src/ios/code_signing.dart",
    "src/ios/devices.dart",
    "src/ios/ios_emulators.dart",
    "src/ios/ios_workflow.dart",
    "src/ios/mac.dart",
    "src/ios/plist_utils.dart",
    "src/ios/simulators.dart",
    "src/ios/xcodeproj.dart",
    "src/plugins.dart",
    "src/project.dart",
    "src/protocol_discovery.dart",
    "src/resident_runner.dart",
    "src/run_cold.dart",
    "src/run_hot.dart",
    "src/runner/flutter_command.dart",
    "src/runner/flutter_command_runner.dart",
    "src/services.dart",
    "src/template.dart",
    "src/test/coverage_collector.dart",
    "src/test/flutter_platform.dart",
    "src/test/runner.dart",
    "src/test/watcher.dart",
    "src/tester/flutter_tester.dart",
    "src/tracing.dart",
    "src/usage.dart",
    "src/version.dart",
    "src/vmservice.dart",
    "src/vmservice_record_replay.dart",
    "src/vscode/vscode.dart",
    "src/vscode/vscode_validator.dart",
  ]

  deps = [
    ":flutter_tools",
  ]

  non_dart_deps = [
    "$flutter_root/shell",
  ]
}

dart_tool("fuchsia_attach") {
  package_name = "fuchsia_attach"
  main_dart = "bin/fuchsia_attach.dart"

  # Can be left empty as analysis is disabled.
  sources = []

  disable_analysis = true

  deps = [
    ":flutter_tools",
  ]
}
