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

group("services") {
  testonly = true

  deps = [
    ":tests",
    "//services/asset_bundle",
    "//services/authenticating_url_loader_interceptor",
    "//services/authentication",
    "//services/clipboard",
    "//services/dart",
    "//services/debugger",
    "//services/gles2:lib",
    "//services/http_server",
    "//services/icu_data",
    "//services/log",
    "//services/media",
    "//services/native_support",
    "//services/prediction",
    "//services/test_service:bindings",
    "//services/tracing",
  ]

  if (is_android) {
    deps += [
      "//services/camera",
      "//services/camera:camera_roll",
      "//services/contacts",
      "//services/java_handler",
      "//services/location",
      "//services/notifications",
      "//services/sensors",
      "//services/sharing:android_sharing",
      "//services/speech_recognizer",
    ]
    if (defined(go_build_tool) && go_build_tool != "") {
      deps += [ "//services/vanadium/security:principal_service" ]
    }
  }

  if (is_linux) {
    deps += [ "//services/keyboard" ]
  }

  if (is_linux && !is_fnl) {
    deps += [ "//services/python" ]
  }

  if (is_android || is_linux) {
    deps += [
      "//services/device_info",
      "//services/files",
      "//services/native_viewport",
      "//services/ui",
      "//services/url_response_disk_cache",
    ]
  }

  # TODO(jamesr): We only support building V8 snapshot data on a linux host
  # since it needs a 32 bit toolchain and we don't have one configured for mac
  # hosts.
  # TODO(cstout): javascript/v8 build support for fnl/musl
  if (!is_fnl && host_os == "linux") {
    deps += [ "//services/js" ]
  }
}

group("tests") {
  testonly = true

  deps = [
    "//services/asset_bundle:apptests",
    "//services/authenticating_url_loader_interceptor:apptests",
    "//services/clipboard:apptests",
    "//services/http_server:apptests",
    "//services/native_support:apptests",
    "//services/prediction:apptests",
  ]

  if (is_linux && !is_fnl) {
    deps += [ "//services/python:python_apptests" ]
  }

  if (is_android) {
    deps += [ "//services/contacts:apptests" ]
    deps += [ "//services/notifications:apptests" ]
  }

  # TODO(jamesr): We only support building V8 snapshot data on a linux host since it
  # needs a 32 bit toolchain and we don't have one configured for mac hosts.
  # TODO(cstout): javascript/v8 build support for fnl/musl
  if (!is_fnl && host_os == "linux") {
    deps += [ "//services/js:tests" ]
  }

  if (is_android || is_linux) {
    deps += [
      "//services/files:apptests",
      "//services/log:apptests",
      "//services/url_response_disk_cache:tests",
    ]
  }
}
