1# Copyright (c) 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5# Define an "os_include" variable that points at the OS-specific generated
6# headers.  These were generated by running the configure script offline.
7if (is_linux || is_android) {
8  os_include = "linux"
9} else if (is_mac || is_ios) {
10  os_include = "mac"
11} else if (is_win) {
12  os_include = "win32"
13}
14
15config("libxml_config") {
16  # Define LIBXML_STATIC as nothing to match how libxml.h (an internal header)
17  # defines LIBXML_STATIC, otherwise we get the macro redefined warning from
18  # GCC. ("defines" does "-DFOO" which defines the macro FOO as 1.)
19  cflags = [ "-DLIBXML_STATIC=" ]
20
21  include_dirs = [
22    "src/include",
23    "$os_include/include",
24  ]
25}
26
27static_library("libxml") {
28  output_name = "libxml2"
29  sources = [
30    "chromium/libxml_utils.h",
31    "chromium/libxml_utils.cc",
32    "linux/config.h",
33    "linux/include/libxml/xmlversion.h",
34    "mac/config.h",
35    "mac/include/libxml/xmlversion.h",
36    "src/include/libxml/c14n.h",
37    "src/include/libxml/catalog.h",
38    "src/include/libxml/chvalid.h",
39    "src/include/libxml/debugXML.h",
40    "src/include/libxml/dict.h",
41    "src/include/libxml/DOCBparser.h",
42    "src/include/libxml/encoding.h",
43    "src/include/libxml/entities.h",
44    "src/include/libxml/globals.h",
45    "src/include/libxml/hash.h",
46    "src/include/libxml/HTMLparser.h",
47    "src/include/libxml/HTMLtree.h",
48    "src/include/libxml/list.h",
49    "src/include/libxml/nanoftp.h",
50    "src/include/libxml/nanohttp.h",
51    "src/include/libxml/parser.h",
52    "src/include/libxml/parserInternals.h",
53    "src/include/libxml/pattern.h",
54    "src/include/libxml/relaxng.h",
55    "src/include/libxml/SAX.h",
56    "src/include/libxml/SAX2.h",
57    "src/include/libxml/schemasInternals.h",
58    "src/include/libxml/schematron.h",
59    "src/include/libxml/threads.h",
60    "src/include/libxml/tree.h",
61    "src/include/libxml/uri.h",
62    "src/include/libxml/valid.h",
63    "src/include/libxml/xinclude.h",
64    "src/include/libxml/xlink.h",
65    "src/include/libxml/xmlautomata.h",
66    "src/include/libxml/xmlerror.h",
67    "src/include/libxml/xmlexports.h",
68    "src/include/libxml/xmlIO.h",
69    "src/include/libxml/xmlmemory.h",
70    "src/include/libxml/xmlmodule.h",
71    "src/include/libxml/xmlreader.h",
72    "src/include/libxml/xmlregexp.h",
73    "src/include/libxml/xmlsave.h",
74    "src/include/libxml/xmlschemas.h",
75    "src/include/libxml/xmlschemastypes.h",
76    "src/include/libxml/xmlstring.h",
77    "src/include/libxml/xmlunicode.h",
78    "src/include/libxml/xmlwriter.h",
79    "src/include/libxml/xpath.h",
80    "src/include/libxml/xpathInternals.h",
81    "src/include/libxml/xpointer.h",
82    "src/include/win32config.h",
83    "src/include/wsockcompat.h",
84    "src/acconfig.h",
85    "src/c14n.c",
86    "src/catalog.c",
87    "src/chvalid.c",
88    "src/debugXML.c",
89    "src/dict.c",
90    "src/DOCBparser.c",
91    "src/elfgcchack.h",
92    "src/encoding.c",
93    "src/entities.c",
94    "src/error.c",
95    "src/globals.c",
96    "src/hash.c",
97    "src/HTMLparser.c",
98    "src/HTMLtree.c",
99    "src/legacy.c",
100    "src/libxml.h",
101    "src/list.c",
102    "src/nanoftp.c",
103    "src/nanohttp.c",
104    "src/parser.c",
105    "src/parserInternals.c",
106    "src/pattern.c",
107    "src/relaxng.c",
108    "src/SAX.c",
109    "src/SAX2.c",
110    "src/schematron.c",
111    "src/threads.c",
112    "src/tree.c",
113    #"src/trio.c",
114    #"src/trio.h",
115    #"src/triodef.h",
116    #"src/trionan.c",
117    #"src/trionan.h",
118    #"src/triop.h",
119    #"src/triostr.c",
120    #"src/triostr.h",
121    "src/uri.c",
122    "src/valid.c",
123    "src/xinclude.c",
124    "src/xlink.c",
125    "src/xmlIO.c",
126    "src/xmlmemory.c",
127    "src/xmlmodule.c",
128    "src/xmlreader.c",
129    "src/xmlregexp.c",
130    "src/xmlsave.c",
131    "src/xmlschemas.c",
132    "src/xmlschemastypes.c",
133    "src/xmlstring.c",
134    "src/xmlunicode.c",
135    "src/xmlwriter.c",
136    "src/xpath.c",
137    "src/xpointer.c",
138    "win32/config.h",
139    "win32/include/libxml/xmlversion.h",
140  ]
141
142  configs -= [ "//build/config/compiler:chromium_code" ]
143  configs += [ "//build/config/compiler:no_chromium_code" ]
144
145  public_configs = [ ":libxml_config" ]
146  public_deps = [
147    "//third_party/icu:icuuc",
148  ]
149  deps = [
150    "//third_party/zlib",
151  ]
152
153  if (is_win) {
154    cflags_c = [
155      "/wd4101",  # Unreferenced local variable.
156    ]
157  } else if (is_mac || is_android) {
158    # http://www.xmlsoft.org/threads.html says that this is required when using
159    # libxml from several threads, which can possibly happen in chrome. On
160    # linux, this is picked up by transitivity from pkg-config output from
161    # build/linux/system.gyp.
162    defines = [ "_REENTRANT" ]
163  }
164
165  if (is_clang) {
166    cflags = [
167      # libxml passes `const unsigned char*` through `const char*`.
168      "-Wno-pointer-sign",
169
170      # pattern.c and uri.c both have an intentional `for (...);` /
171      # `while(...);` loop. I submitted a patch to move the `'` to its own
172      # line, but until that's landed suppress the warning:
173      "-Wno-empty-body",
174
175      # debugXML.c compares array 'arg' to NULL.
176      "-Wno-tautological-pointer-compare",
177
178      # threads.c attempts to forward declare a pthread_equal which doesn't
179      # match the prototype in pthreads.h
180      "-Wno-ignored-attributes",
181    ]
182  }
183
184  include_dirs = [
185    "$os_include",
186  ]
187}
188