# Copyright 2018 The Chromium OS 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("//common-mk/deps.gni")
import("//common-mk/generate-dbus-adaptors.gni")
import("//common-mk/generate-dbus-proxies.gni")
import("//common-mk/pkg_config.gni")
import("//common-mk/proto_library.gni")
import("//common-mk/protoctxt.gni")

group("all") {
  deps = [
    ":libshill",
    ":libshill-net-${libbase_ver}",
    ":mobile_operator_db",
    ":mobile_operator_db-db",
    ":mobile_operator_db-protos",
    ":netfilter-queue-helper",
    ":openvpn-script",
    ":shill",
    ":shill-chromeos-dbus-adaptors",
  ]
  if (use.cellular) {
    deps += [ ":set-apn-helper" ]
  }
  if (use.cellular || use.vpn || use.pppoe) {
    deps += [ ":shill-pppd-plugin" ]
  }
  if (use.fuzzer) {
    deps += [
      ":arp_client_fuzzer",
      ":cellular_pco_fuzzer",
      ":nl80211_message_fuzzer",
      ":rtnl_handler_fuzzer",
      ":verizon_subscription_state_fuzzer",
      ":wifi_ies_fuzzer",
    ]
  }
  if (use.test) {
    deps += [
      ":shill_setup_wifi",
      ":shill_unittest",
    ]
  }
}

pkg_config("target_defaults") {
  cflags_cc = [
    "-fno-strict-aliasing",
    "-Woverloaded-virtual",
    "-Wno-missing-field-initializers",  # for LAZY_INSTANCE_INITIALIZER
  ]
  cflags = [
    "-Wextra",
    "-Werror",
    "-Wno-unused-parameter",  # for pppd_plugin.c, base/tuple.h

    # TODO(crbug.com/1047566): Remove the warning when libchrome fixes the issue.
    "-Wno-deprecated-copy",
  ]
  defines = [
    "RUNDIR=\"/run/shill\"",
    "SHIMDIR=\"${libdir}/shill/shims\"",
  ]
  if (!use.cellular) {
    defines += [ "DISABLE_CELLULAR" ]
  } else {
    # TODO(chromium:954634) Temporarily disable tests that depend on
    # CellularCapabilityClassic until they are ported to use
    # CellularCapability3gpp.
    defines += [ "DISABLE_CELLULAR_CAPABILITY_CLASSIC_TESTS" ]
  }

  if (!use.dhcpv6) {
    defines += [ "DISABLE_DHCPV6" ]
  }

  if (!use.fast_transition) {
    defines += [ "DISABLE_FT" ]
  }

  if (!use.pppoe) {
    defines += [ "DISABLE_PPPOE" ]
  }

  if (use.test) {
    # For the "mockable" keyword.
    defines += [ "TEST_BUILD" ]
  }

  if (!use.vpn) {
    defines += [ "DISABLE_VPN" ]
  }

  if (!use.wake_on_wifi) {
    defines += [ "DISABLE_WAKE_ON_WIFI" ]
  }

  if (!use.wifi) {
    defines += [ "DISABLE_WIFI" ]
  }

  if (!use.wired_8021x) {
    defines += [ "DISABLE_WIRED_8021X" ]
  }

  pkg_deps = [
    "dbus-1",
    "libtirpc",
    "libbrillo",
    "libchrome-${libbase_ver}",
    "re2",
  ]
}

proto_library("mobile_operator_db-protos") {
  proto_in_dir = "mobile_operator_db"
  proto_out_dir = "include/shill/mobile_operator_db"
  sources = [
    "${proto_in_dir}/mobile_operator_db.proto",
  ]
}

protoc_text_to_bin("mobile_operator_db-db") {
  protoc_proto_def = "mobile_operator_db.proto"
  protoc_message_name = "shill.mobile_operator_db.MobileOperatorDB"
  protoc_text_dir = "mobile_operator_db"
  protoc_proto_dir = "mobile_operator_db"
  protoc_bin_dir = "${root_out_dir}"
  sources = [
    "${protoc_text_dir}/serviceproviders.prototxt",
  ]
}

protoc_text_to_bin("mobile_operator_db-test-db") {
  protoc_proto_def = "mobile_operator_db.proto"
  protoc_message_name = "shill.mobile_operator_db.MobileOperatorDB"
  protoc_text_dir = "mobile_operator_db/test_protos"
  protoc_proto_dir = "mobile_operator_db"
  protoc_bin_dir = "${root_out_dir}"
  sources = [
    "${protoc_text_dir}/data_test.prototxt",
    "${protoc_text_dir}/init_test_empty_db_init.prototxt",
    "${protoc_text_dir}/init_test_multiple_db_init_1.prototxt",
    "${protoc_text_dir}/init_test_multiple_db_init_2.prototxt",
    "${protoc_text_dir}/init_test_override_db_init_1.prototxt",
    "${protoc_text_dir}/init_test_override_db_init_2.prototxt",
    "${protoc_text_dir}/init_test_successful_init.prototxt",
    "${protoc_text_dir}/main_test.prototxt",
  ]
}

static_library("mobile_operator_db") {
  configs += [ ":target_defaults" ]
  deps = [
    ":mobile_operator_db-db",
    ":mobile_operator_db-protos",
  ]
}

generate_dbus_adaptors("shill-chromeos-dbus-adaptors") {
  dbus_adaptors_out_dir = "include/dbus_bindings"
  sources = [
    "dbus_bindings/org.chromium.flimflam.Device.dbus-xml",
    "dbus_bindings/org.chromium.flimflam.IPConfig.dbus-xml",
    "dbus_bindings/org.chromium.flimflam.Manager.dbus-xml",
    "dbus_bindings/org.chromium.flimflam.Profile.dbus-xml",
    "dbus_bindings/org.chromium.flimflam.Service.dbus-xml",
    "dbus_bindings/org.chromium.flimflam.Task.dbus-xml",
    "dbus_bindings/org.chromium.flimflam.ThirdPartyVpn.dbus-xml",
  ]
}

write_deps("libshill-net-${libbase_ver}_deps") {
  pkg_deps = []
  target = "libshill-net-${libbase_ver}"
}

net_sources = [
  "net/arp_client.cc",
  "net/arp_packet.cc",
  "net/attribute_list.cc",
  "net/byte_string.cc",
  "net/control_netlink_attribute.cc",
  "net/event_history.cc",
  "net/generic_netlink_message.cc",
  "net/ieee80211.cc",
  "net/io_handler_factory.cc",
  "net/io_handler_factory_container.cc",
  "net/io_input_handler.cc",
  "net/io_ready_handler.cc",
  "net/ip_address.cc",
  "net/netlink_attribute.cc",
  "net/netlink_fd.cc",
  "net/netlink_manager.cc",
  "net/netlink_message.cc",
  "net/netlink_packet.cc",
  "net/netlink_sock_diag.cc",
  "net/netlink_socket.cc",
  "net/nl80211_attribute.cc",
  "net/nl80211_message.cc",
  "net/rtnl_handler.cc",
  "net/rtnl_listener.cc",
  "net/rtnl_message.cc",
  "net/shill_time.cc",
  "net/sockets.cc",
]

shared_library("libshill-net-${libbase_ver}") {
  configs += [ ":target_defaults" ]
  defines = [ "SLOG_MEANS_VLOG=1" ]
  sources = net_sources
  cflags_cc = [
    # for shill::Logging declarations
    "-Wno-unused-variable",
    "-Wno-unused-function",
  ]
  deps = [
    ":${target_name}_deps",
  ]
}

pkg_config("libshill_config") {
  pkg_deps = [
    "libcares",
    "libshill-client",
    "system_api",
  ]
}

pkg_config("libshill_all_dependent_config") {
  pkg_deps = [
    "libcares",
    "libmetrics-${libbase_ver}",
    "libpasswordprovider",
    "libpower_manager-client",
  ]
  if (use.fuzzer) {
    pkg_deps += [ "protobuf" ]
  } else {
    pkg_deps += [ "protobuf-lite" ]
  }
}

if (use.cellular) {
  pkg_config("libshill_cellular_config") {
    pkg_deps = [ "ModemManager" ]
  }
}

generate_dbus_proxies("generate_cellular_proxies") {
  modemmanager_in_dir = "${sysroot}/usr/share/dbus-1/interfaces/"
  proxy_output_file = "include/cellular/dbus-proxies.h"
  sources = [
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.Location.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.Modem3gpp.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.ModemCdma.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.Simple.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Modem.xml",
    "${modemmanager_in_dir}/org.freedesktop.ModemManager1.Sim.xml",
    "dbus_bindings/dbus-objectmanager.dbus-xml",
    "dbus_bindings/dbus-properties.dbus-xml",
  ]
}

generate_dbus_proxies("generate_dhcpcd_proxies") {
  proxy_output_file = "include/dhcpcd/dbus-proxies.h"
  sources = [
    "dbus_bindings/dhcpcd.dbus-xml",
  ]
}

generate_dbus_proxies("generate_upstart_proxies") {
  proxy_output_file = "include/upstart/dbus-proxies.h"
  sources = [
    "dbus_bindings/upstart-job-shill-event.dbus-xml",
    "dbus_bindings/upstart.dbus-xml",
  ]
}

generate_dbus_proxies("generate_supplicant_proxies") {
  proxy_output_file = "include/supplicant/dbus-proxies.h"
  sources = [
    "dbus_bindings/supplicant-bss.dbus-xml",
    "dbus_bindings/supplicant-interface.dbus-xml",
    "dbus_bindings/supplicant-network.dbus-xml",
    "dbus_bindings/supplicant-process.dbus-xml",
  ]
}

static_library("libshill") {
  configs += [
    ":libshill_config",
    ":target_defaults",
  ]
  all_dependent_configs = [ ":libshill_all_dependent_config" ]
  sources = [
    "active_link_monitor.cc",
    "certificate_file.cc",
    "connection.cc",
    "connection_diagnostics.cc",
    "connection_info.cc",
    "connection_info_reader.cc",
    "crypto_des_cbc.cc",
    "crypto_provider.cc",
    "crypto_rot47.cc",
    "daemon_task.cc",
    "dbus/dbus_adaptor.cc",
    "dbus/dbus_control.cc",
    "dbus/dbus_service_watcher.cc",
    "dbus/dbus_service_watcher_factory.cc",
    "dbus/device_dbus_adaptor.cc",
    "dbus/dhcpcd_listener.cc",
    "dbus/dhcpcd_proxy.cc",
    "dbus/ipconfig_dbus_adaptor.cc",
    "dbus/manager_dbus_adaptor.cc",
    "dbus/power_manager_proxy.cc",
    "dbus/profile_dbus_adaptor.cc",
    "dbus/rpc_task_dbus_adaptor.cc",
    "dbus/service_dbus_adaptor.cc",
    "dbus/third_party_vpn_dbus_adaptor.cc",
    "dbus/upstart_proxy.cc",
    "default_profile.cc",
    "device.cc",
    "device_claimer.cc",
    "device_id.cc",
    "device_info.cc",
    "dhcp/dhcp_config.cc",
    "dhcp/dhcp_properties.cc",
    "dhcp/dhcp_provider.cc",
    "dhcp/dhcpv4_config.cc",
    "dns_client.cc",
    "dns_client_factory.cc",
    "dns_server_tester.cc",
    "dns_util.cc",
    "ephemeral_profile.cc",
    "error.cc",
    "ethernet/ethernet.cc",
    "ethernet/ethernet_provider.cc",
    "ethernet/ethernet_service.cc",
    "ethernet/ethernet_temporary_service.cc",
    "ethernet/virtio_ethernet.cc",
    "event_dispatcher.cc",
    "external_task.cc",
    "file_io.cc",
    "file_reader.cc",
    "geolocation_info.cc",
    "hook_table.cc",
    "http_request.cc",
    "http_url.cc",
    "icmp.cc",
    "icmp_session.cc",
    "icmp_session_factory.cc",
    "ip_address_store.cc",
    "ipconfig.cc",
    "key_file_store.cc",
    "key_value_store.cc",
    "link_monitor.cc",
    "logging.cc",
    "manager.cc",
    "metrics.cc",
    "passive_link_monitor.cc",
    "pending_activation_store.cc",
    "portal_detector.cc",
    "power_manager.cc",
    "process_manager.cc",
    "profile.cc",
    "property_store.cc",
    "resolver.cc",
    "result_aggregator.cc",
    "routing_policy_entry.cc",
    "routing_table.cc",
    "routing_table_entry.cc",
    "rpc_task.cc",
    "scope_logger.cc",
    "service.cc",
    "shill_ares.cc",
    "shill_config.cc",
    "shill_daemon.cc",
    "shill_test_config.cc",
    "socket_info.cc",
    "socket_info_reader.cc",
    "static_ip_parameters.cc",
    "technology.cc",
    "tethering.cc",
    "throttler.cc",
    "traffic_monitor.cc",
    "upstart/upstart.cc",
    "virtual_device.cc",
    "vpn/vpn_driver.cc",
    "vpn/vpn_provider.cc",
    "vpn/vpn_service.cc",
  ]
  sources += net_sources
  libs = [
    "bootstat",
    "rootdev",
    "rt",
  ]

  deps = [
    ":generate_dhcpcd_proxies",
    ":generate_upstart_proxies",
    ":mobile_operator_db",
    ":shill-chromeos-dbus-adaptors",
  ]

  if (use.cellular) {
    configs += [ ":libshill_cellular_config" ]
    sources += [
      "cellular/cellular.cc",
      "cellular/cellular_bearer.cc",
      "cellular/cellular_capability.cc",
      "cellular/cellular_capability_3gpp.cc",
      "cellular/cellular_capability_cdma.cc",
      "cellular/cellular_error.cc",
      "cellular/cellular_pco.cc",
      "cellular/cellular_service.cc",
      "cellular/mobile_operator_info.cc",
      "cellular/mobile_operator_info_impl.cc",
      "cellular/modem.cc",
      "cellular/modem_info.cc",
      "cellular/subscription_state.cc",
      "cellular/verizon_subscription_state.cc",
      "dbus/dbus_objectmanager_proxy.cc",
      "dbus/dbus_properties_proxy.cc",
      "dbus/mm1_modem_location_proxy.cc",
      "dbus/mm1_modem_modem3gpp_proxy.cc",
      "dbus/mm1_modem_modemcdma_proxy.cc",
      "dbus/mm1_modem_proxy.cc",
      "dbus/mm1_modem_simple_proxy.cc",
      "dbus/mm1_sim_proxy.cc",
      "protobuf_lite_streams.cc",
    ]
    deps += [ ":generate_cellular_proxies" ]
  }

  if (use.cellular || use.vpn || use.pppoe) {
    sources += [
      "ppp_daemon.cc",
      "ppp_device.cc",
      "ppp_device_factory.cc",
    ]
  }

  if (use.pppoe) {
    sources += [ "pppoe/pppoe_service.cc" ]
  }

  if (use.vpn) {
    sources += [
      "vpn/arc_vpn_driver.cc",
      "vpn/l2tp_ipsec_driver.cc",
      "vpn/openvpn_driver.cc",
      "vpn/openvpn_management_server.cc",
      "vpn/third_party_vpn_driver.cc",
    ]
  }

  if (use.wifi) {
    sources += [
      "wifi/mac80211_monitor.cc",
      "wifi/tdls_manager.cc",
      "wifi/wake_on_wifi.cc",
      "wifi/wifi.cc",
      "wifi/wifi_endpoint.cc",
      "wifi/wifi_provider.cc",
      "wifi/wifi_service.cc",
    ]
  }

  if (use.wifi || use.wired_8021x) {
    sources += [
      "dbus/supplicant_bss_proxy.cc",
      "dbus/supplicant_interface_proxy.cc",
      "dbus/supplicant_network_proxy.cc",
      "dbus/supplicant_process_proxy.cc",
      "eap_credentials.cc",
      "eap_listener.cc",
      "supplicant/supplicant_eap_state_handler.cc",
      "supplicant/supplicant_manager.cc",
      "supplicant/wpa_supplicant.cc",
    ]
    deps += [ ":generate_supplicant_proxies" ]
  }

  if (use.wired_8021x) {
    sources += [
      "ethernet/ethernet_eap_provider.cc",
      "ethernet/ethernet_eap_service.cc",
    ]
  }

  if (use.dhcpv6) {
    sources += [ "dhcp/dhcpv6_config.cc" ]
  }
}

pkg_config("shill_config") {
  pkg_deps = [ "libminijail" ]
}

executable("shill") {
  configs += [
    ":shill_config",
    ":target_defaults",
  ]
  sources = [
    "shill_main.cc",
  ]
  deps = [
    ":libshill",
  ]
}

pkg_config("netfilter-queue-helper_config") {
  pkg_deps = [
    "libnetfilter_queue",
    "libnfnetlink",
  ]
}

executable("netfilter-queue-helper") {
  configs += [
    ":netfilter-queue-helper_config",
    ":target_defaults",
  ]
  sources = [
    "shims/netfilter_queue_helper.cc",
    "shims/netfilter_queue_processor.cc",
  ]
}

pkg_config("openvpn-script_config") {
  pkg_deps = [ "libshill-client" ]
}

executable("openvpn-script") {
  configs += [
    ":openvpn-script_config",
    ":target_defaults",
  ]
  sources = [
    "shims/environment.cc",
    "shims/openvpn_script.cc",
    "shims/task_proxy.cc",
  ]
}

if (use.cellular) {
  pkg_config("set-apn-helper_config") {
    pkg_deps = [ "dbus-glib-1" ]
  }

  executable("set-apn-helper") {
    configs += [
      ":set-apn-helper_config",
      ":target_defaults",
    ]
    sources = [
      "shims/set_apn_helper.c",
    ]
  }
}

if (use.cellular || use.vpn || use.pppoe) {
  shared_library("shill-pppd-plugin") {
    configs += [
      ":openvpn-script_config",
      ":target_defaults",
    ]
    sources = [
      "shims/c_ppp.cc",
      "shims/environment.cc",
      "shims/ppp.cc",
      "shims/pppd_plugin.c",
      "shims/task_proxy.cc",
    ]
  }
}

if (use.fuzzer) {
  pkg_config("fuzzed_data_config") {
    pkg_deps = [ "libchrome-test-${libbase_ver}" ]
  }
  executable("arp_client_fuzzer") {
    configs += [
      "//common-mk:test",
      "//common-mk/common_fuzzer",
      ":fuzzed_data_config",
      ":target_defaults",
    ]
    sources = [
      "net/arp_client_fuzzer.cc",
    ]
    deps = [
      ":libshill",
    ]
  }
  executable("cellular_pco_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":fuzzed_data_config",
      ":target_defaults",
    ]
    sources = [
      "cellular/cellular_pco_fuzzer.cc",
    ]
    deps = [
      ":libshill",
    ]
  }
  executable("nl80211_message_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    sources = [
      "net/nl80211_message_fuzzer.cc",
    ]
    deps = [
      ":libshill",
    ]
  }
  executable("rtnl_handler_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    sources = [
      "net/rtnl_handler_fuzzer.cc",
    ]
    deps = [
      ":libshill",
    ]
  }
  executable("verizon_subscription_state_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
    ]
    sources = [
      "cellular/verizon_subscription_state_fuzzer.cc",
    ]
    deps = [
      ":libshill",
    ]
  }
  executable("wifi_ies_fuzzer") {
    configs += [
      "//common-mk/common_fuzzer",
      ":target_defaults",
      ":shill_config",
    ]
    sources = [
      "wifi/wifi_ies_fuzzer.cc",
    ]
    deps = [
      ":libshill",
    ]
  }
}

if (use.test) {
  pkg_config("shill_unittest_config") {
    pkg_deps = [
      "libchrome-test-${libbase_ver}",
      "libnetfilter_queue",
      "libnfnetlink",
      "libminijail",
    ]
    if (use.cellular) {
      pkg_deps += [ "ModemManager" ]
    }
  }

  executable("shill_unittest") {
    configs += [
      "//common-mk:test",
      ":libshill_config",
      ":shill_unittest_config",
      ":target_defaults",
    ]
    sources = [
      "active_link_monitor_test.cc",
      "certificate_file_test.cc",
      "connection_diagnostics_test.cc",
      "connection_info_reader_test.cc",
      "connection_info_test.cc",
      "connection_test.cc",
      "crypto_des_cbc_test.cc",
      "crypto_provider_test.cc",
      "crypto_rot47_test.cc",
      "daemon_task_test.cc",
      "dbus/dbus_adaptor_test.cc",
      "dbus/manager_dbus_adaptor_test.cc",
      "default_profile_test.cc",
      "device_claimer_test.cc",
      "device_id_test.cc",
      "device_info_test.cc",
      "device_test.cc",
      "dhcp/dhcp_config_test.cc",
      "dhcp/dhcp_properties_test.cc",
      "dhcp/dhcp_provider_test.cc",
      "dhcp/dhcpv4_config_test.cc",
      "dhcp/mock_dhcp_config.cc",
      "dhcp/mock_dhcp_properties.cc",
      "dhcp/mock_dhcp_provider.cc",
      "dhcp/mock_dhcp_proxy.cc",
      "dns_client_test.cc",
      "dns_server_tester_test.cc",
      "dns_util_test.cc",
      "error_test.cc",
      "ethernet/ethernet_provider.cc",
      "ethernet/ethernet_provider_test.cc",
      "ethernet/ethernet_service_test.cc",
      "ethernet/ethernet_test.cc",
      "ethernet/mock_ethernet.cc",
      "ethernet/mock_ethernet_provider.cc",
      "ethernet/mock_ethernet_service.cc",
      "external_task_test.cc",
      "fake_store.cc",
      "file_reader_test.cc",
      "hook_table_test.cc",
      "http_request_test.cc",
      "http_url_test.cc",
      "icmp_session_test.cc",
      "icmp_test.cc",
      "ip_address_store_test.cc",
      "ipconfig_test.cc",
      "key_file_store_test.cc",
      "key_value_store_test.cc",
      "link_monitor_test.cc",
      "manager_test.cc",
      "metrics_test.cc",
      "mock_active_link_monitor.cc",
      "mock_adaptors.cc",
      "mock_ares.cc",
      "mock_certificate_file.cc",
      "mock_connection.cc",
      "mock_connection_info_reader.cc",
      "mock_control.cc",
      "mock_device.cc",
      "mock_device_info.cc",
      "mock_dns_client.cc",
      "mock_dns_client_factory.cc",
      "mock_event_dispatcher.cc",
      "mock_external_task.cc",
      "mock_http_request.cc",
      "mock_icmp.cc",
      "mock_icmp_session.cc",
      "mock_icmp_session_factory.cc",
      "mock_ipconfig.cc",
      "mock_link_monitor.cc",
      "mock_log.cc",
      "mock_log_test.cc",
      "mock_manager.cc",
      "mock_metrics.cc",
      "mock_passive_link_monitor.cc",
      "mock_pending_activation_store.cc",
      "mock_portal_detector.cc",
      "mock_power_manager.cc",
      "mock_power_manager_proxy.cc",
      "mock_process_manager.cc",
      "mock_profile.cc",
      "mock_resolver.cc",
      "mock_routing_table.cc",
      "mock_service.cc",
      "mock_socket_info_reader.cc",
      "mock_store.cc",
      "mock_throttler.cc",
      "mock_traffic_monitor.cc",
      "mock_virtual_device.cc",
      "net/arp_client_test.cc",
      "net/arp_client_test_helper.cc",
      "net/arp_packet_test.cc",
      "net/attribute_list_test.cc",
      "net/byte_string_test.cc",
      "net/event_history_test.cc",
      "net/ip_address_test.cc",
      "net/mock_arp_client.cc",
      "net/netlink_attribute_test.cc",
      "net/nl80211_message_test.cc",
      "net/rtnl_handler_test.cc",
      "net/rtnl_listener_test.cc",
      "net/rtnl_message_test.cc",
      "net/shill_time_test.cc",
      "passive_link_monitor_test.cc",
      "pending_activation_store_test.cc",
      "portal_detector_test.cc",
      "power_manager_test.cc",
      "process_manager_test.cc",
      "profile_test.cc",
      "property_accessor_test.cc",
      "property_store_test.cc",
      "resolver_test.cc",
      "result_aggregator_test.cc",
      "routing_table_test.cc",
      "rpc_task_test.cc",
      "scope_logger_test.cc",
      "service_property_change_test.cc",
      "service_test.cc",
      "service_under_test.cc",
      "shims/netfilter_queue_processor.cc",
      "shims/netfilter_queue_processor_test.cc",
      "socket_info_reader_test.cc",
      "socket_info_test.cc",
      "static_ip_parameters_test.cc",
      "technology_test.cc",
      "testrunner.cc",
      "throttler_test.cc",
      "timeout_set_test.cc",
      "traffic_monitor_test.cc",
      "upstart/mock_upstart.cc",
      "upstart/mock_upstart_proxy.cc",
      "upstart/upstart_test.cc",
      "virtual_device_test.cc",
      "vpn/mock_vpn_provider.cc",
    ]
    deps = [
      ":libshill",
    ]

    if (use.cellular) {
      sources += [
        "cellular/cellular_bearer_test.cc",
        "cellular/cellular_capability_3gpp_test.cc",
        "cellular/cellular_capability_cdma_test.cc",
        "cellular/cellular_error_test.cc",
        "cellular/cellular_pco_test.cc",
        "cellular/cellular_service_test.cc",
        "cellular/cellular_test.cc",
        "cellular/mobile_operator_info_test.cc",
        "cellular/mock_cellular.cc",
        "cellular/mock_cellular_service.cc",
        "cellular/mock_dbus_objectmanager_proxy.cc",
        "cellular/mock_mm1_modem_location_proxy.cc",
        "cellular/mock_mm1_modem_modem3gpp_proxy.cc",
        "cellular/mock_mm1_modem_modemcdma_proxy.cc",
        "cellular/mock_mm1_modem_proxy.cc",
        "cellular/mock_mm1_modem_simple_proxy.cc",
        "cellular/mock_mm1_sim_proxy.cc",
        "cellular/mock_mobile_operator_info.cc",
        "cellular/mock_modem.cc",
        "cellular/mock_modem_info.cc",
        "cellular/modem_info_test.cc",
        "cellular/modem_test.cc",
        "cellular/verizon_subscription_state_test.cc",
        "mock_dbus_properties_proxy.cc",
      ]
      deps += [ ":mobile_operator_db-test-db" ]
    }

    if (use.cellular || use.vpn || use.pppoe) {
      sources += [
        "mock_ppp_device.cc",
        "mock_ppp_device_factory.cc",
        "ppp_daemon_test.cc",
        "ppp_device_test.cc",
      ]
    }

    if (use.dhcpv6) {
      sources += [ "dhcp/dhcpv6_config_test.cc" ]
    }

    if (use.pppoe) {
      sources += [ "pppoe/pppoe_service_test.cc" ]
    }

    if (use.vpn) {
      sources += [
        "shims/environment.cc",
        "shims/environment_test.cc",
        "vpn/arc_vpn_driver_test.cc",
        "vpn/l2tp_ipsec_driver_test.cc",
        "vpn/mock_openvpn_management_server.cc",
        "vpn/mock_vpn_driver.cc",
        "vpn/mock_vpn_service.cc",
        "vpn/openvpn_driver_test.cc",
        "vpn/openvpn_management_server_test.cc",
        "vpn/third_party_vpn_driver_test.cc",
        "vpn/vpn_driver_test.cc",
        "vpn/vpn_provider_test.cc",
        "vpn/vpn_service_test.cc",
      ]
    }

    if (use.wifi) {
      sources += [
        "net/netlink_manager_test.cc",
        "net/netlink_message_test.cc",
        "net/netlink_packet_test.cc",
        "net/netlink_socket_test.cc",
        "net/nl80211_attribute_test.cc",
        "supplicant/mock_supplicant_bss_proxy.cc",
        "wifi/mac80211_monitor_test.cc",
        "wifi/mock_mac80211_monitor.cc",
        "wifi/mock_tdls_manager.cc",
        "wifi/mock_wake_on_wifi.cc",
        "wifi/mock_wifi.cc",
        "wifi/mock_wifi_provider.cc",
        "wifi/mock_wifi_service.cc",
        "wifi/tdls_manager_test.cc",
        "wifi/wake_on_wifi_test.cc",
        "wifi/wifi_endpoint_test.cc",
        "wifi/wifi_provider_test.cc",
        "wifi/wifi_service_test.cc",
        "wifi/wifi_test.cc",
      ]
    }

    if (use.wifi || use.wired_8021x) {
      sources += [
        "eap_credentials_test.cc",
        "eap_listener_test.cc",
        "mock_eap_credentials.cc",
        "mock_eap_listener.cc",
        "supplicant/mock_supplicant_eap_state_handler.cc",
        "supplicant/mock_supplicant_interface_proxy.cc",
        "supplicant/mock_supplicant_network_proxy.cc",
        "supplicant/mock_supplicant_process_proxy.cc",
        "supplicant/supplicant_eap_state_handler_test.cc",
        "supplicant/supplicant_manager_test.cc",
        "supplicant/wpa_supplicant_test.cc",
      ]
    }

    if (use.wired_8021x) {
      sources += [
        "ethernet/ethernet_eap_provider_test.cc",
        "ethernet/ethernet_eap_service_test.cc",
        "ethernet/mock_ethernet_eap_provider.cc",
      ]
    }
  }

  executable("shill_setup_wifi") {
    configs += [
      ":openvpn-script_config",
      ":target_defaults",
    ]
    sources = [
      "setup_wifi/main.cc",
    ]
  }
}
