# Copyright 2020 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")

package("headless_root_presenter") {
  deps = [ ":bin" ]

  binaries = [
    {
      name = "headless_root_presenter"
    },
  ]

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

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

config_data("headless_root_presenter_config") {
  for_pkg = "sysmgr"
  outputs = [ "headless_root_presenter.config" ]
  sources = [ "services.config" ]
}

executable("bin") {
  output_name = "headless_root_presenter"

  sources = [ "main.cc" ]

  deps = [
    ":lib",
    "//src/lib/fxl",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/trace",
    "//zircon/system/ulib/trace-provider:trace-provider-with-fdio",
  ]
}

source_set("lib") {
  sources = [
    "app.cc",
    "app.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.accessibility",
    "//sdk/fidl/fuchsia.media.sounds",
    "//sdk/fidl/fuchsia.recovery",
    "//sdk/fidl/fuchsia.recovery.ui",
    "//sdk/fidl/fuchsia.ui.activity",
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.input.accessibility",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.policy.accessibility",
    "//sdk/lib/sys/cpp",
    "//src/lib/ui/input",
    "//src/ui/bin/root_presenter:factory_reset_manager",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
  ]

  deps = [
    ":activity_notifier",
    "//sdk/fidl/fuchsia.accessibility",
    "//sdk/fidl/fuchsia.recovery",
    "//sdk/fidl/fuchsia.ui.input",
    "//sdk/fidl/fuchsia.ui.input2",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//src/lib/ui/input",
    "//src/ui/bin/root_presenter:media_buttons_handler",
    "//src/ui/lib/input_report_reader",
    "//zircon/system/ulib/hid",
    "//zircon/system/ulib/trace",
  ]
}

source_set("activity_notifier") {
  sources = [
    "activity_notifier.cc",
    "activity_notifier.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.ui.activity",
    "//sdk/fidl/fuchsia.ui.input",
  ]
  deps = [
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//src/lib/ui/input",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}
