# 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_system_image = true
  deps = [
    ":bin",
  ]

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

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

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