# 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 = [
    ":mash_catalog",
    "//components/services/leveldb",
    "//mash/catalog_viewer",
    "//mash/example",
    "//mash/runner",
    "//mash/session",
    "//mash/simple_wm",
    "//mash/task_viewer",
  ]

  # Build on platforms that support ash.
  if (is_chromeos) {
    deps += [
      "//ash/components/autoclick:autoclick_app",
      "//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/session:manifest",
    "//mash/task_viewer:manifest",
    "//services/ui/ime/test_ime_driver:manifest",
    "//services/viz:manifest",
  ]

  executable_overrides = [ "content_packaged_services:@EXE_DIR/chrome" ]

  catalog_deps = [ "//mash/example:catalog" ]

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

copy("mash_catalog") {
  testonly = true
  sources = get_target_outputs(":catalog")
  outputs = [
    "$root_out_dir/mash_catalog.json",
  ]
  deps = [
    ":catalog",
  ]
}
