# Copyright 2017 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")
import("//peridot/build/module_manifest.gni")

group("common") {
  testonly = true

  public_deps = [
    ":common_active_module_bin",
    ":common_null_module_bin",
  ]
}

executable("common_null_module_bin") {
  testonly = true

  output_name = "common_null_module"

  sources = [
    "common_null_module.cc",
  ]

  deps = [
    ":defs",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//peridot/lib/testing",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/app_driver/cpp:module_driver",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

verify_module_manifest("common_null_module_manifest_verified") {
  module_manifest = "common_null_module_manifest.json"
  original_target_name = "common_null_module_manifest.json"
}

package("common_null_module") {
  testonly = true

  deps = [
    ":common_null_module_bin",
    ":common_null_module_manifest_verified",
  ]

  binary = "common_null_module"

  meta = [
    {
      path = "common_null_module_manifest.json"
      dest = "module.json"
    },
  ]
}

executable("common_active_module_bin") {
  testonly = true

  output_name = "common_active_module"

  sources = [
    "common_active_module.cc",
  ]

  deps = [
    ":defs",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//peridot/lib/testing",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/app_driver/cpp:module_driver",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

verify_module_manifest("common_active_module_manifest_verified") {
  module_manifest = "common_active_module_manifest.json"
  original_target_name = "common_active_module_manifest.json"
}

package("common_active_module") {
  testonly = true

  deps = [
    ":common_active_module_bin",
    ":common_active_module_manifest_verified",
  ]

  binary = "common_active_module"

  meta = [
    {
      path = "common_active_module_manifest.json"
      dest = "module.json"
    },
  ]
}

initial_module_packages("common_module_index") {
  packages = [
    "common_active_module",
    "common_null_module",
  ]
}

source_set("defs") {
  testonly = true

  sources = [
    "defs.h",
  ]
}
