# 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/host.gni")
import("//build/test.gni")
import("//src/sys/build/components.gni")

source_set("converter") {
  sources = [ "converter.cc" ]
  deps = [
    "//src/lib/fxl",
    "//third_party/rapidjson",
  ]
  configs += [
    # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
    "//build/config:Wno-conversion",
  ]
}

executable("converter_bin") {
  output_name = "catapult_converter"

  sources = [ "main.cc" ]
  deps = [
    ":converter",
    "//third_party/rapidjson",
  ]
}

# TODO(fxbug.dev/70300): consider deleting this fuchsia_package if it's unused.
fuchsia_package_with_single_component("catapult_converter") {
  manifest = "meta/catapult_converter.cmx"
  deps = [
    ":converter_bin",
    ":host_tools",
  ]
}

test("catapult_converter_unittest") {
  sources = [ "converter_unittest.cc" ]

  deps = [
    ":converter",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gtest",
    "//third_party/rapidjson",
  ]

  # TODO(fxbug.dev/58162): delete the below and fix compiler warnings
  configs += [ "//build/config:Wno-conversion" ]
}

fuchsia_unittest_package("catapult_converter_tests") {
  manifest = "meta/catapult_converter_tests.cmx"
  deps = [ ":catapult_converter_unittest" ]
}

install_host_tools("host_tools") {
  deps = [ ":converter_bin" ]

  outputs = [ "catapult_converter" ]
}
