# 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/go/go_library.gni")
import("//build/go/go_test.gni")
import("//build/go/toolchain.gni")
import("//build/package.gni")
import("//build/testing/environments.gni")

go_library("pmd") {
  name = "fuchsia.googlesource.com/pmd"

  deps = [
    "//garnet/go/src/far",
    "//garnet/go/src/merkle",
    "//garnet/go/src/pm:pm_lib",
    "//garnet/go/src/thinfs:thinfs_lib",
    "//garnet/public/lib/component/go/src/app",
    "//sdk/fidl/fuchsia.amber($go_toolchain)",
    "//sdk/fidl/fuchsia.sys($go_toolchain)",
  ]
}

test_packages = [
  "pkgfs",
  "index",
]
foreach(testpkg, test_packages) {
  go_test("pmd_${testpkg}_test") {
    gopackage = "fuchsia.googlesource.com/pmd/${testpkg}"
    deps = [
      ":pmd",
    ]
    non_go_deps = [
      "//zircon/public/lib/fs-management",
      "//zircon/public/lib/ramdevice-client",
    ]
  }
}

package("pmd_tests") {
  testonly = true

  deps = []
  tests = []

  foreach(testpkg, test_packages) {
    deps += [ ":pmd_${testpkg}_test" ]
    tests += [
      {
        name = "pmd_${testpkg}_test"
        environments = basic_envs
      },
    ]
  }
}
