From 5cb6b92f0111d91f68eb268ad025cab783d25f14 Mon Sep 17 00:00:00 2001 From: Jonas Ådahl Date: Wed, 8 Apr 2020 17:23:04 +0200 Subject: tests: Add compile tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Only tested by the meson build system. Signed-off-by: Jonas Ådahl Reviewed-by: Simon Ser --- tests/build-cxx.cc.in | 12 +++++ tests/build-pedantic.c.in | 10 ++++ tests/meson.build | 127 ++++++++++++++++++++++++++++++++++++++++++++++ tests/replace.py | 23 +++++++++ 4 files changed, 172 insertions(+) create mode 100644 tests/build-cxx.cc.in create mode 100644 tests/build-pedantic.c.in create mode 100755 tests/replace.py (limited to 'tests') diff --git a/tests/build-cxx.cc.in b/tests/build-cxx.cc.in new file mode 100644 index 0000000..e92b155 --- /dev/null +++ b/tests/build-cxx.cc.in @@ -0,0 +1,12 @@ +#include "@PROTOCOL_CLIENT_INCLUDE_FILE@" +#include "@PROTOCOL_SERVER_INCLUDE_FILE@" + +/* This is a build-test only */ + +using namespace std; + +int +main(int argc, char **argv) +{ + return 0; +} diff --git a/tests/build-pedantic.c.in b/tests/build-pedantic.c.in new file mode 100644 index 0000000..51dfeac --- /dev/null +++ b/tests/build-pedantic.c.in @@ -0,0 +1,10 @@ +#include "@PROTOCOL_CLIENT_INCLUDE_FILE@" +#include "@PROTOCOL_SERVER_INCLUDE_FILE@" + +/* This is a build-test only */ + +int +main(int argc, char **argv) +{ + return 0; +} diff --git a/tests/meson.build b/tests/meson.build index 3a6b150..55b2c0a 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -1,6 +1,11 @@ prog_scan_sh = find_program('scan.sh') prog_scanner = find_program(dep_scanner.get_pkgconfig_variable('wayland_scanner')) +libwayland = [ + dependency('wayland-client'), + dependency('wayland-server'), +] + # Check that each protocol passes through the scanner foreach protocol_file : protocol_files protocol_path = join_paths(wayland_protocols_srcdir, protocol_file) @@ -12,3 +17,125 @@ foreach protocol_file : protocol_files ] ) endforeach + +# Check buildability + +add_languages('c', 'cpp') +replace = find_program('replace.py') + +foreach protocol_file : protocol_files + xml_file = fs.name(protocol_file) + xml_components = xml_file.split('.') + protocol_base_file_name = xml_components[0] + + protocol_path = files(join_paths(wayland_protocols_srcdir, protocol_file)) + client_header_path = '@0@-client.h'.format(protocol_base_file_name) + server_header_path = '@0@-server.h'.format(protocol_base_file_name) + code_path = '@0@-code.c'.format(protocol_base_file_name) + client_header = custom_target( + client_header_path, + output: client_header_path, + input: protocol_path, + command: [ + prog_scanner, + '--strict', + 'client-header', + '@INPUT@', + '@OUTPUT@', + ], + install: false, + ) + server_header = custom_target( + server_header_path, + output: server_header_path, + input: protocol_path, + command: [ + prog_scanner, + '--strict', + 'server-header', + '@INPUT@', + '@OUTPUT@', + ], + install: false, + ) + code = custom_target( + code_path, + output: code_path, + input: protocol_path, + command: [ + prog_scanner, + '--strict', + 'private-code', + '@INPUT@', + '@OUTPUT@', + ], + install: false, + ) + + replace_command = [ + replace, + '@INPUT@', + '@OUTPUT@', + 'PROTOCOL_CLIENT_INCLUDE_FILE', + client_header.full_path(), + 'PROTOCOL_SERVER_INCLUDE_FILE', + server_header.full_path(), + ] + + # Check that header can be included by a pedantic C99 compiler + test_name = 'test-build-pedantic-@0@'.format(protocol_file.underscorify()) + test_name_source = '@0@.c'.format(test_name) + test_source = custom_target( + test_name_source, + input: 'build-pedantic.c.in', + output: test_name_source, + command: replace_command, + ) + pedantic_test_executable = executable( + test_name, + [ + test_source, + client_header, + server_header, + code + ], + link_args: [ + '-Wl,--unresolved-symbols=ignore-all', + ], + dependencies: libwayland, + c_args: [ + '-std=c99', + '-pedantic', + '-Wall', + '-Werror' ], + install: false, + ) + test(test_name, pedantic_test_executable) + + # Check that the header + if not protocol_file.contains('xdg-foreign-unstable-v1') + test_name = 'test-build-cxx-@0@'.format(protocol_file.underscorify()) + test_name_source = '@0@.cc'.format(test_name) + test_source = custom_target( + test_name_source, + input: 'build-cxx.cc.in', + output: test_name_source, + command: replace_command, + ) + cxx_test_executable = executable( + test_name, + [ + test_source, + client_header, + server_header, + ], + link_args: [ '-Wl,--unresolved-symbols=ignore-all' ], + cpp_args: [ + '-Wall', + '-Werror', + ], + install: false, + ) + test(test_name, cxx_test_executable) + endif +endforeach diff --git a/tests/replace.py b/tests/replace.py new file mode 100755 index 0000000..8a8a18e --- /dev/null +++ b/tests/replace.py @@ -0,0 +1,23 @@ +#!/usr/bin/python3 + +import sys + +execpath, inpath, outpath, *dict_list = sys.argv + +dictonary = {} +while dict_list: + key, value, *rest = dict_list + dictonary[key] = value + dict_list = rest + +infile = open(inpath, 'r') +outfile = open(outpath, 'w') + +buf = infile.read() +infile.close() + +for key, value in dictonary.items(): + buf = buf.replace('@{}@'.format(key), value) + +outfile.write(buf) +outfile.close() -- cgit v1.2.3