# 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/package.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",
    "simple-touch",
    "tiles",
    "tiles_ctl",
  ]
}

group("tests") {
  testonly = true

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

package("scenic-snapshot-viewer") {
  meta = [
    {
      path =
          rebase_path("scenic_snapshot_viewer/meta/scenic_snapshot_viewer.cmx")
      dest = "scenic_snapshot_viewer.cmx"
    },
  ]

  deps = [ "scenic_snapshot_viewer" ]

  binaries = [
    {
      name = "scenic-snapshot-viewer"
      source = "scenic_snapshot_viewer"
      shell = true
    },
  ]
}

# 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) {
  package(tool) {
    meta = [
      {
        path = rebase_path("$tool/meta/$tool.cmx")
        dest = "$tool.cmx"
      },
    ]

    deps = [ tool ]

    binaries = [
      {
        name = tool
        shell = true
      },
    ]
  }
}

# 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) {
  package(tool) {
    deps = [ tool ]
    binaries = [
      {
        name = tool
        shell = true
      },
    ]
  }
}
