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

# This file was created in two steps:
# First we ran tools/buildgen/generate_projects.sh which generates a BUILD.gn
# file based on the template in templates/BUILD.gn.template. Then we
# hand-edited the resulting file for Fuchsia.

config("cares_config") {
  include_dirs = [ "." ]
  defines = [ "HAVE_CONFIG_H" ]

  if (is_linux) {
    defines += [ "_GNU_SOURCE" ]
  }
}

static_library("cares") {
  sources = [
    "ares.h",
    "ares__close_sockets.c",
    "ares__get_hostent.c",
    "ares__read_line.c",
    "ares__timeval.c",
    "ares_build.h",
    "ares_cancel.c",
    "ares_config.h",
    "ares_create_query.c",
    "ares_data.c",
    "ares_data.h",
    "ares_destroy.c",
    "ares_dns.h",
    "ares_expand_name.c",
    "ares_expand_string.c",
    "ares_fds.c",
    "ares_free_hostent.c",
    "ares_free_string.c",
    "ares_getenv.c",
    "ares_getenv.h",
    "ares_gethostbyaddr.c",
    "ares_gethostbyname.c",
    "ares_getnameinfo.c",
    "ares_getopt.c",
    "ares_getopt.h",
    "ares_getsock.c",
    "ares_inet_net_pton.h",
    "ares_init.c",
    "ares_iphlpapi.h",
    "ares_ipv6.h",
    "ares_library_init.c",
    "ares_library_init.h",
    "ares_llist.c",
    "ares_llist.h",
    "ares_mkquery.c",
    "ares_nowarn.c",
    "ares_nowarn.h",
    "ares_options.c",
    "ares_parse_a_reply.c",
    "ares_parse_aaaa_reply.c",
    "ares_parse_mx_reply.c",
    "ares_parse_naptr_reply.c",
    "ares_parse_ns_reply.c",
    "ares_parse_ptr_reply.c",
    "ares_parse_soa_reply.c",
    "ares_parse_srv_reply.c",
    "ares_parse_txt_reply.c",
    "ares_platform.c",
    "ares_platform.h",
    "ares_private.h",
    "ares_process.c",
    "ares_query.c",
    "ares_rules.h",
    "ares_search.c",
    "ares_send.c",
    "ares_setup.h",
    "ares_strcasecmp.c",
    "ares_strcasecmp.h",
    "ares_strdup.c",
    "ares_strdup.h",
    "ares_strerror.c",
    "ares_timeout.c",
    "ares_version.c",
    "ares_version.h",
    "ares_writev.c",
    "bitncmp.c",
    "bitncmp.h",
    "config-win32.h",
    "inet_net_pton.c",
    "inet_ntop.c",
    "setup_once.h",
    "windows_port.c",
  ]

  public_configs = [ ":cares_config" ]
}
