xref: /aosp_15_r20/external/libxml2/meson.build (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1*7c568831SAndroid Build Coastguard Workerproject(
2*7c568831SAndroid Build Coastguard Worker    'libxml2',
3*7c568831SAndroid Build Coastguard Worker    'c',
4*7c568831SAndroid Build Coastguard Worker    version: files('VERSION'),
5*7c568831SAndroid Build Coastguard Worker    license: 'MIT',
6*7c568831SAndroid Build Coastguard Worker    default_options: ['buildtype=debug', 'warning_level=3'],
7*7c568831SAndroid Build Coastguard Worker    meson_version: '>= 0.61',
8*7c568831SAndroid Build Coastguard Worker)
9*7c568831SAndroid Build Coastguard Worker
10*7c568831SAndroid Build Coastguard Workerv_array = meson.project_version().split('.')
11*7c568831SAndroid Build Coastguard Workerv_maj = v_array[0].to_int()
12*7c568831SAndroid Build Coastguard Workerv_min = v_array[1].to_int()
13*7c568831SAndroid Build Coastguard Workerv_mic = v_array[2].to_int()
14*7c568831SAndroid Build Coastguard Workerv_nbr = v_maj * 10000 + v_min * 100 + v_mic
15*7c568831SAndroid Build Coastguard Workerv_extra = ''
16*7c568831SAndroid Build Coastguard Workerr = run_command('git', 'describe', check: false)
17*7c568831SAndroid Build Coastguard Workerif (r.returncode() == 0)
18*7c568831SAndroid Build Coastguard Worker    v_extra = '-GIT' + r.stdout().strip()
19*7c568831SAndroid Build Coastguard Workerendif
20*7c568831SAndroid Build Coastguard Worker
21*7c568831SAndroid Build Coastguard Worker# install paths
22*7c568831SAndroid Build Coastguard Workerdir_prefix = get_option('prefix')
23*7c568831SAndroid Build Coastguard Workerdir_bin = dir_prefix / get_option('bindir')
24*7c568831SAndroid Build Coastguard Workerdir_include = dir_prefix / get_option('includedir')
25*7c568831SAndroid Build Coastguard Workerdir_pkginclude = dir_include / meson.project_name()
26*7c568831SAndroid Build Coastguard Workerdir_lib = dir_prefix / get_option('libdir')
27*7c568831SAndroid Build Coastguard Workerdir_data = dir_prefix / get_option('datadir')
28*7c568831SAndroid Build Coastguard Workerdir_doc = dir_data / 'doc' / 'libxml2'
29*7c568831SAndroid Build Coastguard Workerdir_locale = dir_prefix / get_option('localedir')
30*7c568831SAndroid Build Coastguard Worker
31*7c568831SAndroid Build Coastguard Worker# host
32*7c568831SAndroid Build Coastguard Worker
33*7c568831SAndroid Build Coastguard Workerhost_os = host_machine.system()
34*7c568831SAndroid Build Coastguard Worker
35*7c568831SAndroid Build Coastguard Workercygwin = 'cygwin'
36*7c568831SAndroid Build Coastguard Workerwindows = 'windows'
37*7c568831SAndroid Build Coastguard Workersys_cygwin = cygwin.contains(host_os)
38*7c568831SAndroid Build Coastguard Workersys_windows = windows.contains(host_os)
39*7c568831SAndroid Build Coastguard Worker
40*7c568831SAndroid Build Coastguard Workerlibxml2_cflags = []
41*7c568831SAndroid Build Coastguard Workerxml_cflags = ''
42*7c568831SAndroid Build Coastguard Workerdep_args = []
43*7c568831SAndroid Build Coastguard Worker
44*7c568831SAndroid Build Coastguard Workerif sys_cygwin or sys_windows
45*7c568831SAndroid Build Coastguard Worker    if get_option('default_library') == 'static'
46*7c568831SAndroid Build Coastguard Worker        xml_cflags = '-DLIBXML_STATIC'
47*7c568831SAndroid Build Coastguard Worker        libxml2_cflags += '-DLIBXML_STATIC'
48*7c568831SAndroid Build Coastguard Worker        dep_args += '-DLIBXML_STATIC'
49*7c568831SAndroid Build Coastguard Worker    endif
50*7c568831SAndroid Build Coastguard Workerendif
51*7c568831SAndroid Build Coastguard Worker
52*7c568831SAndroid Build Coastguard Worker# binaries
53*7c568831SAndroid Build Coastguard Workercc = meson.get_compiler('c')
54*7c568831SAndroid Build Coastguard Worker
55*7c568831SAndroid Build Coastguard Worker# options
56*7c568831SAndroid Build Coastguard Worker
57*7c568831SAndroid Build Coastguard Worker# disabled by default
58*7c568831SAndroid Build Coastguard Workerwant_icu = get_option('icu').enabled()
59*7c568831SAndroid Build Coastguard Workerwant_legacy = get_option('legacy').enabled()
60*7c568831SAndroid Build Coastguard Workerwant_thread_alloc = get_option('thread-alloc').enabled()
61*7c568831SAndroid Build Coastguard Workerwant_tls = get_option('tls').enabled()
62*7c568831SAndroid Build Coastguard Worker
63*7c568831SAndroid Build Coastguard Worker# default depends on minimum option
64*7c568831SAndroid Build Coastguard Worker
65*7c568831SAndroid Build Coastguard Workerwant_minimum = get_option('minimum')
66*7c568831SAndroid Build Coastguard Worker
67*7c568831SAndroid Build Coastguard Workerfeature = get_option('catalog')
68*7c568831SAndroid Build Coastguard Workerwant_catalog = want_minimum ? feature.enabled() : feature.allowed()
69*7c568831SAndroid Build Coastguard Worker
70*7c568831SAndroid Build Coastguard Workerfeature = get_option('debugging')
71*7c568831SAndroid Build Coastguard Workerwant_debug = want_minimum ? feature.enabled() : feature.allowed()
72*7c568831SAndroid Build Coastguard Worker
73*7c568831SAndroid Build Coastguard Workerfeature = get_option('html')
74*7c568831SAndroid Build Coastguard Workerwant_html = want_minimum ? feature.enabled() : feature.allowed()
75*7c568831SAndroid Build Coastguard Worker
76*7c568831SAndroid Build Coastguard Workerfeature = get_option('iconv')
77*7c568831SAndroid Build Coastguard Workerwant_iconv = want_minimum ? feature.enabled() : feature.allowed()
78*7c568831SAndroid Build Coastguard Worker
79*7c568831SAndroid Build Coastguard Workerfeature = get_option('iso8859x')
80*7c568831SAndroid Build Coastguard Workerwant_iso8859x = want_minimum ? feature.enabled() : feature.allowed()
81*7c568831SAndroid Build Coastguard Worker
82*7c568831SAndroid Build Coastguard Workerfeature = get_option('python')
83*7c568831SAndroid Build Coastguard Workerwant_python = want_minimum ? feature.enabled() : feature.allowed()
84*7c568831SAndroid Build Coastguard Worker
85*7c568831SAndroid Build Coastguard Workerfeature = get_option('modules')
86*7c568831SAndroid Build Coastguard Workerwant_modules = want_minimum ? feature.enabled() : feature.allowed()
87*7c568831SAndroid Build Coastguard Worker
88*7c568831SAndroid Build Coastguard Workerfeature = get_option('sax1')
89*7c568831SAndroid Build Coastguard Workerwant_sax1 = want_minimum ? feature.enabled() : feature.allowed()
90*7c568831SAndroid Build Coastguard Worker
91*7c568831SAndroid Build Coastguard Workerfeature = get_option('threads')
92*7c568831SAndroid Build Coastguard Workerwant_threads = want_minimum ? feature.enabled() : feature.allowed()
93*7c568831SAndroid Build Coastguard Worker
94*7c568831SAndroid Build Coastguard Workerfeature = get_option('valid')
95*7c568831SAndroid Build Coastguard Workerwant_valid = want_minimum ? feature.enabled() : feature.allowed()
96*7c568831SAndroid Build Coastguard Worker
97*7c568831SAndroid Build Coastguard Worker# default depends on legacy option
98*7c568831SAndroid Build Coastguard Worker
99*7c568831SAndroid Build Coastguard Workerfeature = get_option('http')
100*7c568831SAndroid Build Coastguard Workerwant_http = want_legacy ? feature.allowed() : feature.enabled()
101*7c568831SAndroid Build Coastguard Worker
102*7c568831SAndroid Build Coastguard Workerfeature = get_option('lzma')
103*7c568831SAndroid Build Coastguard Workerwant_lzma = want_legacy ? feature.allowed() : feature.enabled()
104*7c568831SAndroid Build Coastguard Worker
105*7c568831SAndroid Build Coastguard Workerfeature = get_option('zlib')
106*7c568831SAndroid Build Coastguard Workerwant_zlib = want_legacy ? feature.allowed() : feature.enabled()
107*7c568831SAndroid Build Coastguard Worker
108*7c568831SAndroid Build Coastguard Worker# dependencies
109*7c568831SAndroid Build Coastguard Worker
110*7c568831SAndroid Build Coastguard Workerfeature = get_option('output')
111*7c568831SAndroid Build Coastguard Workerwant_output = not want_minimum \
112*7c568831SAndroid Build Coastguard Worker    or get_option('c14n').enabled() \
113*7c568831SAndroid Build Coastguard Worker    or get_option('writer').enabled() ? \
114*7c568831SAndroid Build Coastguard Worker    feature.allowed() : feature.enabled()
115*7c568831SAndroid Build Coastguard Worker
116*7c568831SAndroid Build Coastguard Workerfeature = get_option('pattern')
117*7c568831SAndroid Build Coastguard Workerwant_pattern = not want_minimum \
118*7c568831SAndroid Build Coastguard Worker    or get_option('schemas').enabled() \
119*7c568831SAndroid Build Coastguard Worker    or get_option('schematron').enabled() ? \
120*7c568831SAndroid Build Coastguard Worker    feature.allowed() : feature.enabled()
121*7c568831SAndroid Build Coastguard Worker
122*7c568831SAndroid Build Coastguard Workerfeature = get_option('regexps')
123*7c568831SAndroid Build Coastguard Workerwant_regexps = not want_minimum \
124*7c568831SAndroid Build Coastguard Worker    or get_option('schemas').enabled() ? \
125*7c568831SAndroid Build Coastguard Worker    feature.allowed() : feature.enabled()
126*7c568831SAndroid Build Coastguard Worker
127*7c568831SAndroid Build Coastguard Workerfeature = get_option('push')
128*7c568831SAndroid Build Coastguard Workerwant_push = not want_minimum \
129*7c568831SAndroid Build Coastguard Worker    or get_option('reader').enabled() \
130*7c568831SAndroid Build Coastguard Worker    or get_option('writer').enabled() ? \
131*7c568831SAndroid Build Coastguard Worker    feature.allowed() : feature.enabled()
132*7c568831SAndroid Build Coastguard Worker
133*7c568831SAndroid Build Coastguard Workerfeature = get_option('readline')
134*7c568831SAndroid Build Coastguard Workerwant_readline = get_option('history').enabled() ? \
135*7c568831SAndroid Build Coastguard Worker    feature.allowed() : feature.enabled()
136*7c568831SAndroid Build Coastguard Worker
137*7c568831SAndroid Build Coastguard Workerfeature = get_option('xpath')
138*7c568831SAndroid Build Coastguard Workerwant_xpath = not want_minimum \
139*7c568831SAndroid Build Coastguard Worker    or get_option('c14n').enabled() \
140*7c568831SAndroid Build Coastguard Worker    or get_option('schematron').enabled() \
141*7c568831SAndroid Build Coastguard Worker    or get_option('xinclude').enabled() \
142*7c568831SAndroid Build Coastguard Worker    or get_option('xptr').enabled() ? \
143*7c568831SAndroid Build Coastguard Worker    feature.allowed() : feature.enabled()
144*7c568831SAndroid Build Coastguard Worker
145*7c568831SAndroid Build Coastguard Workerfeature = get_option('c14n') \
146*7c568831SAndroid Build Coastguard Worker    .require(want_output, error_message: 'c14n requires output') \
147*7c568831SAndroid Build Coastguard Worker    .require(want_xpath, error_message: 'c14n requires xpath')
148*7c568831SAndroid Build Coastguard Workerwant_c14n = want_minimum ? feature.enabled() : feature.allowed()
149*7c568831SAndroid Build Coastguard Worker
150*7c568831SAndroid Build Coastguard Workerfeature = get_option('history') \
151*7c568831SAndroid Build Coastguard Worker    .require(want_readline, error_message: 'history requires readline')
152*7c568831SAndroid Build Coastguard Workerwant_history = feature.enabled()
153*7c568831SAndroid Build Coastguard Worker
154*7c568831SAndroid Build Coastguard Workerfeature = get_option('reader') \
155*7c568831SAndroid Build Coastguard Worker    .require(want_push, error_message: 'reader requires push')
156*7c568831SAndroid Build Coastguard Workerwant_reader = want_minimum ? feature.enabled() : feature.allowed()
157*7c568831SAndroid Build Coastguard Worker
158*7c568831SAndroid Build Coastguard Workerfeature = get_option('schemas') \
159*7c568831SAndroid Build Coastguard Worker    .require(want_pattern, error_message: 'schemas requires pattern') \
160*7c568831SAndroid Build Coastguard Worker    .require(want_regexps, error_message: 'schemas requires regexps')
161*7c568831SAndroid Build Coastguard Workerwant_schemas = want_minimum ? feature.enabled() : feature.allowed()
162*7c568831SAndroid Build Coastguard Worker
163*7c568831SAndroid Build Coastguard Workerfeature = get_option('schematron') \
164*7c568831SAndroid Build Coastguard Worker    .require(want_pattern, error_message: 'schematron requires pattern') \
165*7c568831SAndroid Build Coastguard Worker    .require(want_xpath, error_message: 'schematron requires xpath')
166*7c568831SAndroid Build Coastguard Workerwant_schematron = want_minimum ? feature.enabled() : feature.allowed()
167*7c568831SAndroid Build Coastguard Worker
168*7c568831SAndroid Build Coastguard Workerfeature = get_option('writer') \
169*7c568831SAndroid Build Coastguard Worker    .require(want_output, error_message: 'writer requires output') \
170*7c568831SAndroid Build Coastguard Worker    .require(want_push, error_message: 'writer requires push')
171*7c568831SAndroid Build Coastguard Workerwant_writer = want_minimum ? feature.enabled() : feature.allowed()
172*7c568831SAndroid Build Coastguard Worker
173*7c568831SAndroid Build Coastguard Workerfeature = get_option('xinclude') \
174*7c568831SAndroid Build Coastguard Worker    .require(want_xpath, error_message: 'xinclude requires xpath')
175*7c568831SAndroid Build Coastguard Workerwant_xinclude = want_minimum ? feature.enabled() : feature.allowed()
176*7c568831SAndroid Build Coastguard Worker
177*7c568831SAndroid Build Coastguard Workerfeature = get_option('xptr') \
178*7c568831SAndroid Build Coastguard Worker    .require(want_xpath, error_message: 'xptr requires xpath')
179*7c568831SAndroid Build Coastguard Workerwant_xptr = want_minimum ? feature.enabled() : feature.allowed()
180*7c568831SAndroid Build Coastguard Worker
181*7c568831SAndroid Build Coastguard Workercflags_try = []
182*7c568831SAndroid Build Coastguard Worker
183*7c568831SAndroid Build Coastguard Worker### workaround for native compilers, see configure.ac
184*7c568831SAndroid Build Coastguard Workerif cc.get_argument_syntax() == 'gcc'
185*7c568831SAndroid Build Coastguard Worker    cflags_try += [
186*7c568831SAndroid Build Coastguard Worker        '-Wshadow',
187*7c568831SAndroid Build Coastguard Worker        '-Wpointer-arith',
188*7c568831SAndroid Build Coastguard Worker        '-Wcast-align',
189*7c568831SAndroid Build Coastguard Worker        '-Wwrite-strings',
190*7c568831SAndroid Build Coastguard Worker        '-Wstrict-prototypes',
191*7c568831SAndroid Build Coastguard Worker        '-Wmissing-prototypes',
192*7c568831SAndroid Build Coastguard Worker        '-Wno-long-long',
193*7c568831SAndroid Build Coastguard Worker        '-Wno-format-extra-args',
194*7c568831SAndroid Build Coastguard Worker        '-Wno-array-bounds',
195*7c568831SAndroid Build Coastguard Worker    ]
196*7c568831SAndroid Build Coastguard Worker
197*7c568831SAndroid Build Coastguard Worker    if host_machine.cpu_family() == 'alpha'
198*7c568831SAndroid Build Coastguard Worker        cflags_try += '-mieee'
199*7c568831SAndroid Build Coastguard Worker    endif
200*7c568831SAndroid Build Coastguard Workerelse
201*7c568831SAndroid Build Coastguard Worker    if host_machine.cpu_family() == 'alpha'
202*7c568831SAndroid Build Coastguard Worker        cflags_try += '-ieee'
203*7c568831SAndroid Build Coastguard Worker    elif host_machine.cpu_family() == 'parisc'
204*7c568831SAndroid Build Coastguard Worker        cflags_try += '-Wp,-H30000'
205*7c568831SAndroid Build Coastguard Worker    endif
206*7c568831SAndroid Build Coastguard Workerendif
207*7c568831SAndroid Build Coastguard Worker
208*7c568831SAndroid Build Coastguard Workerforeach cf : cflags_try
209*7c568831SAndroid Build Coastguard Worker    if cc.has_argument(cf)
210*7c568831SAndroid Build Coastguard Worker        libxml2_cflags += cf
211*7c568831SAndroid Build Coastguard Worker    endif
212*7c568831SAndroid Build Coastguard Workerendforeach
213*7c568831SAndroid Build Coastguard Worker
214*7c568831SAndroid Build Coastguard Worker# configuration
215*7c568831SAndroid Build Coastguard Worker#
216*7c568831SAndroid Build Coastguard Worker# X : done
217*7c568831SAndroid Build Coastguard Worker# N : not done
218*7c568831SAndroid Build Coastguard Worker#
219*7c568831SAndroid Build Coastguard Worker# [X] config.h.in
220*7c568831SAndroid Build Coastguard Worker# [X] include/libxml/xmlversion.h.in
221*7c568831SAndroid Build Coastguard Worker# [X] libxml-2.0.pc.in
222*7c568831SAndroid Build Coastguard Worker# [X] libxml2-config.cmake.in
223*7c568831SAndroid Build Coastguard Worker# [X] python/setup.py.in
224*7c568831SAndroid Build Coastguard Worker# [N] xml2-config.in
225*7c568831SAndroid Build Coastguard Worker
226*7c568831SAndroid Build Coastguard Worker## config.h
227*7c568831SAndroid Build Coastguard Workerconfig_h = configuration_data()
228*7c568831SAndroid Build Coastguard Workerconfig_h.set_quoted('PACKAGE_NAME', meson.project_name())
229*7c568831SAndroid Build Coastguard Workerconfig_h.set_quoted('PACKAGE_VERSION', meson.project_version())
230*7c568831SAndroid Build Coastguard Workerconfig_h.set_quoted('PACKAGE_BIN_DIR', dir_bin)
231*7c568831SAndroid Build Coastguard Workerconfig_h.set_quoted('PACKAGE_LIB_DIR', dir_lib)
232*7c568831SAndroid Build Coastguard Workerconfig_h.set_quoted('PACKAGE_DATA_DIR', dir_data)
233*7c568831SAndroid Build Coastguard Workerconfig_h.set_quoted('LOCALEDIR', dir_locale)
234*7c568831SAndroid Build Coastguard Worker
235*7c568831SAndroid Build Coastguard Worker# header files
236*7c568831SAndroid Build Coastguard Workerxml_check_headers = [
237*7c568831SAndroid Build Coastguard Worker    [ 'stdint.h', true ],
238*7c568831SAndroid Build Coastguard Worker    [ 'poll.h', want_http ],
239*7c568831SAndroid Build Coastguard Worker]
240*7c568831SAndroid Build Coastguard Worker
241*7c568831SAndroid Build Coastguard Workerforeach header : xml_check_headers
242*7c568831SAndroid Build Coastguard Worker    if header[1] and cc.has_header(header[0])
243*7c568831SAndroid Build Coastguard Worker        config_h.set10('HAVE_' + header[0].underscorify().to_upper(), true)
244*7c568831SAndroid Build Coastguard Worker    endif
245*7c568831SAndroid Build Coastguard Workerendforeach
246*7c568831SAndroid Build Coastguard Worker
247*7c568831SAndroid Build Coastguard Worker# library functions
248*7c568831SAndroid Build Coastguard Workerxml_check_functions = [
249*7c568831SAndroid Build Coastguard Worker    # fct             | header
250*7c568831SAndroid Build Coastguard Worker    ['getentropy', 'sys/random.h'],
251*7c568831SAndroid Build Coastguard Worker    ['glob', 'glob.h'],
252*7c568831SAndroid Build Coastguard Worker    ['mmap', 'sys/mman.h'],
253*7c568831SAndroid Build Coastguard Worker]
254*7c568831SAndroid Build Coastguard Worker
255*7c568831SAndroid Build Coastguard Workerforeach function : xml_check_functions
256*7c568831SAndroid Build Coastguard Worker    config_h.set10('HAVE_DECL_' + function[0].underscorify().to_upper(),
257*7c568831SAndroid Build Coastguard Worker                   cc.has_header_symbol(function[1], function[0]))
258*7c568831SAndroid Build Coastguard Workerendforeach
259*7c568831SAndroid Build Coastguard Worker
260*7c568831SAndroid Build Coastguard Worker# library
261*7c568831SAndroid Build Coastguard Worker
262*7c568831SAndroid Build Coastguard Workerconfig_dir = [include_directories('.'), include_directories('include')]
263*7c568831SAndroid Build Coastguard Worker
264*7c568831SAndroid Build Coastguard Worker## dependencies
265*7c568831SAndroid Build Coastguard Worker
266*7c568831SAndroid Build Coastguard Workerxml_deps = []
267*7c568831SAndroid Build Coastguard Worker
268*7c568831SAndroid Build Coastguard Worker### math library
269*7c568831SAndroid Build Coastguard Workerif sys_windows == false
270*7c568831SAndroid Build Coastguard Worker    m_dep = cc.find_library('m', required: false)
271*7c568831SAndroid Build Coastguard Worker    if m_dep.found()
272*7c568831SAndroid Build Coastguard Worker        xml_deps += m_dep
273*7c568831SAndroid Build Coastguard Worker    endif
274*7c568831SAndroid Build Coastguard Workerendif
275*7c568831SAndroid Build Coastguard Worker
276*7c568831SAndroid Build Coastguard Worker### thread local storage
277*7c568831SAndroid Build Coastguard Workerif want_tls
278*7c568831SAndroid Build Coastguard Worker    foreach t : ['_Thread_local', '__thread', '__declspec(thread)']
279*7c568831SAndroid Build Coastguard Worker        if cc.compiles('@0@ int v;'.format(t))
280*7c568831SAndroid Build Coastguard Worker            config_h.set('XML_THREAD_LOCAL', t)
281*7c568831SAndroid Build Coastguard Worker            break
282*7c568831SAndroid Build Coastguard Worker        endif
283*7c568831SAndroid Build Coastguard Worker    endforeach
284*7c568831SAndroid Build Coastguard Workerendif
285*7c568831SAndroid Build Coastguard Worker
286*7c568831SAndroid Build Coastguard Worker### __attribute__((destructor))
287*7c568831SAndroid Build Coastguard Workerif cc.has_function_attribute('destructor')
288*7c568831SAndroid Build Coastguard Worker    config_h.set10('HAVE_FUNC_ATTRIBUTE_DESTRUCTOR', true)
289*7c568831SAndroid Build Coastguard Workerendif
290*7c568831SAndroid Build Coastguard Worker
291*7c568831SAndroid Build Coastguard Worker### DSO support
292*7c568831SAndroid Build Coastguard Workerif sys_cygwin == true
293*7c568831SAndroid Build Coastguard Worker    module_extension = '.dll'
294*7c568831SAndroid Build Coastguard Workerelif sys_windows == true
295*7c568831SAndroid Build Coastguard Worker    module_extension = '.dll'
296*7c568831SAndroid Build Coastguard Workerelse
297*7c568831SAndroid Build Coastguard Worker    module_extension = '.so'
298*7c568831SAndroid Build Coastguard Workerendif
299*7c568831SAndroid Build Coastguard Worker
300*7c568831SAndroid Build Coastguard Workerif want_modules and host_machine.system() != 'windows'
301*7c568831SAndroid Build Coastguard Worker    if meson.version().version_compare('>=0.62')
302*7c568831SAndroid Build Coastguard Worker        dl_dep = dependency('dl', required: false)
303*7c568831SAndroid Build Coastguard Worker    else
304*7c568831SAndroid Build Coastguard Worker        dl_dep = cc.find_library('dl', required: false)
305*7c568831SAndroid Build Coastguard Worker    endif
306*7c568831SAndroid Build Coastguard Worker    if dl_dep.found()
307*7c568831SAndroid Build Coastguard Worker        config_h.set10('HAVE_DLOPEN', true)
308*7c568831SAndroid Build Coastguard Worker        xml_deps += dl_dep
309*7c568831SAndroid Build Coastguard Worker    endif
310*7c568831SAndroid Build Coastguard Workerendif
311*7c568831SAndroid Build Coastguard Worker
312*7c568831SAndroid Build Coastguard Worker### threads
313*7c568831SAndroid Build Coastguard Workerif want_threads
314*7c568831SAndroid Build Coastguard Worker    threads_dep = dependency('threads')
315*7c568831SAndroid Build Coastguard Worker    xml_deps += threads_dep
316*7c568831SAndroid Build Coastguard Workerelse
317*7c568831SAndroid Build Coastguard Worker    threads_dep = dependency('', required: false)
318*7c568831SAndroid Build Coastguard Workerendif
319*7c568831SAndroid Build Coastguard Worker
320*7c568831SAndroid Build Coastguard Worker### xmllint shell history
321*7c568831SAndroid Build Coastguard Workerxmllint_deps = []
322*7c568831SAndroid Build Coastguard Worker
323*7c568831SAndroid Build Coastguard Workerif want_readline
324*7c568831SAndroid Build Coastguard Worker    readline_dep = dependency('readline')
325*7c568831SAndroid Build Coastguard Worker    config_h.set('HAVE_LIBREADLINE', true)
326*7c568831SAndroid Build Coastguard Worker    xmllint_deps += readline_dep
327*7c568831SAndroid Build Coastguard Workerendif
328*7c568831SAndroid Build Coastguard Worker
329*7c568831SAndroid Build Coastguard Workerif want_history
330*7c568831SAndroid Build Coastguard Worker    history_dep = dependency('history')
331*7c568831SAndroid Build Coastguard Worker    config_h.set('HAVE_LIBHISTORY', true)
332*7c568831SAndroid Build Coastguard Worker    xmllint_deps += history_dep
333*7c568831SAndroid Build Coastguard Workerendif
334*7c568831SAndroid Build Coastguard Worker
335*7c568831SAndroid Build Coastguard Worker### crypto
336*7c568831SAndroid Build Coastguard Workerif sys_windows == true
337*7c568831SAndroid Build Coastguard Worker    bcrypt_dep = cc.find_library('bcrypt', required: true)
338*7c568831SAndroid Build Coastguard Worker    xml_deps += bcrypt_dep
339*7c568831SAndroid Build Coastguard Workerendif
340*7c568831SAndroid Build Coastguard Worker
341*7c568831SAndroid Build Coastguard Worker### inet
342*7c568831SAndroid Build Coastguard Workerif want_http == true
343*7c568831SAndroid Build Coastguard Worker    if sys_windows == true
344*7c568831SAndroid Build Coastguard Worker        net_dep = cc.find_library('ws2_32', required: true)
345*7c568831SAndroid Build Coastguard Worker        xml_deps += net_dep
346*7c568831SAndroid Build Coastguard Worker    else
347*7c568831SAndroid Build Coastguard Worker        net_dep = dependency('', required: false)
348*7c568831SAndroid Build Coastguard Worker        has_in_libc = cc.has_function('gethostbyname')
349*7c568831SAndroid Build Coastguard Worker        if has_in_libc == false
350*7c568831SAndroid Build Coastguard Worker            net_dep = cc.find_library('nsl', required: true)
351*7c568831SAndroid Build Coastguard Worker            if net_dep.found()
352*7c568831SAndroid Build Coastguard Worker                has_in_nsl = cc.has_function(
353*7c568831SAndroid Build Coastguard Worker                    'gethostbyname',
354*7c568831SAndroid Build Coastguard Worker                    dependencies: net_dep,
355*7c568831SAndroid Build Coastguard Worker                    required: false,
356*7c568831SAndroid Build Coastguard Worker                )
357*7c568831SAndroid Build Coastguard Worker                if has_in_nsl == true
358*7c568831SAndroid Build Coastguard Worker                    xml_deps += net_dep
359*7c568831SAndroid Build Coastguard Worker                endif
360*7c568831SAndroid Build Coastguard Worker            endif
361*7c568831SAndroid Build Coastguard Worker        endif
362*7c568831SAndroid Build Coastguard Worker    endif
363*7c568831SAndroid Build Coastguard Workerendif
364*7c568831SAndroid Build Coastguard Worker
365*7c568831SAndroid Build Coastguard Worker### zlib
366*7c568831SAndroid Build Coastguard Workerif want_zlib
367*7c568831SAndroid Build Coastguard Worker    xml_deps += dependency('zlib')
368*7c568831SAndroid Build Coastguard Workerendif
369*7c568831SAndroid Build Coastguard Worker
370*7c568831SAndroid Build Coastguard Worker### lzma
371*7c568831SAndroid Build Coastguard Workerif want_lzma
372*7c568831SAndroid Build Coastguard Worker    xml_deps += dependency('liblzma')
373*7c568831SAndroid Build Coastguard Workerendif
374*7c568831SAndroid Build Coastguard Worker
375*7c568831SAndroid Build Coastguard Worker# icu
376*7c568831SAndroid Build Coastguard Workerif want_icu
377*7c568831SAndroid Build Coastguard Worker    icu_dep = dependency('icu-i18n', method: 'pkg-config')
378*7c568831SAndroid Build Coastguard Worker    defs = icu_dep.get_variable(pkgconfig: 'DEFS')
379*7c568831SAndroid Build Coastguard Worker    if cc.has_argument(defs)
380*7c568831SAndroid Build Coastguard Worker        libxml2_cflags += defs
381*7c568831SAndroid Build Coastguard Worker    endif
382*7c568831SAndroid Build Coastguard Worker    xml_deps += icu_dep
383*7c568831SAndroid Build Coastguard Workerendif
384*7c568831SAndroid Build Coastguard Worker
385*7c568831SAndroid Build Coastguard Worker### iconv
386*7c568831SAndroid Build Coastguard Workerif want_iconv
387*7c568831SAndroid Build Coastguard Worker    xml_deps += dependency('iconv')
388*7c568831SAndroid Build Coastguard Workerendif
389*7c568831SAndroid Build Coastguard Worker
390*7c568831SAndroid Build Coastguard Workersubdir('include/libxml')
391*7c568831SAndroid Build Coastguard Worker
392*7c568831SAndroid Build Coastguard Worker# Set config_h after all subdirs and dependencies have set values
393*7c568831SAndroid Build Coastguard Worker
394*7c568831SAndroid Build Coastguard Workerconfigure_file(output: 'config.h', configuration: config_h)
395*7c568831SAndroid Build Coastguard Worker
396*7c568831SAndroid Build Coastguard Worker## libxml2 library
397*7c568831SAndroid Build Coastguard Worker
398*7c568831SAndroid Build Coastguard Workerxml_src = [
399*7c568831SAndroid Build Coastguard Worker    'buf.c',
400*7c568831SAndroid Build Coastguard Worker    'chvalid.c',
401*7c568831SAndroid Build Coastguard Worker    'dict.c',
402*7c568831SAndroid Build Coastguard Worker    'entities.c',
403*7c568831SAndroid Build Coastguard Worker    'encoding.c',
404*7c568831SAndroid Build Coastguard Worker    'error.c',
405*7c568831SAndroid Build Coastguard Worker    'globals.c',
406*7c568831SAndroid Build Coastguard Worker    'hash.c',
407*7c568831SAndroid Build Coastguard Worker    'list.c',
408*7c568831SAndroid Build Coastguard Worker    'parser.c',
409*7c568831SAndroid Build Coastguard Worker    'parserInternals.c',
410*7c568831SAndroid Build Coastguard Worker    'SAX2.c',
411*7c568831SAndroid Build Coastguard Worker    'threads.c',
412*7c568831SAndroid Build Coastguard Worker    'tree.c',
413*7c568831SAndroid Build Coastguard Worker    'uri.c',
414*7c568831SAndroid Build Coastguard Worker    'valid.c',
415*7c568831SAndroid Build Coastguard Worker    'xmlIO.c',
416*7c568831SAndroid Build Coastguard Worker    'xmlmemory.c',
417*7c568831SAndroid Build Coastguard Worker    'xmlstring.c',
418*7c568831SAndroid Build Coastguard Worker]
419*7c568831SAndroid Build Coastguard Worker
420*7c568831SAndroid Build Coastguard Workerxml_opt_src = [
421*7c568831SAndroid Build Coastguard Worker    [want_c14n, ['c14n.c']],
422*7c568831SAndroid Build Coastguard Worker    [want_catalog, ['catalog.c']],
423*7c568831SAndroid Build Coastguard Worker    [want_debug, ['debugXML.c']],
424*7c568831SAndroid Build Coastguard Worker    [want_html, ['HTMLparser.c', 'HTMLtree.c']],
425*7c568831SAndroid Build Coastguard Worker    [want_http, ['nanohttp.c']],
426*7c568831SAndroid Build Coastguard Worker    [want_legacy, ['legacy.c']],
427*7c568831SAndroid Build Coastguard Worker    [want_lzma, ['xzlib.c']],
428*7c568831SAndroid Build Coastguard Worker    [want_modules, ['xmlmodule.c']],
429*7c568831SAndroid Build Coastguard Worker    [want_output, ['xmlsave.c']],
430*7c568831SAndroid Build Coastguard Worker    [want_pattern, ['pattern.c']],
431*7c568831SAndroid Build Coastguard Worker    [want_reader, ['xmlreader.c']],
432*7c568831SAndroid Build Coastguard Worker    [want_regexps, ['xmlregexp.c', 'xmlunicode.c']],
433*7c568831SAndroid Build Coastguard Worker    [want_schemas, ['relaxng.c', 'xmlschemas.c', 'xmlschemastypes.c']],
434*7c568831SAndroid Build Coastguard Worker    [want_schemas and not want_xpath, ['xpath.c']],
435*7c568831SAndroid Build Coastguard Worker    [want_schematron, ['schematron.c']],
436*7c568831SAndroid Build Coastguard Worker    [want_writer, ['xmlwriter.c']],
437*7c568831SAndroid Build Coastguard Worker    [want_xinclude, ['xinclude.c']],
438*7c568831SAndroid Build Coastguard Worker    [want_xpath, ['xpath.c']],
439*7c568831SAndroid Build Coastguard Worker    [want_xptr, ['xlink.c', 'xpointer.c']],
440*7c568831SAndroid Build Coastguard Worker]
441*7c568831SAndroid Build Coastguard Worker
442*7c568831SAndroid Build Coastguard Workerforeach file : xml_opt_src
443*7c568831SAndroid Build Coastguard Worker    want = file[0]
444*7c568831SAndroid Build Coastguard Worker    src = file[1]
445*7c568831SAndroid Build Coastguard Worker    if want == true
446*7c568831SAndroid Build Coastguard Worker        if src.length() > 1
447*7c568831SAndroid Build Coastguard Worker            foreach s : src
448*7c568831SAndroid Build Coastguard Worker                xml_src += s
449*7c568831SAndroid Build Coastguard Worker            endforeach
450*7c568831SAndroid Build Coastguard Worker        else
451*7c568831SAndroid Build Coastguard Worker            xml_src += src
452*7c568831SAndroid Build Coastguard Worker        endif
453*7c568831SAndroid Build Coastguard Worker    endif
454*7c568831SAndroid Build Coastguard Workerendforeach
455*7c568831SAndroid Build Coastguard Worker
456*7c568831SAndroid Build Coastguard Workerv_min_compat = 0
457*7c568831SAndroid Build Coastguard Workerxml_lib = library(
458*7c568831SAndroid Build Coastguard Worker    'xml2',
459*7c568831SAndroid Build Coastguard Worker    files(xml_src),
460*7c568831SAndroid Build Coastguard Worker    c_args: libxml2_cflags,
461*7c568831SAndroid Build Coastguard Worker    dependencies: xml_deps,
462*7c568831SAndroid Build Coastguard Worker    include_directories: config_dir,
463*7c568831SAndroid Build Coastguard Worker    install: true,
464*7c568831SAndroid Build Coastguard Worker    version: meson.project_version(),
465*7c568831SAndroid Build Coastguard Worker    soversion: v_maj + v_min_compat,
466*7c568831SAndroid Build Coastguard Worker)
467*7c568831SAndroid Build Coastguard Worker
468*7c568831SAndroid Build Coastguard Workerdep_inc = include_directories('include')
469*7c568831SAndroid Build Coastguard Workerxml_dep = declare_dependency(include_directories: dep_inc, link_with: xml_lib, compile_args: dep_args)
470*7c568831SAndroid Build Coastguard Worker
471*7c568831SAndroid Build Coastguard Workermeson.override_dependency('libxml-2.0', xml_dep)
472*7c568831SAndroid Build Coastguard Worker
473*7c568831SAndroid Build Coastguard Worker## xmllint tool
474*7c568831SAndroid Build Coastguard Worker
475*7c568831SAndroid Build Coastguard Workerexecutable(
476*7c568831SAndroid Build Coastguard Worker    'xmllint',
477*7c568831SAndroid Build Coastguard Worker    files('xmllint.c', 'shell.c'),
478*7c568831SAndroid Build Coastguard Worker    dependencies: [xml_dep, xmllint_deps],
479*7c568831SAndroid Build Coastguard Worker    include_directories: config_dir,
480*7c568831SAndroid Build Coastguard Worker    install: true,
481*7c568831SAndroid Build Coastguard Worker)
482*7c568831SAndroid Build Coastguard Worker
483*7c568831SAndroid Build Coastguard Worker## xmlcatalog tool
484*7c568831SAndroid Build Coastguard Worker
485*7c568831SAndroid Build Coastguard Workerexecutable(
486*7c568831SAndroid Build Coastguard Worker    'xmlcatalog',
487*7c568831SAndroid Build Coastguard Worker    files('xmlcatalog.c'),
488*7c568831SAndroid Build Coastguard Worker    dependencies: [xml_dep, xmllint_deps],
489*7c568831SAndroid Build Coastguard Worker    include_directories: config_dir,
490*7c568831SAndroid Build Coastguard Worker    install: true,
491*7c568831SAndroid Build Coastguard Worker)
492*7c568831SAndroid Build Coastguard Worker
493*7c568831SAndroid Build Coastguard Worker## testdso module
494*7c568831SAndroid Build Coastguard Worker
495*7c568831SAndroid Build Coastguard Workertestdso_mod = shared_module(
496*7c568831SAndroid Build Coastguard Worker    'testdso',
497*7c568831SAndroid Build Coastguard Worker    files('testdso.c'),
498*7c568831SAndroid Build Coastguard Worker    build_rpath: get_option('libdir'),
499*7c568831SAndroid Build Coastguard Worker    include_directories: config_dir,
500*7c568831SAndroid Build Coastguard Worker    name_prefix: '',
501*7c568831SAndroid Build Coastguard Worker)
502*7c568831SAndroid Build Coastguard Worker
503*7c568831SAndroid Build Coastguard Worker## tests
504*7c568831SAndroid Build Coastguard Worker
505*7c568831SAndroid Build Coastguard Workerchecks = {
506*7c568831SAndroid Build Coastguard Worker    'runsuite': [],
507*7c568831SAndroid Build Coastguard Worker    'runtest': threads_dep,
508*7c568831SAndroid Build Coastguard Worker    'runxmlconf': [],
509*7c568831SAndroid Build Coastguard Worker# Disabled for now, see #694
510*7c568831SAndroid Build Coastguard Worker#    'testModule': [],
511*7c568831SAndroid Build Coastguard Worker    'testapi': [],
512*7c568831SAndroid Build Coastguard Worker    'testchar': [],
513*7c568831SAndroid Build Coastguard Worker    'testdict': [],
514*7c568831SAndroid Build Coastguard Worker    'testlimits': [],
515*7c568831SAndroid Build Coastguard Worker    'testparser': [],
516*7c568831SAndroid Build Coastguard Worker    'testrecurse': [],
517*7c568831SAndroid Build Coastguard Worker}
518*7c568831SAndroid Build Coastguard Worker
519*7c568831SAndroid Build Coastguard Workerforeach check, deps : checks
520*7c568831SAndroid Build Coastguard Worker    exe = executable(
521*7c568831SAndroid Build Coastguard Worker        check,
522*7c568831SAndroid Build Coastguard Worker        files(check + '.c'),
523*7c568831SAndroid Build Coastguard Worker        dependencies: [deps, xml_dep],
524*7c568831SAndroid Build Coastguard Worker        include_directories: config_dir,
525*7c568831SAndroid Build Coastguard Worker    )
526*7c568831SAndroid Build Coastguard Worker    if check != 'testlimits'
527*7c568831SAndroid Build Coastguard Worker        test(check, exe, timeout: 0, workdir: meson.current_source_dir())
528*7c568831SAndroid Build Coastguard Worker    endif
529*7c568831SAndroid Build Coastguard Workerendforeach
530*7c568831SAndroid Build Coastguard Worker
531*7c568831SAndroid Build Coastguard Workersubdir('example')
532*7c568831SAndroid Build Coastguard Workersubdir('doc')
533*7c568831SAndroid Build Coastguard Worker
534*7c568831SAndroid Build Coastguard Workerif want_python == true
535*7c568831SAndroid Build Coastguard Worker    subdir('python')
536*7c568831SAndroid Build Coastguard Workerendif
537*7c568831SAndroid Build Coastguard Worker
538*7c568831SAndroid Build Coastguard Worker## pc files
539*7c568831SAndroid Build Coastguard Worker
540*7c568831SAndroid Build Coastguard Workerpkgmod = import('pkgconfig')
541*7c568831SAndroid Build Coastguard Worker
542*7c568831SAndroid Build Coastguard Workerpkgmod.generate(
543*7c568831SAndroid Build Coastguard Worker    xml_lib,
544*7c568831SAndroid Build Coastguard Worker    description: 'libXML library version2.',
545*7c568831SAndroid Build Coastguard Worker    filebase: 'libxml-2.0',
546*7c568831SAndroid Build Coastguard Worker    name: 'libXML',
547*7c568831SAndroid Build Coastguard Worker    subdirs:  [meson.project_name()],
548*7c568831SAndroid Build Coastguard Worker    variables: 'modules=' + want_modules.to_string('1', '0'),
549*7c568831SAndroid Build Coastguard Worker)
550*7c568831SAndroid Build Coastguard Worker
551*7c568831SAndroid Build Coastguard Worker## libxml2-config.cmake file
552*7c568831SAndroid Build Coastguard Worker
553*7c568831SAndroid Build Coastguard Workerconfig_cmake = configuration_data()
554*7c568831SAndroid Build Coastguard Workerconfig_cmake.set('LIBXML_MAJOR_VERSION', v_maj)
555*7c568831SAndroid Build Coastguard Workerconfig_cmake.set('LIBXML_MINOR_VERSION', v_min)
556*7c568831SAndroid Build Coastguard Workerconfig_cmake.set('LIBXML_MICRO_VERSION', v_mic)
557*7c568831SAndroid Build Coastguard Workerconfig_cmake.set('VERSION', meson.project_version())
558*7c568831SAndroid Build Coastguard Workerconfig_cmake.set('WITH_ICONV', want_iconv.to_int().to_string())
559*7c568831SAndroid Build Coastguard Workerconfig_cmake.set('WITH_ICU', want_icu.to_int().to_string())
560*7c568831SAndroid Build Coastguard Workerconfig_cmake.set('WITH_LZMA', want_lzma.to_int().to_string())
561*7c568831SAndroid Build Coastguard Workerconfig_cmake.set('WITH_MODULES', want_modules.to_int().to_string())
562*7c568831SAndroid Build Coastguard Workerconfig_cmake.set('WITH_THREADS', want_threads.to_int().to_string())
563*7c568831SAndroid Build Coastguard Workerconfig_cmake.set('WITH_ZLIB', want_zlib.to_int().to_string())
564*7c568831SAndroid Build Coastguard Workerconfig_cmake.set('XML_CFLAGS', xml_cflags)
565*7c568831SAndroid Build Coastguard Workerconfigure_file(
566*7c568831SAndroid Build Coastguard Worker    input: 'libxml2-config.cmake.in',
567*7c568831SAndroid Build Coastguard Worker    output: 'libxml2-config.cmake',
568*7c568831SAndroid Build Coastguard Worker    configuration: config_cmake,
569*7c568831SAndroid Build Coastguard Worker    install_dir: dir_lib / 'cmake' / 'libxml2',
570*7c568831SAndroid Build Coastguard Worker)
571*7c568831SAndroid Build Coastguard Worker
572*7c568831SAndroid Build Coastguard Worker# summary
573*7c568831SAndroid Build Coastguard Worker
574*7c568831SAndroid Build Coastguard Workersummary(
575*7c568831SAndroid Build Coastguard Worker    {
576*7c568831SAndroid Build Coastguard Worker        'OS': host_os,
577*7c568831SAndroid Build Coastguard Worker        'c14n': want_c14n,
578*7c568831SAndroid Build Coastguard Worker        'catalog': want_catalog,
579*7c568831SAndroid Build Coastguard Worker        'debug': want_debug,
580*7c568831SAndroid Build Coastguard Worker        'history': want_history,
581*7c568831SAndroid Build Coastguard Worker        'html': want_html,
582*7c568831SAndroid Build Coastguard Worker        'http': want_http,
583*7c568831SAndroid Build Coastguard Worker        'iconv': want_iconv,
584*7c568831SAndroid Build Coastguard Worker        'icu': want_icu,
585*7c568831SAndroid Build Coastguard Worker        'iso8859x': want_iso8859x,
586*7c568831SAndroid Build Coastguard Worker        'legacy': want_legacy,
587*7c568831SAndroid Build Coastguard Worker        'lzma': want_lzma,
588*7c568831SAndroid Build Coastguard Worker        'modules': want_modules,
589*7c568831SAndroid Build Coastguard Worker        'output': want_output,
590*7c568831SAndroid Build Coastguard Worker        'pattern': want_pattern,
591*7c568831SAndroid Build Coastguard Worker        'push': want_push,
592*7c568831SAndroid Build Coastguard Worker        'python': want_python,
593*7c568831SAndroid Build Coastguard Worker        'reader': want_reader,
594*7c568831SAndroid Build Coastguard Worker        'readline': want_readline,
595*7c568831SAndroid Build Coastguard Worker        'regexps': want_regexps,
596*7c568831SAndroid Build Coastguard Worker        'sax1': want_sax1,
597*7c568831SAndroid Build Coastguard Worker        'schemas': want_schemas,
598*7c568831SAndroid Build Coastguard Worker        'schematron': want_schematron,
599*7c568831SAndroid Build Coastguard Worker        'threads': want_threads,
600*7c568831SAndroid Build Coastguard Worker        'thread-alloc': want_thread_alloc,
601*7c568831SAndroid Build Coastguard Worker        'tls': want_tls,
602*7c568831SAndroid Build Coastguard Worker        'valid': want_valid,
603*7c568831SAndroid Build Coastguard Worker        'writer': want_writer,
604*7c568831SAndroid Build Coastguard Worker        'xinclude': want_xinclude,
605*7c568831SAndroid Build Coastguard Worker        'xpath': want_xpath,
606*7c568831SAndroid Build Coastguard Worker        'xptr': want_xptr,
607*7c568831SAndroid Build Coastguard Worker        'zlib': want_zlib,
608*7c568831SAndroid Build Coastguard Worker    },
609*7c568831SAndroid Build Coastguard Worker    section: 'Configuration Options Summary:',
610*7c568831SAndroid Build Coastguard Worker)
611