From b852b58f82dd05b644679a421c70e42ede8f0b97 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Fri, 5 Jun 2020 14:06:36 +0100 Subject: [PATCH] Optionally install examples and tests This makes it easier to test PipeWire in its "as-installed" state, for example in an OS distribution. The .test metadata files in ${datadir}/installed-tests/${package} are a convention taken from GNOME's installed-tests initiative, allowing a generic test-runner like gnome-desktop-testing to discover and run tests in an automatic way. The installation path ${libexecdir}/installed-tests/${package} is also a convention borrowed from GNOME's installed-tests initiative. In addition to the automated tests, I've installed example executables in the same place, for manual testing. They could be separated into a different directory if desired, but they seem like they have more similarities with the automated tests than differences: both are there to test that PipeWire works correctly, and neither should be relied on for production use. Some examples are installed in deeper subdirectories to avoid name clashes. Signed-off-by: Simon McVittie --- meson.build | 6 ++++ meson_options.txt | 4 +++ pipewire-jack/src/meson.build | 3 +- spa/examples/meson.build | 12 +++++--- spa/plugins/audioconvert/meson.build | 35 ++++++++++++++++++++++-- spa/tests/meson.build | 41 ++++++++++++++++++++++++++-- src/examples/meson.build | 39 +++++++++++++++++--------- src/modules/meson.build | 14 +++++++++- src/tests/meson.build | 28 +++++++++++++++++-- template.test.in | 3 ++ 10 files changed, 158 insertions(+), 27 deletions(-) create mode 100644 template.test.in diff --git a/meson.build b/meson.build index c93cef4bc..088e43e64 100644 --- a/meson.build +++ b/meson.build @@ -30,6 +30,7 @@ prefix = get_option('prefix') pipewire_bindir = join_paths(prefix, get_option('bindir')) pipewire_datadir = join_paths(prefix, get_option('datadir')) pipewire_libdir = join_paths(prefix, get_option('libdir')) +pipewire_libexecdir = join_paths(prefix, get_option('libexecdir')) pipewire_localedir = join_paths(prefix, get_option('localedir')) pipewire_sysconfdir = join_paths(prefix, get_option('sysconfdir')) @@ -303,6 +304,11 @@ alsa_dep = (get_option('pipewire-alsa') ? dependency('alsa', version : '>=1.1.7') : dependency('', required: false)) +installed_tests_metadir = join_paths(pipewire_datadir, 'installed-tests', pipewire_name) +installed_tests_execdir = join_paths(pipewire_libexecdir, 'installed-tests', pipewire_name) +installed_tests_enabled = get_option('installed_tests') +installed_tests_template = files('template.test.in') + subdir('spa') subdir('src') diff --git a/meson_options.txt b/meson_options.txt index 96377046c..58830244d 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -14,6 +14,10 @@ option('tests', description: 'Build tests', type: 'boolean', value: true) +option('installed_tests', + description: 'Install manual and automated test executables', + type: 'boolean', + value: false) option('gstreamer', description: 'Build GStreamer plugins', type: 'boolean', diff --git a/pipewire-jack/src/meson.build b/pipewire-jack/src/meson.build index 0ea26143b..a052eaa82 100644 --- a/pipewire-jack/src/meson.build +++ b/pipewire-jack/src/meson.build @@ -70,7 +70,8 @@ if sdl_dep.found() executable('video-dsp-play', '../examples/video-dsp-play.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples', 'jack'), dependencies : [jack_dep, sdl_dep, mathlib], link_with: pipewire_jack, ) diff --git a/spa/examples/meson.build b/spa/examples/meson.build index e00440e28..fa4c9a760 100644 --- a/spa/examples/meson.build +++ b/spa/examples/meson.build @@ -3,14 +3,16 @@ if sdl_dep.found() include_directories : [configinc, spa_inc], c_args : ['-D_GNU_SOURCE'], dependencies : [dl_lib, sdl_dep, pthread_lib], - install : false) + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples', 'spa')) if get_option('libcamera') and libcamera_dep.found() executable('local-libcamera', 'local-libcamera.c', include_directories : [configinc, spa_inc], c_args : ['-D_GNU_SOURCE'], dependencies : [dl_lib, sdl_dep, pthread_lib, libcamera_dep], - install : false) + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples', 'spa')) endif endif @@ -18,10 +20,12 @@ executable('example-control', 'example-control.c', include_directories : [configinc, spa_inc], c_args : ['-D_GNU_SOURCE'], dependencies : [dl_lib, pthread_lib, mathlib], - install : false) + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples', 'spa')) executable('adapter-control', 'adapter-control.c', include_directories : [configinc, spa_inc], c_args : ['-D_GNU_SOURCE'], dependencies : [dl_lib, pthread_lib, mathlib], - install : false) + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples', 'spa')) diff --git a/spa/plugins/audioconvert/meson.build b/spa/plugins/audioconvert/meson.build index 513bfbdbd..5da43a63d 100644 --- a/spa/plugins/audioconvert/meson.build +++ b/spa/plugins/audioconvert/meson.build @@ -129,11 +129,25 @@ foreach a : test_apps dependencies : [dl_lib, pthread_lib, mathlib ], include_directories : [spa_inc ], link_with : [ audioconvert, test_lib, audioconvertlib ], + install_rpath : join_paths(spa_plugindir, 'audioconvert'), c_args : [ simd_cargs, '-D_GNU_SOURCE' ], - install : false), + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'audioconvert')), env : [ 'SPA_PLUGIN_DIR=@0@/spa/plugins/'.format(meson.build_root()), ]) + + if installed_tests_enabled + test_conf = configuration_data() + test_conf.set('exec', + join_paths(installed_tests_execdir, 'audioconvert', a)) + configure_file( + input: installed_tests_template, + output: a + '.test', + install_dir: join_paths(installed_tests_metadir, 'audioconvert'), + configuration: test_conf + ) + endif endforeach benchmark_apps = [ @@ -148,10 +162,24 @@ foreach a : benchmark_apps include_directories : [spa_inc ], c_args : [ simd_cargs, '-D_GNU_SOURCE' ], link_with : [ audioconvert, audioconvertlib ], - install : false), + install_rpath : join_paths(spa_plugindir, 'audioconvert'), + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'audioconvert')), env : [ 'SPA_PLUGIN_DIR=@0@/spa/plugins/'.format(meson.build_root()), ]) + + if installed_tests_enabled + test_conf = configuration_data() + test_conf.set('exec', + join_paths(installed_tests_execdir, 'audioconvert', a)) + configure_file( + input: installed_tests_template, + output: a + '.test', + install_dir: join_paths(installed_tests_metadir, 'audioconvert'), + configuration: test_conf + ) + endif endforeach if sndfile_dep.found() @@ -161,9 +189,10 @@ if sndfile_dep.found() executable('spa-resample', sparesample_sources, c_args : [ simd_cargs, '-D_GNU_SOURCE' ], - install: false, include_directories : [spa_inc ], link_with : [ audioconvert, test_lib ], dependencies : [sndfile_dep, mathlib], + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples', 'audioconvert'), ) endif diff --git a/spa/tests/meson.build b/spa/tests/meson.build index 0ec72e1ba..ad0519de4 100644 --- a/spa/tests/meson.build +++ b/spa/tests/meson.build @@ -11,18 +11,41 @@ foreach a : test_apps dependencies : [dl_lib, pthread_lib, mathlib ], include_directories : [spa_inc ], c_args : [ '-D_GNU_SOURCE' ], - install : false), + install : installed_tests_enabled, + install_dir : installed_tests_execdir), env : [ 'SPA_PLUGIN_DIR=@0@/spa/plugins/'.format(meson.build_root()), ]) + + if installed_tests_enabled + test_conf = configuration_data() + test_conf.set('exec', join_paths(installed_tests_execdir, 'spa-' + a)) + configure_file( + input: installed_tests_template, + output: 'spa-' + a + '.test', + install_dir: installed_tests_metadir, + configuration: test_conf + ) + endif endforeach if have_cpp test_cpp = executable('spa-test-cpp', 'test-cpp.cpp', include_directories : [spa_inc ], dependencies : [], - install : false) + install : installed_tests_enabled, + install_dir : installed_tests_execdir) test('spa-test-cpp', test_cpp) +if installed_tests_enabled + test_conf = configuration_data() + test_conf.set('exec', join_paths(installed_tests_execdir, 'spa-test-cpp')) + configure_file( + input: installed_tests_template, + output: 'spa-test-cpp.test', + install_dir: installed_tests_metadir, + configuration: test_conf + ) +endif endif benchmark_apps = [ @@ -37,8 +60,20 @@ foreach a : benchmark_apps dependencies : [dl_lib, pthread_lib, mathlib ], include_directories : [spa_inc ], c_args : [ '-D_GNU_SOURCE' ], - install : false), + install : installed_tests_enabled, + install_dir : installed_tests_execdir), env : [ 'SPA_PLUGIN_DIR=@0@/spa/plugins/'.format(meson.build_root()), ]) + + if installed_tests_enabled + test_conf = configuration_data() + test_conf.set('exec', join_paths(installed_tests_execdir, 'spa-' + a)) + configure_file( + input: installed_tests_template, + output: 'spa-' + a + '.test', + install_dir: installed_tests_metadir, + configuration: test_conf + ) + endif endforeach diff --git a/src/examples/meson.build b/src/examples/meson.build index dbb91c623..c7c07dd49 100644 --- a/src/examples/meson.build +++ b/src/examples/meson.build @@ -1,52 +1,60 @@ executable('video-src', 'video-src.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, mathlib], ) executable('video-src-alloc', 'video-src-alloc.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, mathlib], ) executable('audio-src', 'audio-src.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, mathlib], ) executable('audio-dsp-src', 'audio-dsp-src.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, mathlib], ) executable('export-source', 'export-source.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, mathlib], ) executable('audio-dsp-filter', 'audio-dsp-filter.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, mathlib], ) executable('export-spa', 'export-spa.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, mathlib], ) executable('export-spa-device', 'export-spa-device.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, mathlib], ) @@ -76,7 +84,8 @@ endif executable('bluez-session', 'bluez-session.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, mathlib], ) @@ -84,27 +93,31 @@ if sdl_dep.found() executable('video-play', 'video-play.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, sdl_dep, mathlib], ) executable('video-dsp-play', 'video-dsp-play.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, sdl_dep, mathlib], ) executable('local-v4l2', 'local-v4l2.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, sdl_dep], ) executable('export-sink', 'export-sink.c', c_args : [ '-D_GNU_SOURCE' ], - install: false, + install : installed_tests_enabled, + install_dir : join_paths(installed_tests_execdir, 'examples'), dependencies : [pipewire_dep, sdl_dep, mathlib], ) endif diff --git a/src/modules/meson.build b/src/modules/meson.build index a63e9ce91..0d3ddf845 100644 --- a/src/modules/meson.build +++ b/src/modules/meson.build @@ -127,12 +127,24 @@ test('pw-test-protocol-native', c_args : libpipewire_c_args, include_directories : [configinc, spa_inc ], dependencies : [pipewire_dep], - install : false), + install : installed_tests_enabled, + install_dir : installed_tests_execdir), env : [ 'SPA_PLUGIN_DIR=@0@/spa/plugins/'.format(meson.build_root()), 'PIPEWIRE_MODULE_DIR=@0@/src/modules/'.format(meson.build_root()) ]) +if installed_tests_enabled + test_conf = configuration_data() + test_conf.set('exec', join_paths(installed_tests_execdir, 'pw-test-protocol-native')) + configure_file( + input: installed_tests_template, + output: 'pw-test-protocol-native.test', + install_dir: installed_tests_metadir, + configuration: test_conf + ) +endif + pipewire_module_adapter = shared_library('pipewire-module-adapter', [ 'module-adapter.c', 'module-adapter/adapter.c', diff --git a/src/tests/meson.build b/src/tests/meson.build index e38bcf2af..20d7e72a6 100644 --- a/src/tests/meson.build +++ b/src/tests/meson.build @@ -15,17 +15,41 @@ foreach a : test_apps executable('pw-' + a, a + '.c', dependencies : [pipewire_dep], c_args : [ '-D_GNU_SOURCE' ], - install : false), + install : installed_tests_enabled, + install_dir : installed_tests_execdir), env : [ 'SPA_PLUGIN_DIR=@0@/spa/plugins/'.format(meson.build_root()), 'PIPEWIRE_MODULE_DIR=@0@/src/modules/'.format(meson.build_root()) ]) + + if installed_tests_enabled + test_conf = configuration_data() + test_conf.set('exec', join_paths(installed_tests_execdir, 'pw-' + a)) + configure_file( + input: installed_tests_template, + output: 'pw-' + a + '.test', + install_dir: installed_tests_metadir, + configuration: test_conf + ) + endif endforeach if have_cpp test_cpp = executable('pw-test-cpp', 'test-cpp.cpp', dependencies : [pipewire_dep], - install : false) + install : installed_tests_enabled, + install_dir : installed_tests_execdir) test('pw-test-cpp', test_cpp) + +if installed_tests_enabled + test_conf = configuration_data() + test_conf.set('exec', join_paths(installed_tests_execdir, 'pw-test-cpp')) + configure_file( + input: installed_tests_template, + output: 'pw-test-cpp.test', + install_dir: installed_tests_metadir, + configuration: test_conf + ) +endif endif diff --git a/template.test.in b/template.test.in new file mode 100644 index 000000000..f90c96e2b --- /dev/null +++ b/template.test.in @@ -0,0 +1,3 @@ +[Test] +Type=session +Exec=@exec@