# 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
  ]
  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.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-${libbase_ver}",
    "libchrome-${libbase_ver}",
  ]
}

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 = [
    # For g_key_*(), etc in key_file_store.*
    "glib-2.0",
    "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",
    "policy-${libbase_ver}",
    "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_1.cc",
      "cellular/modem_info.cc",
      "cellular/modem_manager.cc",
      "cellular/modem_manager_1.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/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",
      "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_1_test.cc",
        "cellular/modem_info_test.cc",
        "cellular/modem_manager_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/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",
    ]
  }
}
