# 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")
import("//build/test.gni")
import("//build/test/test_package.gni")

group("cpp") {
  deps = [
    ":hello_world_cpp"
  ]
}

group("tests") {
  testonly = true

  deps = [
    ":hello_world_cpp_tests"
  ]
}

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

  sources = [
    "hello_world.cc",
  ]
}

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

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

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

test("hello_world_cpp_unittests") {
  sources = [
    "hello_world_unittest.cc",
  ]

  deps = [
    "//third_party/googletest:gtest_main",
  ]
}

test_package("hello_world_cpp_tests") {
  deps = [
    ":hello_world_cpp_unittests",
  ]

  tests = [
    {
      name = "hello_world_cpp_unittests"
    },
  ]
}
