From f401f399a85dbeb2de165b9b9162eb552ab6eea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Mon, 30 Mar 2020 20:47:22 +0200 Subject: [PATCH] pam: Get preloaded libraries paths using compiler In order to run pam module tests we need to pass the libraries via LD_PRELOAD, this supports a list of library paths, so use the compiler in order to find their full paths (with soname) and check their presence. In order to support linker scripts we need to introduce a workaround. See meson issue https://github.com/mesonbuild/meson/issues/6880 --- tests/pam/meson.build | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/tests/pam/meson.build b/tests/pam/meson.build index d4ad3c5..f738f00 100644 --- a/tests/pam/meson.build +++ b/tests/pam/meson.build @@ -4,6 +4,31 @@ tests = [ 'test_pam_fprintd', ] +preloaded_libs = [ + 'pam_wrapper' +] +pam_tests_ld_preload = [] + +foreach libname: preloaded_libs + lib = run_command(meson.get_compiler('c'), + '-print-file-name=lib@0@.so'.format(libname) + ).stdout().strip() + + # Support linker script files + if run_command('grep', '-qI', '^INPUT', files(lib)).returncode() == 0 + out = run_command('cat', lib).stdout() + lib = out.split('(')[1].split(')')[0].strip() + endif + + if lib != '' and lib[0] == '/' + message('Found library @0@ as @1@'.format(libname, lib)) + pam_tests_ld_preload += '@0@'.format(files(lib)[0]) + else + tests = [] + warning('No library found for ' + libname + ', skipping PAM tests') + endif +endforeach + foreach t: tests python_tests += [ { @@ -12,7 +37,7 @@ foreach t: tests 'env': [ 'TOPBUILDDIR=' + meson.build_root(), 'TOPSRCDIR=' + meson.source_root(), - 'LD_PRELOAD=libpam_wrapper.so', + 'LD_PRELOAD=' + ' '.join(pam_tests_ld_preload), 'PAM_WRAPPER=1', 'PAM_WRAPPER_DEBUGLEVEL=2', 'PAM_WRAPPER_SERVICE_DIR=' + meson.current_build_dir() / 'services',