# 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/fake_surfaces",
    "//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/kiosk_wm",
      "//services/ui",
      "//services/native_viewport",
      "//services/surfaces",
      "//services/url_response_disk_cache",
      "//services/view_manager",
      "//services/window_manager",
    ]
  }

  # 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" ]
  }

  if (is_linux || is_android) {
    deps += [
      "//services/window_manager:window_manager_apptests",
      "//services/window_manager:window_manager_unittests",
    ]
  }

  # 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",
      "//services/view_manager:mojo_view_manager_client_apptests",
      "//services/view_manager:view_manager_service_apptests",
      "//services/view_manager:view_manager_service_unittests",
    ]
  }
}
