# Copyright 2016 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/config.gni")
import("//build/package.gni")

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

  sources = [
    "device_service_provider.cc",
    "device_service_provider.h",
    "fidl_publisher.h",
    "host_name.cc",
    "host_name.h",
    "listener.cc",
    "listener.h",
    "main.cc",
    "message_transceiver.cc",
    "message_transceiver.h",
    "netconnector_impl.cc",
    "netconnector_impl.h",
    "netconnector_params.cc",
    "netconnector_params.h",
    "requestor_agent.cc",
    "requestor_agent.h",
    "responding_service_host.cc",
    "responding_service_host.h",
    "service_agent.cc",
    "service_agent.h",
  ]

  deps = [
    "//garnet/lib/inet",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/netconnector/cpp",
    "//garnet/public/lib/svc/cpp",
    "//sdk/fidl/fuchsia.net.mdns",
    "//sdk/fidl/fuchsia.netconnector",
    "//sdk/fidl/fuchsia.netstack",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/sys/cpp",
    "//src/lib/fxl",
    "//third_party/rapidjson",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/fit",
  ]
}

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

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

  meta = [
    {
      path = rebase_path("meta/netconnector.cmx")
      dest = "netconnector.cmx"
    },
  ]

  resources = [
    {
      path = rebase_path("netconnector.config")
      dest = "netconnector.config"
    },
  ]
}

config_data("netconnector_config") {
  for_pkg = "sysmgr"
  outputs = [
    "netconnector.config",
  ]
  sources = [
    "config/service.config",
  ]
}

config_data("mdns_config") {
  for_pkg = "mdns"
  sources = [
    rebase_path("config/mdns.config"),
  ]
}
