1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
mock_conf = configuration_data()
mock_conf.set(
'HAVE_GLIBC_IOCTL',
cc.compiles(
'''#include <sys/ioctl.h>
int ioctl(int fd, unsigned long request, ...);
''',
name: 'ioctl has glibc-style prototype'
),
description: 'Is ioctl the glibc interface (rather than POSIX)'
)
mock_ioctl = library(
'mock-ioctl',
['mock.c', 'util.c'],
include_directories: [incdir, internal_incdir],
dependencies: [dl_dep],
c_args: ['-DHAVE_GLIBC_IOCTL=' + (mock_conf.get('HAVE_GLIBC_IOCTL') ? '1' : '0')])
# Add mock-ioctl to the LD_PRELOAD path so it overrides libc.
# Append to LD_PRELOAD so existing libraries, e.g. libasan, are kept.
# If libasan isn't specified in the LD_PRELOAD path, ASAN warns about mock-ioctl
# being loaded first because its memory allocations might not get intercepted.
# But it appears this isn't a problem; ASAN errors in mock-ioctl are reported.
# This is likely because the executable still links with libasan before libc.
mock_ioctl_env = environment()
mock_ioctl_env.append('LD_PRELOAD', mock_ioctl.full_path())
mock_ioctl_env.set('ASAN_OPTIONS', 'verify_asan_link_order=0')
ana = executable(
'test-ana',
'ana.c',
dependencies: libnvme_dep,
include_directories: [incdir, internal_incdir],
link_with: mock_ioctl,
)
test('ana', ana, env: mock_ioctl_env)
discovery = executable(
'test-discovery',
'discovery.c',
dependencies: libnvme_dep,
include_directories: [incdir, internal_incdir],
link_with: mock_ioctl,
)
test('discovery', discovery, env: mock_ioctl_env)
features = executable(
'test-features',
'features.c',
dependencies: libnvme_dep,
link_with: mock_ioctl,
)
test('features', features, env: mock_ioctl_env)
identify = executable(
'test-identify',
'identify.c',
dependencies: libnvme_dep,
link_with: mock_ioctl,
)
test('identify', identify, env: mock_ioctl_env)
logs = executable(
'test-logs',
'logs.c',
dependencies: libnvme_dep,
link_with: mock_ioctl,
)
test('logs', logs, env: mock_ioctl_env)
zns = executable(
'test-zns',
'zns.c',
dependencies: libnvme_dep,
link_with: mock_ioctl,
)
test('zns', zns, env: mock_ioctl_env)
misc = executable(
'test-misc',
'misc.c',
dependencies: libnvme_dep,
link_with: mock_ioctl,
)
test('misc', misc, env: mock_ioctl_env)
|