meson fixes (#10743)

* r2pm/meson.build: install r2pm
* meson.build: use system libraries when available
* travis: add fedora-sys to the list of things to test
* bin_nso.c: still include lz4.c when not on meson
* Dockerfile.travis: add required system dependencies to dockerfile
* meson.build: split zip_dep in libzip and zlib dependencies
* shlr/meson.build: zip needs zlib
This commit is contained in:
Riccardo Schirone 2018-07-17 23:01:40 +02:00 committed by GitHub
parent 14e3706c93
commit c932d1abff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 192 additions and 144 deletions

View file

@ -18,6 +18,9 @@ matrix:
env: COMPILER_NAME=clang CXX=clang++ CC=clang
- os: linux
env: COMPILER_NAME=gcc CXX=g++ CC=gcc INSTALL_SYSTEM=meson
- if: head_branch =~ ^fedora-* OR tag =~ ^release-* OR tag =~ ^fedora-*
os: linux
env: COMPILER_NAME=gcc CXX=g++ CC=gcc INSTALL_SYSTEM=meson R2_SYS_CAPSTONE=true R2_SYS_MAGIC=true R2_SYS_ZIP=true R2_SYS_LZ4=true R2_SYS_ZLIB=true
- if: head_branch =~ ^asan-* OR tag =~ ^release-* OR type = push
os: linux
env: COMPILER_NAME=clang CXX=clang++ CC=clang CFLAGS="-O0 -ggdb -fsanitize=address -fno-omit-frame-pointer" LDFLAGS="-O0 -ggdb -fsanitize=address -fno-omit-frame-pointer" ASAN_OPTIONS=detect_odr_violation=0 LSAN_OPTIONS=detect_leaks=0
@ -25,7 +28,7 @@ matrix:
env: COMPILER_NAME=clang CXX=clang++ CC=clang
allow_failures:
- os: linux
env: COMPILER_NAME=gcc CXX=g++ CC=gcc INSTALL_SYSTEM=meson
env: COMPILER_NAME=gcc CXX=g++ CC=gcc INSTALL_SYSTEM=meson R2_SYS_CAPSTONE=true R2_SYS_MAGIC=true R2_SYS_ZIP=true R2_SYS_LZ4=true R2_SYS_ZLIB=true
- os: linux
env: COMPILER_NAME=clang CXX=clang++ CC=clang CFLAGS="-O0 -ggdb -fsanitize=address -fno-omit-frame-pointer" LDFLAGS="-O0 -ggdb -fsanitize=address -fno-omit-frame-pointer" ASAN_OPTIONS=detect_odr_violation=0 LSAN_OPTIONS=detect_leaks=0
cache:

View file

@ -29,6 +29,10 @@ RUN dnf install -y \
glib2 \
glib2-devel \
ncurses-devel \
capstone-devel \
libzip-devel \
file-devel \
lz4-devel \
gnupg2 \
python2-pip \
meson \

1
binr/r2pm/meson.build Normal file
View file

@ -0,0 +1 @@
install_data('r2pm', install_dir: './bin')

View file

@ -126,7 +126,8 @@ r_bin = library('r_bin', files,
r_magic_dep,
r_socket_dep,
sdb_dep,
java_dep
java_dep,
lz4_dep
],
install: true,
implicit_include_directories: false,

View file

@ -6,9 +6,12 @@
#include <r_bin.h>
#include <r_io.h>
#include <r_cons.h>
// #include "../../../shlr/lz4/lz4.h"
#include "../../../shlr/lz4/lz4.c"
#include "nxo/nxo.h"
#ifdef R_MESON_VERSION
#include <lz4.h>
#else
#include "../../../shlr/lz4/lz4.c"
#endif
#define NSO_OFF(x) r_offsetof (NSOHeader, x)
#define NSO_OFFSET_MODMEMOFF r_offsetof (NXOStart, mod_memoffset)

View file

@ -82,7 +82,7 @@ files = [
r_util = library('r_util', files,
include_directories: platform_inc,
dependencies: [ldl, mth, pth, utl, sdb_dep, zip_dep],
dependencies: [ldl, mth, pth, utl, sdb_dep, zlib_dep],
install: true,
implicit_include_directories: false,
soversion: r2_libversion

View file

@ -329,6 +329,7 @@ if not meson.is_subproject()
subdir('binr/radiff2')
subdir('binr/rafind2')
subdir('binr/rax2')
subdir('binr/r2pm')
else
libr2_dep = declare_dependency(
dependencies: [

View file

@ -14,3 +14,6 @@ option('r2_gittap', type: 'string', value: '')
option('r2_gittip', type: 'string', value: '')
option('use_sys_capstone', type: 'boolean', value: false)
option('use_sys_magic', type: 'boolean', value: false)
option('use_sys_zip', type: 'boolean', value: false)
option('use_sys_zlib', type: 'boolean', value: false)
option('use_sys_lz4', type: 'boolean', value: false)

View file

@ -266,23 +266,70 @@ spp_dep = declare_dependency(link_with: libr2spp,
# handle lz4 dependency
lz4_files = [
lz4_dep = dependency('liblz4', required: false)
if not lz4_dep.found() or not get_option('use_sys_lz4')
message('Use bundled lz4')
lz4_files = [
'lz4/lz4.c',
]
]
lz4_inc = [platform_inc, include_directories('lz4')]
lz4_inc = [platform_inc, include_directories('lz4')]
libr2lz4 = static_library('r2lz4', lz4_files,
libr2lz4 = static_library('r2lz4', lz4_files,
include_directories: lz4_inc,
implicit_include_directories: false
)
)
lz4_dep = declare_dependency(link_with: libr2lz4,
lz4_dep = declare_dependency(link_with: libr2lz4,
include_directories: lz4_inc)
else
message('Use system-provided lz4 library')
endif
# handle zlib dependency
zlib_dep = dependency('zlib', required: false)
if not zlib_dep.found() or not get_option('use_sys_zlib')
message('Use bundled zlib')
zlib_files = [
'zip/zlib/adler32.c',
'zip/zlib/compress.c',
'zip/zlib/crc32.c',
'zip/zlib/deflate.c',
'zip/zlib/gzclose.c',
'zip/zlib/gzlib.c',
'zip/zlib/gzread.c',
'zip/zlib/gzwrite.c',
'zip/zlib/infback.c',
'zip/zlib/inffast.c',
'zip/zlib/inflate.c',
'zip/zlib/inftrees.c',
'zip/zlib/trees.c',
'zip/zlib/uncompr.c',
'zip/zlib/zutil.c'
]
zlib_inc = [platform_inc, include_directories('zip/zlib')]
libr2zlib = static_library('r2zlib', zlib_files,
include_directories: zlib_inc,
implicit_include_directories: false
)
zlib_dep = declare_dependency(link_with: libr2zlib,
include_directories: zlib_inc)
else
message('Use system-provided zlib library')
endif
# handle zip dependency
zlib_files = [
zip_dep = dependency('libzip', required: false)
if not zip_dep.found() or not get_option('use_sys_zip')
message('Use bundled zip')
zip_files = [
'zip/zip/zip_add.c',
'zip/zip/zip_add_dir.c',
'zip/zip/zip_add_entry.c',
@ -364,33 +411,22 @@ zlib_files = [
'zip/zip/zip_unchange_all.c',
'zip/zip/zip_unchange_archive.c',
'zip/zip/zip_unchange_data.c',
'zip/zip/zip_utf-8.c',
'zip/zlib/adler32.c',
'zip/zlib/compress.c',
'zip/zlib/crc32.c',
'zip/zlib/deflate.c',
'zip/zlib/gzclose.c',
'zip/zlib/gzlib.c',
'zip/zlib/gzread.c',
'zip/zlib/gzwrite.c',
'zip/zlib/infback.c',
'zip/zlib/inffast.c',
'zip/zlib/inflate.c',
'zip/zlib/inftrees.c',
'zip/zlib/trees.c',
'zip/zlib/uncompr.c',
'zip/zlib/zutil.c'
]
'zip/zip/zip_utf-8.c'
]
zip_inc = [platform_inc, include_directories('zip/include')]
zip_inc = [platform_inc, include_directories('zip/include')]
libr2zip = static_library('r2zip', zlib_files,
libr2zip = static_library('r2zip', zip_files,
include_directories: zip_inc,
implicit_include_directories: false
)
implicit_include_directories: false,
dependencies: zlib_dep
)
zip_dep = declare_dependency(link_with: libr2zip,
zip_dep = declare_dependency(link_with: libr2zip,
include_directories: zip_inc)
else
message('Use system-provided zip library')
endif
# handle grub dependency
@ -491,24 +527,3 @@ libr2ar = static_library('r2ar', ar_files,
ar_dep = declare_dependency(link_with: libr2ar,
include_directories: ar_inc)
libr_shlr = [
libr2ar, libr2bochs, libr2gdb, libr2grub, libr2java, libr2lz4,
libr2qnx, libr2sdb, libr2spp, libr2spp, libr2tcc, libr2windbg, libr2zip
]
if cc.get_id() == 'msvc'
cmd = ['lib', '/OUT:@OUTPUT@', '@INPUT@']
else
cmd = ['ar', 'csr', '@OUTPUT@', '@INPUT@']
endif
custom_target('libr_shlr',
input: libr_shlr,
output: 'libr_shlr.a',
command: cmd,
build_by_default: true,
build_always: false,
install: true,
install_dir: get_option('libdir')
)

View file

@ -167,7 +167,6 @@ def win_dist(args):
copy(r'{BUILDDIR}\libr\*\*.lib', r'{DIST}\{R2_LIBDIR}')
else:
copy(r'{BUILDDIR}\libr\*\*.a', r'{DIST}\{R2_LIBDIR}')
copy(r'{BUILDDIR}\shlr\libr_shlr.a', r'{DIST}\{R2_LIBDIR}')
win_dist_libr2()
def win_dist_libr2(**path_fmt):

View file

@ -8,7 +8,25 @@ ls radare2-regressions >/dev/null 2>&1 || git clone --depth 1 --branch "${R2R_DE
if [ "${INSTALL_SYSTEM}" == "meson" ] ; then
echo "Installing with meson + ninja"
meson --prefix=${TRAVIS_BUILD_DIR}/install build
OPTS=""
if [ "${R2_SYS_CAPSTONE}" != "" ] ; then
OPTS="${OPTS} -D use_sys_capstone=${R2_SYS_CAPSTONE}"
fi
if [ "${R2_SYS_MAGIC}" != "" ] ; then
OPTS="${OPTS} -D use_sys_magic=${R2_SYS_MAGIC}"
fi
if [ "${R2_SYS_ZLIB}" != "" ] ; then
OPTS="${OPTS} -D use_sys_zlib=${R2_SYS_ZLIB}"
fi
if [ "${R2_SYS_ZIP}" != "" ] ; then
OPTS="${OPTS} -D use_sys_zip=${R2_SYS_ZIP}"
fi
if [ "${R2_SYS_LZ4}" != "" ] ; then
OPTS="${OPTS} -D use_sys_lz4=${R2_SYS_LZ4}"
fi
meson --prefix=${TRAVIS_BUILD_DIR}/install ${OPTS} build
pushd build
ninja
ninja install