rizin/subprojects/packagefiles/libmspack/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

133 lines
4.1 KiB
Meson

project('libmspack', 'c',
version: '0.10.1alpha',
license : 'LGPL2',
meson_version: '>=0.55.0',
)
cc = meson.get_compiler('c')
if cc.has_argument('--std=c99')
add_project_arguments('--std=c99', language: ['c'])
endif
# handle libmspack dependency
libmspack_files = [
'libmspack' / 'mspack' / 'cabc.c',
'libmspack' / 'mspack' / 'cabd.c',
'libmspack' / 'mspack' / 'chmc.c',
'libmspack' / 'mspack' / 'chmd.c',
'libmspack' / 'mspack' / 'crc32.c',
'libmspack' / 'mspack' / 'hlpc.c',
'libmspack' / 'mspack' / 'hlpd.c',
'libmspack' / 'mspack' / 'kwajc.c',
'libmspack' / 'mspack' / 'kwajd.c',
'libmspack' / 'mspack' / 'litc.c',
'libmspack' / 'mspack' / 'litd.c',
'libmspack' / 'mspack' / 'lzssd.c',
'libmspack' / 'mspack' / 'lzxc.c',
'libmspack' / 'mspack' / 'lzxd.c',
'libmspack' / 'mspack' / 'mszipc.c',
'libmspack' / 'mspack' / 'mszipd.c',
'libmspack' / 'mspack' / 'oabc.c',
'libmspack' / 'mspack' / 'oabd.c',
'libmspack' / 'mspack' / 'qtmc.c',
'libmspack' / 'mspack' / 'qtmd.c',
'libmspack' / 'mspack' / 'system.c',
'libmspack' / 'mspack' / 'szddc.c',
'libmspack' / 'mspack' / 'szddd.c',
]
config_data = configuration_data()
if get_option('debug_prints')
debug_c = 'libmspack' / 'mspack' / 'debug.c'
libmspack_files += debug_c
config_data.set('DEBUG', 1)
else
config_data.set('DEBUG', 0)
endif
# check on headers
foreach item : [
['dlfcn.h', '', [], 'HAVE_DLFCN_H'],
['inttypes.h', '', [], 'HAVE_INTTYPES_H'],
['stdint.h', '', [], 'HAVE_STDINT_H'],
['stdio.h', '', [], 'HAVE_STDIO_H'],
['stdlib.h', '', [], 'HAVE_STDLIB_H'],
['strings.h', '', [], 'HAVE_STRINGS_H'],
['string.h', '', [], 'HAVE_STRING_H'],
['sys/stat.h', '', [], 'HAVE_SYS_STAT_H'],
['sys/types.h', '', [], 'HAVE_SYS_TYPES_H'],
['unistd.h', '', [], 'HAVE_UNISTD_H'],
]
ok = cc.has_header(item[0], prefix: item[1], dependencies: item[2])
config_data.set10(item[3], ok)
endforeach
have_unistd_h = config_data.get('HAVE_UNISTD_H')
have_stdlib_h = config_data.get('HAVE_STDLIB_H')
have_string_h = config_data.get('HAVE_STRING_H')
config_data.set10('STDC_HEADERS', have_stdlib_h == 1 and have_string_h == 1)
# check on functions
foreach item : [
['fseeko', '#include <stdio.h>', [], 'HAVE_FSEEKO'],
['mkdir', '#include <sys/stat.h>', [], 'HAVE_MKDIR'],
['_mkdir', '#include <direct.h>', [], 'HAVE__MKDIR'],
['towlower', '#include <wctype.h>', [], 'HAVE_TOWLOWER'],
]
ok = cc.has_function(item[0], prefix: item[1], dependencies: item[2])
config_data.set10(item[3], ok)
endforeach
code = '#include <sys/stat.h>\n#if @0@\n#include <unistd.h>\n#endif\nint main(void) { mkdir ("."); return 0; }'.format(have_unistd_h)
mkdir_takes_one_arg = cc.links(code, name: 'mkdir has one argument')
config_data.set10('MKDIR_TAKES_ONE_ARG', mkdir_takes_one_arg)
# check types
foreach item : [
['mode_t', '#include <sys/types.h>', [], 'HAVE_MODE_T'],
['off_t', '#include <sys/types.h>', [], 'HAVE_OFF_T'],
['size_t', '#include <sys/types.h>', [], 'HAVE_SIZE_T'],
]
sz = cc.sizeof(item[0], prefix: item[1], dependencies: item[2])
config_data.set10(item[3], sz > 0)
endforeach
off_t_type = 'off_t'
off_t_prfx = '#include <sys/types.h>'
if config_data.get('HAVE_OFF_T') == 1
off_t_type = 'long int'
off_t_prfx = ''
endif
config_data.set('SIZEOF_OFF_T', cc.sizeof(off_t_type, prefix: off_t_prfx))
# check endianness
is_big_endian = target_machine.endian() == 'big'
config_data.set10('WORDS_BIGENDIAN', is_big_endian)
if host_machine.system() == 'aix'
config_data.set('_LARGE_FILES', 1)
config_data.set('_LARGEFILE_SOURCE', 0)
else
config_data.set('_LARGE_FILES', 0)
config_data.set10('_LARGEFILE_SOURCE', host_machine.system() != 'windows')
endif
config_h = configure_file(
input: 'config.h.inc',
output: 'config.h',
configuration: config_data,
)
libmspack_inc = [include_directories(['libmspack' / 'mspack', 'libmspack'])]
libmspack = static_library('libmspack', libmspack_files,
dependencies: [],
include_directories: libmspack_inc,
implicit_include_directories: false
)
libmspack_dep = declare_dependency(
link_with: libmspack,
include_directories: libmspack_inc
)