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

component("wifi") {
  sources = [
    "network_properties.cc",
    "network_properties.h",
    "wifi_export.h",
    "wifi_service.cc",
    "wifi_service.h",
  ]

  defines = [ "WIFI_IMPLEMENTATION" ]

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

  if (is_win) {
    sources += [ "wifi_service_win.cc" ]
    libs = [ "iphlpapi.lib" ]
    deps += [
      "//third_party/libxml:xml_reader",  # Safe, data come from system.
      "//third_party/libxml:xml_writer",
    ]
  }

  if (is_mac) {
    sources += [ "wifi_service_mac.mm" ]
    frameworks = [
      "CoreWLAN.framework",
      "Foundation.framework",
      "SystemConfiguration.framework",
    ]
  }
}

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