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