rizin/subprojects/packagefiles/xz-5.2.9/meson.build
amibranch 8e6b764fb5
build: Improved meson-build to use rizin as subproject (#4684)
* Setting GNU99/C99 standard for subprojects
* Remove use of `add_global_arguments`
* Added extern "C" linkage specification to some public headers of rizin
* Changed the meson_git_wrapper.py-script to explicitly specify the output-path
* Made the RIZIN_BUILD_PATH conditional in the integration-test meson-build

Co-authored-by: amibranch <amibranch@users.noreply.github.com>
2024-10-29 23:59:42 +08:00

188 lines
5.2 KiB
Meson

# liblzma is what upstream uses for their pkg-config name
project('liblzma', 'c',
version : '5.4.3',
license : ['PD', 'LGPL2', 'GPL2', 'GPL3'],
meson_version: '>=0.55.0',
)
cc = meson.get_compiler('c')
if cc.has_argument('--std=gnu99')
add_project_arguments('--std=gnu99', language: ['c'])
elif cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif
lzma_cflags = ['-DHAVE_CONFIG_H', '-DTUKLIB_SYMBOL_PREFIX=lzma_', '-DLZMA_API_STATIC']
cdata = configuration_data()
check_headers = [
'byteswap.h',
'CommonCrypto/CommonDigest.h',
'dlfcn.h',
'fcntl.h',
'getopt.h',
'inttypes.h',
'limits.h',
'memory.h',
'minix/sha2.h',
'sha256.h',
'sha2.h',
'stdbool.h',
'stdint.h',
'stdlib.h',
'string.h',
'strings.h',
'sys/byteorder.h',
'sys/endian.h',
'sys/param.h',
'sys/stat.h',
'sys/time.h',
'sys/types.h',
'unistd.h',
]
# non x86 architectures would fail to compile if this is included, because it
# includes x86 specific code
if host_machine.cpu_family().startswith('x86')
check_headers += ['immintrin.h']
endif
check_coders = [['decoder_arm', 'HAVE_DECODER_ARM'],
['decoder_armthumb', 'HAVE_DECODER_ARMTHUMB'],
['decoder_delta', 'HAVE_DECODER_DELTA'],
['decoder_ia64', 'HAVE_DECODER_IA64'],
['decoder_lzma1', 'HAVE_DECODER_LZMA1'],
['decoder_lzma2', 'HAVE_DECODER_LZMA2'],
['decoder_powerpc', 'HAVE_DECODER_POWERPC'],
['decoder_sparc', 'HAVE_DECODER_SPARC'],
['decoder_x86', 'HAVE_DECODER_X86'],
['encoder_arm', 'HAVE_ENCODER_ARM'],
['encoder_armthumb', 'HAVE_ENCODER_ARMTHUMB'],
['encoder_delta', 'HAVE_ENCODER_DELTA'],
['encoder_ia64', 'HAVE_ENCODER_IA64'],
['encoder_lzma1', 'HAVE_ENCODER_LZMA1'],
['encoder_lzma2', 'HAVE_ENCODER_LZMA2'],
['encoder_powerpc', 'HAVE_ENCODER_POWERPC'],
['encoder_sparc', 'HAVE_ENCODER_SPARC'],
['encoder_x86', 'HAVE_ENCODER_X86']
]
check_members = [
['struct stat', 'st_atim.tv_nsec', '#include <sys/stat.h>'],
['struct stat', 'st_atimespec.tv_nsec', '#include <sys/stat.h>'],
['struct stat', 'st_atimensec', '#include <sys/stat.h>'],
['struct stat', 'st_uatime', '#include <sys/stat.h>'],
['struct stat', 'st_atim.st__tim.tv_nsec', '#include <sys/stat.h>'],
]
check_functions = [
'wcwidth',
'_futime',
'futimens',
'getopt_long',
'mbrtowc',
'posix_fadvise',
]
check_types = [
['_Bool', ''],
['mbstate_t', '#include <wchar.h>'],
['uintptr_t', '#include <stdint.h>'],
]
if (get_option('decoder_arm') or get_option('decoder_armthumb') or
get_option('decoder_delta') or get_option('decoder_ia64') or
get_option('decoder_lzma1') or get_option('decoder_lzma2') or
get_option('decoder_powerpc') or get_option('decoder_x86'))
cdata.set('HAVE_DECODERS', 1)
endif
if (get_option('encoder_arm') or get_option('encoder_armthumb') or
get_option('encoder_delta') or get_option('encoder_ia64') or
get_option('encoder_lzma1') or get_option('encoder_lzma2') or
get_option('encoder_powerpc') or get_option('encoder_x86'))
cdata.set('HAVE_ENCODERS', 1)
endif
foreach i : check_headers
if cc.has_header(i)
cdata.set('HAVE_' + i.underscorify().to_upper(), 1)
endif
endforeach
foreach i : check_coders
if get_option(i.get(0))
cdata.set(i.get(1), 1)
endif
endforeach
foreach i : check_functions
if cc.has_function(i)
cdata.set('HAVE_@0@'.format(i.underscorify().to_upper()), 1)
endif
endforeach
foreach i : check_members
struct_name = i.get(0)
member_name = i.get(1)
prefix = i.get(2)
if cc.has_member(struct_name, member_name, prefix: prefix)
cdata.set('HAVE_@0@_@1@'.format(struct_name.underscorify().to_upper(), member_name.underscorify().to_upper()), 1)
endif
endforeach
foreach i : check_types
prefix = i.get(1)
if cc.has_type(i.get(0), prefix: prefix)
cdata.set('HAVE_@0@'.format(i.get(0).underscorify().to_upper()), 1)
endif
endforeach
cdata.set('SIZEOF_SIZE_T', cc.sizeof('size_t'))
cdata.set('PACKAGE_NAME', '"liblzma"')
cdata.set('PACKAGE_URL', '"http://tukaani.org/xz/"')
cdata.set('PACKAGE_BUGREPORT', '"x@x"')
cdata.set('PACKAGE', '"xz"')
cdata.set_quoted('PACKAGE_VERSION', meson.project_version())
cdata.set_quoted('VERSION', meson.project_version())
cdata.set('ASSUME_RAM', 128)
cdata.set('HAVE_CHECK_CRC32', 1)
cdata.set('HAVE_CHECK_CRC64', 1)
cdata.set('HAVE_CHECK_SHA256', 1)
cdata.set('_GNU_SOURCE', 1)
cdata.set('_ALL_SOURCE', 1)
cdata.set('HAVE_MF_BT2', 1)
cdata.set('HAVE_MF_BT3', 1)
cdata.set('HAVE_MF_BT4', 1)
cdata.set('HAVE_MF_HC3', 1)
cdata.set('HAVE_MF_HC4', 1)
has_sysconf_cpu = cc.compiles('''#include <unistd.h>
int main(int argc, char *argv[]) { return sysconf(_SC_NPROCESSORS_ONLN); }''')
if not has_sysconf_cpu
has_sysconf_cpu = cc.compiles('''#include <unistd.h>
int main(int argc, char *argv[]) { return sysconf(_SC_NPROC_ONLN); }''')
endif
cdata.set('TUKLIB_CPUCORES_SYSCONF', has_sysconf_cpu)
has_stdc_hdr = cc.compiles('''#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <float.h>
int main(int argc, char **argv) { return 0; }
''')
cdata.set('STDC_HEADERS', has_stdc_hdr)
cdata.set('WORDS_BIGENDIAN', host_machine.endian() == 'big')
configure_file(input : 'config.h.meson',
output : 'config.h',
configuration : cdata
)
confinc = include_directories('.')
subdir('src')