# Copyright 2016 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/testing/environments.gni")
import("//src/modular/build/executable_package.gni")
import("//src/modular/build/tests_package.gni")

executable_package("sessionmgr") {
  meta = [
    {
      path = "meta/sessionmgr.cmx"
      dest = "sessionmgr.cmx"
    },
  ]

  sources = [ "sessionmgr.cc" ]

  deps = [
    ":sessionmgr_lib",
    "//sdk/fidl/fuchsia.modular.internal",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/inspect/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/modular/bin/basemgr/cobalt",
    "//src/modular/lib/app_driver/cpp:app_driver",
    "//src/modular/lib/modular_config",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
    "//zircon/system/ulib/trace-provider:trace-provider-with-fdio",
  ]
}

source_set("sessionmgr_lib") {
  sources = [
    "argv_injecting_launcher.cc",
    "argv_injecting_launcher.h",
    "element_controller_impl.cc",
    "element_controller_impl.h",
    "element_manager_impl.cc",
    "element_manager_impl.h",
    "sessionmgr_impl.cc",
    "sessionmgr_impl.h",
  ]

  public_deps = [
    ":startup_agent_launcher",
    "//sdk/fidl/fuchsia.element",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.modular.internal",
    "//sdk/fidl/fuchsia.modular.session",
    "//sdk/fidl/fuchsia.session",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/fidl/fuchsia.ui.views",
    "//src/modular/bin/sessionmgr/agent_runner",
    "//src/modular/lib/deprecated_service_provider",
    "//src/modular/lib/fidl:view_host",
    "//src/modular/lib/scoped_tmpfs",
  ]

  deps = [
    ":annotations",
    ":component_context",
    ":session_ctl",
    ":startup_agent_launcher",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/inspect/cpp",
    "//sdk/lib/ui/scenic/cpp",
    "//src/lib/fsl",
    "//src/lib/uuid",
    "//src/modular/bin/basemgr/cobalt",
    "//src/modular/bin/sessionmgr/puppet_master:make_production_impl",
    "//src/modular/bin/sessionmgr/puppet_master:puppet_master_impl",
    "//src/modular/bin/sessionmgr/puppet_master:story_command_executor",
    "//src/modular/bin/sessionmgr/storage",
    "//src/modular/bin/sessionmgr/story_runner",
    "//src/modular/lib/app_driver/cpp:app_driver",
    "//src/modular/lib/async/cpp:operation",
    "//src/modular/lib/common:async_holder",
    "//src/modular/lib/common:teardown",
    "//src/modular/lib/fidl:app_client",
    "//src/modular/lib/fidl:array_to_string",
    "//src/modular/lib/fidl:clone",
    "//src/modular/lib/fidl:environment",
    "//src/modular/lib/fidl:json_xdr",
    "//src/modular/lib/modular_config",
    "//src/modular/lib/modular_config:modular_config_accessor",
  ]

  # TODO(fxb/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

executable_package("dev_session_shell") {
  meta = [
    {
      path = "meta/dev_session_shell.cmx"
      dest = "dev_session_shell.cmx"
    },
  ]

  sources = [ "dev_session_shell.cc" ]

  deps = [
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.scenic",
    "//sdk/fidl/fuchsia.ui.views",
    "//sdk/lib/fidl/cpp",
    "//src/modular/lib/app_driver/cpp",
    "//src/modular/lib/fidl:array_to_string",
    "//src/modular/lib/fidl:single_service_app",
    "//src/modular/lib/fidl:view_host",
    "//src/modular/lib/testing:test_driver",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
}

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

  deps = [
    "//sdk/lib/vfs/cpp",
    "//src/lib/fsl",
    "//src/modular/bin/sessionmgr/puppet_master:puppet_master_impl",
    "//zircon/system/ulib/fs",
  ]
}

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

  public_deps = [ "//sdk/fidl/fuchsia.modular" ]

  deps = [
    "//src/lib/fsl",
    "//src/modular/bin/sessionmgr/agent_runner:public",
    "//src/modular/lib/async/cpp:operation",
    "//src/modular/lib/fidl:array_to_string",
    "//src/modular/lib/fidl:json_xdr",
  ]
}

source_set("agent_services_factory") {
  sources = [ "agent_services_factory.h" ]

  public_deps = [ "//sdk/fidl/fuchsia.sys" ]
}

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

  public_deps = [
    "//garnet/public/lib/svc/cpp",
    "//sdk/lib/sys/cpp",
  ]

  deps = [
    ":agent_services_factory",
    ":rate_limited_retry",
    "agent_runner",
    "//sdk/fidl/fuchsia.element",
    "//sdk/fidl/fuchsia.intl",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/lib/syslog/cpp",
    "//sdk/lib/syslog/cpp:backend_legacy",
    "//src/modular/lib/connect",
  ]
}

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

  public_deps = [ "//zircon/public/lib/zx" ]
}

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

  deps = [
    "//sdk/lib/syslog/cpp",
    "//src/lib/fxl",
    "//src/modular/lib/string_escape",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.element",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.session",
  ]
}

hermetic_tests_package("sessionmgr_unittests") {
  deps = [
    ":annotations_unittest",
    ":element_controller_impl_unittest",
    ":element_manager_impl_unittest",
  ]
  environments = basic_envs
}

executable("element_manager_impl_unittest") {
  testonly = true

  sources = [ "element_manager_impl_unittest.cc" ]

  deps = [
    ":annotations",
    ":sessionmgr_lib",
    "//src/lib/fxl/test:gtest_main",
    "//src/modular/bin/sessionmgr/testing:annotations_matchers",
    "//src/modular/lib/testing:test_with_session_storage",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

executable("element_controller_impl_unittest") {
  testonly = true

  sources = [ "element_controller_impl_unittest.cc" ]

  deps = [
    ":annotations",
    ":sessionmgr_lib",
    "//src/lib/fxl/test:gtest_main",
    "//src/modular/bin/sessionmgr/testing:annotations_matchers",
    "//src/modular/lib/testing:test_with_session_storage",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}

executable("annotations_unittest") {
  testonly = true

  sources = [ "annotations_unittest.cc" ]

  deps = [
    ":annotations",
    "//src/lib/fxl/test:gtest_main",
    "//src/modular/bin/sessionmgr/testing:annotations_matchers",
    "//third_party/googletest:gmock",
    "//third_party/googletest:gtest",
  ]
}
