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

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

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

  if (is_win) {
    cflags_c = [ "/wd4101" ]  # Unreferenced local variable.
  } else 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" ]
  }

  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",
    ]
  }
  config("libxml_warnings") {
    if (is_clang) {
      cflags += [
        # 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",
      ]
    }
  }
  configs += [ ":libxml_warnings" ]

  include_dirs = [ "$os_include" ]
}
