# Copyright 2015 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/config/nacl/config.gni")
import("//components/nacl/features.gni")
import("//services/catalog/public/tools/catalog.gni")
import("//services/service_manager/public/service_manifest.gni")
import("//testing/test.gni")

# Target that builders build.
group("all") {
  testonly = true

  deps = [
    "//components/services/leveldb",
    "//mash/catalog_viewer",
    "//mash/example",
    "//mash/runner",
    "//mash/session",
    "//mash/task_viewer",
  ]

  # Build on platforms that support ash.
  if (is_chromeos) {
    deps += [ "//ash/components/quick_launch:quick_launch_app" ]
  }
}

# This is the catalog of services available to a standalone mash environment.
# Build //mash/runner to generate the runner executable.
catalog("catalog") {
  testonly = true

  standalone_services = [
    "//components/services/leveldb:manifest",
    "//mash/catalog_viewer:manifest",
    "//mash/example/views_examples:manifest",
    "//mash/example/window_type_launcher:manifest",
    "//mash/session:manifest",
    "//mash/task_viewer:manifest",
    "//services/ws/ime/test_ime_driver:manifest",
    "//services/viz:manifest",
  ]

  if (is_chromeos) {
    standalone_services += [
      "//ash:manifest",
      "//ash/components/quick_launch:manifest",
    ]
  }

  if (is_linux) {
    standalone_services += [ "//components/services/font:manifest" ]
  }

  if (enable_nacl) {
    standalone_services += [ "//components/nacl/loader:nacl_loader_manifest" ]
    if (is_win && target_cpu == "x86") {
      standalone_services += [ "//components/nacl/broker:nacl_broker_manifest" ]
    }
  }
}

catalog_cpp_source("mash_catalog_source") {
  testonly = true
  catalog = ":catalog"
  generated_function_name = "CreateMashCatalog"
}
