# Copyright (c) 2015 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/features.gni")
import("//build/config/linux/pkg_config.gni")
import("//tools/generate_library_loader/generate_library_loader.gni")

gypi_values = exec_script("//build/gypi_to_gn.py",
                          [ rebase_path("system.gyp") ],
                          "scope",
                          [ "system.gyp" ])

use_system_fontconfig = !is_chromecast

# If brlapi isn't needed, don't require it to be installed.
if (use_brlapi) {
  config("brlapi_config") {
    defines = [ "USE_BRLAPI" ]
  }

  # TODO(GYP) linux_link_brlapi support. Is this needed?
  generate_library_loader("libbrlapi") {
    name = "LibBrlapiLoader"
    output_h = "libbrlapi.h"
    output_cc = "libbrlapi_loader.cc"
    header = "<brlapi.h>"
    config = ":brlapi_config"

    functions = gypi_values.libbrlapi_functions
  }
}
if (is_desktop_linux) {
  pkg_config("gio_config") {
    packages = [ "gio-2.0" ]

    # glib >=2.40 deprecate g_settings_list_schemas in favor of
    # g_settings_schema_source_list_schemas. This function is not available on
    # earlier versions that we still need to support (specifically, 2.32), so
    # disable the warning with the GLIB_DISABLE_DEPRECATION_WARNINGS define.
    # TODO(mgiuca): Remove this suppression when we drop support for Ubuntu
    # 13.10 (saucy) and earlier. Update the code to use
    # g_settings_schema_source_list_schemas instead.
    defines = [
      "USE_GIO",
      "GLIB_DISABLE_DEPRECATION_WARNINGS",
    ]

    # TODO(brettw) Theoretically I think ignore_libs should be set so that we
    # don't link directly to GIO and use the loader generated below. But the
    # gio target in GYP doesn't make any sense to me and appears to link
    # directly to GIO in addition to making a loader. This this uncommented,
    # the link in component build fails, so I think this is closer to the
    # GYP build.
    #ignore_libs = true  # Loader generated below.
  }

  # This generates a target named "gio".
  generate_library_loader("gio") {
    name = "LibGioLoader"
    output_h = "libgio.h"
    output_cc = "libgio_loader.cc"
    header = "<gio/gio.h>"
    config = "//build/linux:gio_config"

    functions = gypi_values.libgio_functions
  }
}

# This generates a target named "libpci".
generate_library_loader("libpci") {
  name = "LibPciLoader"
  output_h = "libpci.h"
  output_cc = "libpci_loader.cc"
  header = "<pci/pci.h>"

  functions = gypi_values.libpci_functions
}

# Looking for libspeechd? Use //third_party/speech-dispatcher

# This generates a target named "udev0_loader".
generate_library_loader("udev0_loader") {
  name = "LibUdev0Loader"
  output_h = "libudev0.h"
  output_cc = "libudev0_loader.cc"
  header = "\"third_party/libudev/libudev0.h\""

  functions = gypi_values.libudev_functions
}

# This generates a target named "udev1_loader".
generate_library_loader("udev1_loader") {
  name = "LibUdev1Loader"
  output_h = "libudev1.h"
  output_cc = "libudev1_loader.cc"
  header = "\"third_party/libudev/libudev1.h\""

  functions = gypi_values.libudev_functions
}

group("udev") {
  deps = [
    ":udev0_loader",
    ":udev1_loader",
  ]
}

group("fontconfig") {
  if (use_system_fontconfig) {
    public_configs = [ "//build/config/linux:fontconfig" ]
  } else {
    public_deps = [
      "//third_party/fontconfig",
    ]
  }
}
