# 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 (is_linux || is_android || is_nacl) {
  os_include = "linux"
} else if (is_mac || is_ios) {
  os_include = "mac"
} else if (is_win) {
  os_include = "win32"
}

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",
    ]
  } else if (is_linux) {
    cflags = [
      # gcc spits out a bunch of warnings about passing too many arguments to
      # __xmlSimpleError.
      "-Wno-format-extra-args",
    ]
  }
}

static_library("libxml") {
  output_name = "libxml2"
  sources = [
    "chromium/libxml_utils.cc",
    "chromium/libxml_utils.h",
    "linux/config.h",
    "linux/include/libxml/xmlversion.h",
    "mac/config.h",
    "mac/include/libxml/xmlversion.h",
    "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/elfgcchack.h",
    "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/include/win32config.h",
    "src/include/wsockcompat.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",
    #"src/trionan.c",
    #"src/trionan.h",
    #"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",
    "win32/config.h",
    "win32/include/libxml/xmlversion.h",
  ]

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

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

  if (is_mac || is_ios || is_android) {
    # 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" ]
}
