# 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",
    "scoped_umask.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",
    ]
  }
}
