# Copyright 2019 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.

declare_args() {
  use_netstack3 = false

  # Transitional flag to enable dns-resolver as the provider for
  # fuchsia.net.name.LookupAdmin and fuchsia.net.NameLookup instead of netstack.
  use_dns_resolver = false
}

group("config") {
  if (use_netstack3) {
    deps = [
      "netstack3",
      "netstack3/config",
    ]
  } else {
    deps = [
      "netstack",
      "netstack/config",
    ]
  }

  if (use_dns_resolver) {
    deps += [
      "dns:dns-resolver",
      "dns/config",
    ]
  } else if (!use_netstack3) {
    deps += [ "netstack/config:dns" ]
  }
}

group("tests") {
  testonly = true
  deps = [
    "dhcp:tests",
    "dhcpd-cli:tests",
    "dhcpv6:tests",
    "dns:tests",
    "drivers:tests",
    "http_client:tests",
    "mdns:tests",
    "net-cli:net-cli-tests",
    "netcfg:netcfg_tests",
    "netdump:tests",
    "netstack:tests",
    "netstack3:tests",
    "testing/netemul:tests",
    "tests",
    "tools:tests",
    "tun:tests",
  ]
}
