# Copyright 2019 The Fuchsia 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/components.gni")

group("scenic") {
  deps = [
    ":gltf_export",
    ":input",
    ":present_view",
    ":print_input",
    ":scenic-snapshot-viewer",
    ":screencap",
  ]
}

group("tools") {
  deps = [
    ":gltf_export",
    ":input",
    ":present_view",
    ":print_input",
    ":scenic-snapshot-viewer",
    ":screencap",
    "paper_shader_compiler",
    "print-input-report",
    "tiles",
    "tiles_ctl",
  ]
}

group("tests") {
  testonly = true

  deps = [
    "present_view:tests",
    "print-input-report:print-input-report-test",
    "tiles:tiles_tests",
    "tiles/flatland:tiles-flatland-tests",
  ]
}

fuchsia_shell_package("scenic-snapshot-viewer") {
  manifest = "scenic_snapshot_viewer/meta/scenic_snapshot_viewer.cmx"
  deps = [ "scenic_snapshot_viewer" ]
}

# Component shell tools can be run as shell command or as components via a
# component URI. The following list contains the names of such components that
# follow the pattern:
# name/meta/name.cmx contains the component manifest
# name is the name of a subdirectory that builds the output binary `name`
component_shell_tools = [
  "gltf_export",
  "present_view",
  "screencap",
]
foreach(tool, component_shell_tools) {
  fuchsia_shell_package(tool) {
    manifest = "$tool/meta/$tool.cmx"
    deps = [ tool ]
  }
}

# Non-component tools contains the names of shell command tools that do not
# have any CMX.
non_component_tools = [
  "input",
  "print_input",
]
foreach(tool, non_component_tools) {
  fuchsia_shell_package(tool) {
    deps = [ tool ]
  }
}
