# Copyright 2013 The Chromium Authors # 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_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", ] } 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", ] } } # Please keep in sync with //build/linux/unbundle/libxml.gn. 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:*", ] if (is_win) { visibility += [ "//components/wifi" ] } sources = [ "chromium/xml_reader.cc", "chromium/xml_reader.h", ] deps = [ ":libxml", ":libxml_utils", ] configs += [ ":libxml_config" ] } # Please keep in sync with //build/linux/unbundle/libxml.gn. 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" ] } # Please keep in sync with //build/linux/unbundle/libxml.gn. 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:lib", "//services/data_decoder:xml_parser_fuzzer_deps", ] 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 (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/HTMLparser.c", "src/HTMLtree.c", #"src/SAX.c", "src/SAX2.c", "src/buf.c", #"src/c14n.c", #"src/catalog.c", "src/chvalid.c", #"src/debugXML.c", "src/dict.c", "src/encoding.c", "src/entities.c", "src/error.c", "src/globals.c", "src/hash.c", "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/schematron.c", "src/threads.c", "src/timsort.h", "src/tree.c", "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", ] 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" ] } sources += [ "chromium/disabled_libxml_features.cc" ] 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" ] }