From 9d237190105e4231481e5cf7c52449b311884c2f Mon Sep 17 00:00:00 2001 From: Frode Nordahl Date: Sat, 2 Dec 2023 07:57:21 +0100 Subject: [PATCH] tests/ctests: Build ctests separately At present the ctests are not properly linked with the built code, this causes issues when there are interdependencies between the modules. The meson build system does not appear to have support for internal build order or dependncies, so the only way I have found to make this work is to break out the build of the ctests as a separate project. This is required to avoid undefined symbols in the test code for the next patch in this series. Signed-off-by: Frode Nordahl --- meson.build | 5 ++++- tests/ctests/meson.build | 23 ++++++++++++++++++++--- tests/ctests/run.sh | 17 +++++++++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) create mode 100755 tests/ctests/run.sh diff --git a/meson.build b/meson.build index 66cda8b5a..68b5365e9 100644 --- a/meson.build +++ b/meson.build @@ -71,7 +71,10 @@ test_env = [ ] if get_option('unit_testing') - subdir('tests/ctests') + test('ctests', + find_program('tests/ctests/run.sh'), + workdir: join_paths(meson.current_source_dir(), 'tests/ctests'), + args: [meson.current_source_dir(), meson.current_build_dir()]) endif #FIXME: exclude doc/env/ diff --git a/tests/ctests/meson.build b/tests/ctests/meson.build index 8a41e9a30..ab503153f 100644 --- a/tests/ctests/meson.build +++ b/tests/ctests/meson.build @@ -1,3 +1,10 @@ +project('ctests', 'c') + +add_project_arguments( + '-DSBINDIR="' + join_paths(get_option('prefix'), get_option('sbindir')) + '"', + '-D_GNU_SOURCE', + language: 'c') + tests = { 'test_netplan_parser': false, 'test_netplan_state': false, @@ -10,15 +17,25 @@ tests = { 'test_netplan_openvswitch': false, } +glib = dependency('glib-2.0') +gio = dependency('gio-2.0') +yaml = dependency('yaml-0.1') +uuid = dependency('uuid') cmocka = dependency('cmocka', required: true) +netplan = meson.get_compiler('c').find_library( + 'netplan', + dirs: [join_paths(get_option('parent_current_build_dir'), 'src')]) foreach name, should_fail: tests exe = executable(name, '@0@.c'.format(name), - include_directories: [inc, inc_internal], - dependencies: [cmocka, glib, gio, yaml, uuid], + include_directories: [ + join_paths(get_option('parent_current_source_dir'), 'include'), + join_paths(get_option('parent_current_source_dir'), 'src'), + ], + dependencies: [cmocka, glib, gio, yaml, uuid, netplan], c_args: [ - '-DFIXTURESDIR="' + meson.project_source_root() + '/tests/ctests/fixtures"', + '-DFIXTURESDIR="' + meson.project_source_root() + '/fixtures"', '-Wno-deprecated-declarations', '-D_GNU_SOURCE', ], diff --git a/tests/ctests/run.sh b/tests/ctests/run.sh new file mode 100755 index 000000000..956863be8 --- /dev/null +++ b/tests/ctests/run.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +PARENT_CURRENT_SOURCE_DIR="$1" +PARENT_CURRENT_BUILD_DIR="$2" +printf "%s%s%s\n" \ + "option('parent_current_source_dir', " \ + "type: 'string', " \ + "value: '${PARENT_CURRENT_SOURCE_DIR=}')" > meson_options.txt +printf "%s%s%s\n" \ + "option('parent_current_build_dir', " \ + "type: 'string', " \ + "value: '${PARENT_CURRENT_BUILD_DIR}')" >> meson_options.txt + +rm -rf build +meson setup build && cd build +meson compile +meson test