wayland/tests/meson.build
Matt Turner 618663c791 meson: Add option to control building wayland-scanner
Wayland requires a binary, wayland-scanner, to be run during the build
process. For any configuration other than native builds (including
cross compiling and even 32-bit x86 builds on an x86-64 build machine)
Wayland's build process builds and uses its own wayland-scanner.

For any builds using a cross file, wayland-scanner is built for the host
machine and therefore cannot be executed during the build of the Wayland
libraries. Instead builds using a cross file must execute the build
machine's wayland-scanner (typically /usr/bin/wayland-scanner).

As such, to build Wayland's libraries for a non-native ABI a package
manager must build and install /usr/bin/wayland-scanner first. But then
the build for the native ABI then rebuilds wayland-scanner itself and
doesn't use the system's, and worse, wants to install its own, which
conflicts with the /usr/bin/wayland-scanner already installed!

So, add the -Dscanner=... option to control whether to install
wayland-scanner.

Signed-off-by: Matt Turner <mattst88@gmail.com>
2020-03-13 10:25:24 -07:00

165 lines
3.8 KiB
Meson

test_runner = static_library(
'test-runner',
sources: [
'test-runner.c',
'test-helpers.c',
'test-compositor.c'
],
include_directories: [ root_inc, src_inc ],
dependencies: [
cc.find_library('dl', required: false),
dependency('threads'),
ffi_dep,
wayland_util_dep,
wayland_private_dep,
wayland_client_dep,
wayland_server_dep
]
)
test_runner_dep = declare_dependency(
link_with: test_runner,
include_directories: [ src_inc ],
dependencies: [
dependency('threads'),
cc.find_library('dl', required: false)
]
)
tests_protocol_xml = files('../protocol/tests.xml')
tests_server_protocol_h = custom_target(
'test server protocol header',
command: [ wayland_scanner_for_build, '-s', 'server-header', '@INPUT@', '@OUTPUT@' ],
input: tests_protocol_xml,
output: 'tests-server-protocol.h'
)
tests_client_protocol_c = custom_target(
'test client protocol header',
command: [ wayland_scanner_for_build, '-s', 'client-header', '@INPUT@', '@OUTPUT@' ],
input: tests_protocol_xml,
output: 'tests-client-protocol.h'
)
tests_protocol_c = custom_target(
'test protocol source',
command: [ wayland_scanner_for_build, '-s', 'public-code', '@INPUT@', '@OUTPUT@' ],
input: tests_protocol_xml,
output: 'tests-protocol.c'
)
benchmark(
'fixed-benchmark',
executable(
'fixed-benchmark',
'fixed-benchmark.c',
dependencies: test_runner_dep
)
)
executable(
'exec-fd-leak-checker',
'exec-fd-leak-checker.c',
dependencies: test_runner_dep
)
test(
'cpp-compile-test',
executable(
'cpp-compile-test',
'cpp-compile-test.cpp',
wayland_server_protocol_h,
include_directories: src_inc
)
)
sed_path = find_program('sed').path()
if get_option('scanner')
test(
'scanner-test',
find_program('scanner-test.sh'),
env: [
'TEST_DATA_DIR=@0@/data'.format(meson.current_source_dir()),
'TEST_OUTPUT_DIR=@0@/output'.format(meson.current_build_dir()),
'SED=@0@'.format(sed_path),
'WAYLAND_SCANNER=@0@'.format(wayland_scanner.full_path()),
],
)
endif
tests = {
'array-test': [],
'client-test': [ wayland_server_protocol_h ],
'display-test': [
wayland_client_protocol_h,
wayland_server_protocol_h,
tests_server_protocol_h,
tests_client_protocol_c,
tests_protocol_c,
],
'connection-test': [
wayland_client_protocol_h,
wayland_server_protocol_h,
],
'event-loop-test': [ wayland_server_protocol_h ],
'fixed-test': [],
'interface-test': [ wayland_client_protocol_h ],
'list-test': [],
'map-test': [],
'sanity-test' : [
wayland_client_protocol_h,
wayland_server_protocol_h,
],
'socket-test': [
wayland_client_protocol_h,
wayland_server_protocol_h,
],
'queue-test': [
wayland_client_protocol_h,
wayland_server_protocol_h,
],
'signal-test': [ wayland_server_protocol_h ],
'newsignal-test': [
# wayland-server.c is needed here to access wl_priv_* functions
files('../src/wayland-server.c'),
wayland_server_protocol_h,
],
'resources-test': [ wayland_server_protocol_h ],
'message-test': [
wayland_client_protocol_h,
wayland_server_protocol_h,
],
'compositor-introspection-test': [
wayland_client_protocol_h,
wayland_server_protocol_h,
],
'protocol-logger-test': [
wayland_client_protocol_h,
wayland_server_protocol_h,
],
'headers-test': [
wayland_client_protocol_h,
wayland_server_protocol_h,
'headers-protocol-test.c',
wayland_client_protocol_core_h,
wayland_server_protocol_core_h,
'headers-protocol-core-test.c',
],
'os-wrappers-test': [],
}
foreach test_name, test_extra_sources: tests
test_sources = [ test_name + '.c' ] + test_extra_sources
test_deps = [test_runner_dep]
bin = executable(test_name, test_sources, dependencies: test_deps)
test(
test_name,
bin,
env: [
'TEST_SRC_DIR=@0@'.format(meson.current_source_dir()),
'TEST_BUILD_DIR=@0@'.format(meson.current_build_dir()),
],
)
endforeach