# Copyright 2018 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/config.gni")
import("//build/package.gni")
import("//build/rust/rustc_binary.gni")
import("//build/testing/environments.gni")

group("sessions") {
  deps = [
    ":mediasession",
  ]
}

group("tests") {
  testonly = true
  deps = [
    ":mediasession_tests"
  ]
}

group("tools") {
  deps = [
    ":mediasession_cli_tool"
  ]
}

group("configs") {
  deps = [
    ":mediasession_config"
  ]
}

rustc_binary("bin") {
  name = "mediasession"
  edition = "2018"
  with_unit_tests = true

  deps = [
    "//garnet/public/lib/fidl/rust/fidl",
    "//garnet/public/rust/fuchsia-component",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-syslog",
    "//garnet/public/rust/fuchsia-zircon",
    "//sdk/fidl/fuchsia.math:fuchsia.math-rustc",
    "//sdk/fidl/fuchsia.media:fuchsia.media-rustc",
    "//sdk/fidl/fuchsia.media.sessions:fuchsia.media.sessions-rustc",
    "//third_party/rust_crates:crossbeam",
    "//third_party/rust_crates:failure",
    "//third_party/rust_crates:futures-preview",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:rand",
    "//zircon/public/fidl/fuchsia-mem:fuchsia-mem-rustc",
  ]
}

package("mediasession_tests") {
  testonly = true

  deps = [
    ":bin",
  ]

  meta = [
    {
      path = rebase_path("meta/mediasession_tests.cmx")
      dest = "mediasession_tests.cmx"
    },
  ]

  tests = [
    {
      name = "mediasession_bin_test"
      environments = basic_envs
    },
  ]
}

package("mediasession") {
  deps = [
    ":bin",
  ]

  binary = "mediasession"

  meta = [
    {
      path = rebase_path("meta/mediasession.cmx")
      dest = "mediasession.cmx"
    },
  ]
}

config_data("mediasession_config") {
  for_pkg = "sysmgr"
  outputs = [
    "mediasession.config",
  ]
  sources = [
    "service.config",
  ]
}

rustc_binary("mediasession_cli_tool_bin") {
  name = "mediasession_cli_tool"
  edition = "2018"
  with_unit_tests = true

  source_root = "cli_tool/cli_tool.rs"

  deps = [
    "//garnet/public/lib/fidl/rust/fidl",
    "//garnet/public/rust/fuchsia-async",
    "//garnet/public/rust/fuchsia-component",
    "//garnet/public/rust/fuchsia-zircon",
    "//sdk/fidl/fuchsia.media:fuchsia.media-rustc",
    "//sdk/fidl/fuchsia.media.sessions:fuchsia.media.sessions-rustc",
    "//third_party/rust_crates:byteorder",
    "//third_party/rust_crates:failure",
    "//third_party/rust_crates:futures-preview",
    "//third_party/rust_crates:log",
  ]
}

package("mediasession_cli_tool") {
  deps = [
    ":mediasession_cli_tool_bin",
  ]

  binaries = [
    {
      name = "mediasession_cli_tool"
      shell = true
    },
  ]

  meta = [
    {
      path = rebase_path("meta/mediasession_cli_tool.cmx")
      dest = "mediasession_cli_tool.cmx"
    },
  ]
}
