# Copyright 2014 The Chromium 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("//build/config/jumbo.gni")

jumbo_component("wifi") {
  sources = [
    "network_properties.cc",
    "network_properties.h",
    "wifi_export.h",
    "wifi_service.cc",
    "wifi_service.h",
    "wifi_service_mac.mm",
    "wifi_service_win.cc",
  ]

  defines = [ "WIFI_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//components/onc",
    "//crypto",
    "//third_party/libxml",
  ]

  if (is_win) {
    libs = [ "iphlpapi.lib" ]
  }

  if (is_mac) {
    libs = [
      "CoreWLAN.framework",
      "Foundation.framework",
      "SystemConfiguration.framework",
    ]
  }
}

jumbo_static_library("test_support") {
  sources = [
    "fake_wifi_service.cc",
    "fake_wifi_service.h",
  ]

  deps = [
    ":wifi",
    "//base",
    "//components/onc",
  ]
}

executable("wifi_test") {
  sources = [
    "wifi_test.cc",
  ]

  deps = [
    ":wifi",
    "//base",
    "//build/win:default_exe_manifest",
    "//components/onc",
  ]
}
