# 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/native_support",
    "//services/prediction",
    "//services/test_service:bindings",
    "//services/tracing",
  ]

  # TODO: fix ffmpeg build
  if (!is_fnl) {
    deps += [ "//services/media" ]
  }

  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/gfx",
      "//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/gfx/compositor:apptests",
    "//services/http_server:apptests",
    "//services/media/common:apptests",
    "//services/native_support:apptests",
    "//services/prediction:apptests",
    "//services/ui/view_manager:view_manager_apptests",
  ]

  # TODO: fix ffmpeg build
  if (!is_fnl) {
    deps += [ "//services/media/framework:apptests" ]
  }

  if (!is_android) {
    deps += [ "//services/authentication: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",
    ]
  }
}
