# Copyright 2018 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/test_package.gni")

source_set("lib") {
  sources = [
    "connect.cc",
    "connect.h",
    "formatter.h",
    "formatters/json.cc",
    "formatters/json.h",
    "formatters/text.cc",
    "formatters/text.h",
    "modes.cc",
    "modes.h",
    "options.cc",
    "options.h",
    "utils.cc",
    "utils.h",
  ]

  configs += [ "//third_party/cobalt:cobalt_config" ]

  deps = [
    "//garnet/public/lib/fxl",
    "//third_party/cobalt/util/crypto_util",
    "//third_party/rapidjson",
  ]

  public_deps = [
    "//garnet/public/fidl/fuchsia.inspect",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fostr",
  ]
}

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

  sources = [
    "main.cc",
  ]

  deps = [
    ":lib",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
  ]
}

executable("test") {
  testonly = true
  output_name = "iquery_test"

  sources = [
    "utils_test.cc",
  ]

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

package("iquery") {
  deprecated_bare_package_url = "//build"

  deps = [
    ":bin",
  ]

  binaries = [
    {
      name = "iquery"
      shell = true
    },
  ]
}

test_package("iquery_test") {
  deps = [
    ":test",
  ]

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