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

source_set("lib") {
  sources = [
    "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 = [
    "//src/lib/fxl",
    "//third_party/cobalt/util/crypto_util",
    "//third_party/rapidjson",
  ]

  public_deps = [
    "//garnet/public/lib/fostr",
    "//garnet/public/lib/inspect/discovery",
  ]
}

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

  sources = [
    "main.cc",
  ]

  deps = [
    ":lib",
    "//garnet/public/lib/async_promise",
    "//garnet/public/lib/fsl",
    "//src/lib/fxl",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

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

  sources = [
    "utils_test.cc",
  ]

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

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

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

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

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