# Copyright (c) 2013 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.

# Define an "os_include" variable that points at the OS-specific generated
# headers.  These were generated by running the configure script offline.
if (use_cobalt_customizations) {
  os_include = "starboard"
} else
if (is_linux || is_chromeos || is_android || is_nacl || is_fuchsia) {
  os_include = "linux"
} else if (is_apple) {
  os_include = "mac"
} else if (is_win) {
  os_include = "win32"
}

import("//third_party/libxml/libxml_visibility.gni")

config("libxml_config") {
  # Define LIBXML_STATIC as nothing to match how libxml.h (an internal header)
  # defines LIBXML_STATIC, otherwise we get the macro redefined warning from
  # GCC. ("defines" does "-DFOO" which defines the macro FOO as 1.)
  cflags = [ "-DLIBXML_STATIC=" ]

  include_dirs = [
    "src/include",
    "$os_include/include",
  ]
}

config("libxml_warnings") {
  if (is_win) {
    cflags_c = [
      "/wd4018",  # Signed/unsigned mismatch in comparison.
      "/wd4267",  # TODO(brucedawson): http://crbug.com/554200 fix C4267
      "/wd4311",  # and C4311 warnings.
    ]
  }
  if (is_clang) {
    cflags = [
      # libxml passes `const unsigned char*` through `const char*`.
      "-Wno-pointer-sign",

      # pattern.c and uri.c both have an intentional `for (...);` /
      # `while(...);` loop. I submitted a patch to move the `'` to its own
      # line, but until that's landed suppress the warning:
      "-Wno-empty-body",

      # debugXML.c compares array 'arg' to NULL.
      "-Wno-tautological-pointer-compare",

      # threads.c attempts to forward declare a pthread_equal which doesn't
      # match the prototype in pthreads.h
      "-Wno-ignored-attributes",

      # libxml casts from int to long to void*.
      "-Wno-int-to-void-pointer-cast",

      # libxml passes a volatile LPCRITICAL_SECTION* to a function expecting
      # a void* volatile*.
      "-Wno-incompatible-pointer-types",

      # trio_is_special_quantity and trio_is_negative are only
      # used with certain preprocessor defines set.
      "-Wno-unused-function",

      # Comparison between xmlElementType and xmlXPathTypeVal.
      # TODO(hans): See if we can fix upstream (http://crbug.com/763944).
      "-Wno-enum-compare",
    ]
    if (is_clang_16 && use_cobalt_customizations) {
      cflags += [
        # xmlschemas.c variable 'count' set but not used
        "-Wno-unused-but-set-variable",
      ]
    }
  } else if (is_linux || is_chromeos) {
    cflags = [
      # gcc spits out a bunch of warnings about passing too many arguments to
      # __xmlSimpleError.
      "-Wno-format-extra-args",
    ]
  }
}

if (!use_cobalt_customizations) {  # exclude libraries "xml_reader" and "xml_writer"
static_library("xml_reader") {
  # Do not expand this visibility list without first consulting with the
  # Security Team.
  visibility = [
    "//base/test:test_support",
    "//components/policy/core/common:unit_tests",
    "//services/data_decoder:*",
    "//tools/traffic_annotation/auditor:auditor_sources",
  ]
  if (is_win) {
    visibility += [ "//components/wifi" ]
  }
  sources = [
    "chromium/xml_reader.cc",
    "chromium/xml_reader.h",
  ]
  deps = [
    ":libxml",
    ":libxml_utils",
  ]
  configs += [ ":libxml_config" ]
}

static_library("xml_writer") {
  # The XmlWriter is considered safe to use from any target.
  visibility = [ "*" ]
  sources = [
    "chromium/xml_writer.cc",
    "chromium/xml_writer.h",
  ]
  deps = [
    ":libxml",
    ":libxml_utils",
  ]
  configs += [ ":libxml_config" ]
}
}  # exclude libraries "xml_reader" and "xml_writer"

static_library("libxml_utils") {
  # Do not expand this visibility list without first consulting with the
  # Security Team.
  visibility = [
    ":xml_reader",
    ":xml_writer",
    "//base/test:test_support",
    "//services/data_decoder:xml_parser_fuzzer",
  ]
  sources = [
    "chromium/libxml_utils.cc",
    "chromium/libxml_utils.h",
  ]
  deps = [ ":libxml" ]
  public_deps = [ "//third_party/icu:icuuc" ]
  public_configs = [ ":libxml_config" ]
}

static_library("libxml") {
  # Do not expand this visibility list without first consulting with the
  # Security Team.
  visibility = [
    ":libxml_utils",
    ":xml_reader",
    ":xml_writer",
    "//chromecast/internal",
    "//testing/libfuzzer/*",
    "//third_party/blink/renderer/*",
    "//third_party/fontconfig",
    "//third_party/libxslt",
    "//third_party/maldoca/*",
  ]
  if (use_cobalt_customizations) {
    visibility += [
      "//base/test:test_support",
      "//cobalt/base",
      "//cobalt/dom_parser",
      "//cobalt/renderer/rasterizer/skia/skia",
      "//components/update_client",
    ]
  }
  if (is_ios) {
    foreach(tgt, ios_libxml_visibility_additions) {
      visibility += [ "//ios_internal/$tgt" ]
    }
  }

  output_name = "libxml2"

  # Commented out sources are libxml2 files we do not want to include. They are
  # here to make it easy to identify files which are new.
  sources = [
    #"src/DOCBparser.c",
    "src/HTMLparser.c",
    "src/HTMLtree.c",

    #"src/SAX.c",
    "src/SAX2.c",
    "src/buf.c",
    "src/buf.h",

    #"src/c14n.c",
    #"src/catalog.c",
    "src/chvalid.c",

    #"src/debugXML.c",
    "src/dict.c",
    "src/enc.h",
    "src/encoding.c",
    "src/entities.c",
    "src/error.c",
    "src/globals.c",
    "src/hash.c",
    "src/include/libxml/DOCBparser.h",
    "src/include/libxml/HTMLparser.h",
    "src/include/libxml/HTMLtree.h",
    "src/include/libxml/SAX.h",
    "src/include/libxml/SAX2.h",
    "src/include/libxml/c14n.h",
    "src/include/libxml/catalog.h",
    "src/include/libxml/chvalid.h",
    "src/include/libxml/debugXML.h",
    "src/include/libxml/dict.h",
    "src/include/libxml/encoding.h",
    "src/include/libxml/entities.h",
    "src/include/libxml/globals.h",
    "src/include/libxml/hash.h",
    "src/include/libxml/list.h",
    "src/include/libxml/nanoftp.h",
    "src/include/libxml/nanohttp.h",
    "src/include/libxml/parser.h",
    "src/include/libxml/parserInternals.h",
    "src/include/libxml/pattern.h",
    "src/include/libxml/relaxng.h",
    "src/include/libxml/schemasInternals.h",
    "src/include/libxml/schematron.h",
    "src/include/libxml/threads.h",
    "src/include/libxml/tree.h",
    "src/include/libxml/uri.h",
    "src/include/libxml/valid.h",
    "src/include/libxml/xinclude.h",
    "src/include/libxml/xlink.h",
    "src/include/libxml/xmlIO.h",
    "src/include/libxml/xmlautomata.h",
    "src/include/libxml/xmlerror.h",
    "src/include/libxml/xmlexports.h",
    "src/include/libxml/xmlmemory.h",
    "src/include/libxml/xmlmodule.h",
    "src/include/libxml/xmlreader.h",
    "src/include/libxml/xmlregexp.h",
    "src/include/libxml/xmlsave.h",
    "src/include/libxml/xmlschemas.h",
    "src/include/libxml/xmlschemastypes.h",
    "src/include/libxml/xmlstring.h",
    "src/include/libxml/xmlunicode.h",
    "src/include/libxml/xmlwriter.h",
    "src/include/libxml/xpath.h",
    "src/include/libxml/xpathInternals.h",
    "src/include/libxml/xpointer.h",

    #"src/legacy.c",
    "src/libxml.h",
    "src/list.c",
    "src/parser.c",
    "src/parserInternals.c",
    "src/pattern.c",

    "src/relaxng.c",
    "src/save.h",

    #"src/schematron.c",
    "src/threads.c",
    "src/timsort.h",
    "src/tree.c",
    "src/triodef.h",
    "src/trionan.h",

    #"src/trio.c",
    #"src/trio.h",
    #"src/triodef.h",
    # Note: xpath.c #includes trionan.c
    #"src/trionan.c",
    #"src/triop.h",
    #"src/triostr.c",
    #"src/triostr.h",
    "src/uri.c",
    "src/valid.c",

    #"src/xinclude.c",
    #"src/xlink.c",
    "src/xmlIO.c",
    "src/xmlmemory.c",

    #"src/xmlmodule.c",
    "src/xmlreader.c",

    "src/xmlregexp.c",
    "src/xmlsave.c",

    "src/xmlschemas.c",
    "src/xmlschemastypes.c",
    "src/xmlstring.c",
    "src/xmlunicode.c",
    "src/xmlwriter.c",
    "src/xpath.c",

    "src/xpointer.c",
    #"src/xzlib.c",
    "src/xzlib.h",
  ]

if (!use_cobalt_customizations) {
  configs -= [ "//build/config/compiler:chromium_code" ]
}
  configs += [
    "//build/config/compiler:no_chromium_code",

    # Must be after no_chromium_code for warning flags to be ordered correctly.
    ":libxml_warnings",
  ]

  if (is_linux || is_chromeos) {
    sources += [
      "linux/config.h",
      "linux/include/libxml/xmlversion.h",
    ]
  }

  if (is_mac) {
    sources += [
      "mac/config.h",
      "mac/include/libxml/xmlversion.h",
    ]
  }

  if (is_win) {
    sources += [
      "src/include/win32config.h",
      "src/include/wsockcompat.h",
      "win32/config.h",
      "win32/include/libxml/xmlversion.h",
    ]

    # libxml2 already defines WIN32_LEAN_AND_MEAN.
    configs -= [ "//build/config/win:lean_and_mean" ]
  }

  public_configs = [ ":libxml_config" ]
  public_deps = [ "//third_party/icu:icuuc" ]
  deps = [ "//third_party/zlib" ]

  if (is_apple || is_android || is_fuchsia) {
    # http://www.xmlsoft.org/threads.html says that this is required when using
    # libxml from several threads, which can possibly happen in chrome. On
    # linux, this is picked up by transitivity from pkg-config output from
    # build/linux/system.gyp.
    defines = [ "_REENTRANT" ]
  }

  include_dirs = [ "$os_include" ]
}
