diff options
-rw-r--r-- | meson.build | 81 | ||||
-rw-r--r-- | src/test/meson.build | 2 | ||||
-rw-r--r-- | src/test/test-dlopen.c | 32 |
3 files changed, 84 insertions, 31 deletions
diff --git a/meson.build b/meson.build index 2b719ec257..86a04a70ed 100644 --- a/meson.build +++ b/meson.build @@ -1046,6 +1046,46 @@ libsystemd = shared_library( ############################################################ +# binaries that have --help and are intended for use by humans, +# usually, but not always, installed in /bin. +public_programs = [] + +subdir('src/libudev') +subdir('src/shared') +subdir('src/core') +subdir('src/udev') +subdir('src/network') + +subdir('src/analyze') +subdir('src/journal-remote') +subdir('src/coredump') +subdir('src/hostname') +subdir('src/import') +subdir('src/kernel-install') +subdir('src/locale') +subdir('src/machine') +subdir('src/nspawn') +subdir('src/resolve') +subdir('src/timedate') +subdir('src/timesync') +subdir('src/vconsole') +subdir('src/sulogin-shell') +subdir('src/boot/efi') + +subdir('src/test') +subdir('test') + +############################################################ + +# only static linking apart from libdl, to make sure that the +# module is linked to all libraries that it uses. +test_dlopen = executable( + 'test-dlopen', + test_dlopen_c, + include_directories : includes, + link_with : [libbasic], + dependencies : [libdl]) + foreach tuple : [['myhostname', 'HAVE_MYHOSTNAME', []], ['systemd', '', []], ['mymachines', 'ENABLE_MACHINED', []], @@ -1059,7 +1099,7 @@ foreach tuple : [['myhostname', 'HAVE_MYHOSTNAME', []], sym = 'src/nss-@0@/nss-@0@.sym'.format(module) version_script_arg = join_paths(meson.current_source_dir(), sym) - shared_library( + nss = shared_library( 'nss_' + module, 'src/nss-@0@/nss-@0@.c'.format(module), version : '2', @@ -1080,40 +1120,15 @@ foreach tuple : [['myhostname', 'HAVE_MYHOSTNAME', []], meson.add_install_script('sh', '-c', 'rm $DESTDIR@0@/libnss_@1@.so' .format(rootlibdir, module)) + + test('dlopen-nss_' + module, + test_dlopen, + args : [nss.full_path()]) # path to dlopen must include a slash endif endforeach ############################################################ -# binaries that have --help and are intended for use by humans, -# usually, but not always, installed in /bin. -public_programs = [] - -subdir('src/libudev') -subdir('src/shared') -subdir('src/core') -subdir('src/udev') -subdir('src/network') - -subdir('src/analyze') -subdir('src/journal-remote') -subdir('src/coredump') -subdir('src/hostname') -subdir('src/import') -subdir('src/kernel-install') -subdir('src/locale') -subdir('src/machine') -subdir('src/nspawn') -subdir('src/resolve') -subdir('src/timedate') -subdir('src/timesync') -subdir('src/vconsole') -subdir('src/sulogin-shell') -subdir('src/boot/efi') - -subdir('src/test') -subdir('test') - executable('systemd', systemd_sources, include_directories : includes, @@ -1325,7 +1340,7 @@ if conf.get('ENABLE_LOGIND', 0) == 1 if conf.get('HAVE_PAM', 0) == 1 version_script_arg = join_paths(meson.current_source_dir(), pam_systemd_sym) - shared_library( + pam_systemd = shared_library( 'pam_systemd', pam_systemd_c, name_prefix : '', @@ -1340,6 +1355,10 @@ if conf.get('ENABLE_LOGIND', 0) == 1 link_depends : pam_systemd_sym, install : true, install_dir : pamlibdir) + + test('dlopen-pam_systemd', + test_dlopen, + args : [pam_systemd.full_path()]) # path to dlopen must include a slash endif endif diff --git a/src/test/meson.build b/src/test/meson.build index 17fda96af0..59a51d857e 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -35,6 +35,8 @@ test_libudev_sym_c = custom_target( command : [generate_sym_test_py, '@INPUT0@', '@INPUT1@'], capture : true) +test_dlopen_c = files('test-dlopen.c') + ############################################################ tests += [ diff --git a/src/test/test-dlopen.c b/src/test/test-dlopen.c new file mode 100644 index 0000000000..9f5343a7ea --- /dev/null +++ b/src/test/test-dlopen.c @@ -0,0 +1,32 @@ +/*** + This file is part of systemd. + + Copyright 2016 Zbigniew Jędrzejewski-Szmek + + systemd is free software; you can redistribute it and/or modify it + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) any later version. + + systemd is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with systemd; If not, see <http://www.gnu.org/licenses/>. +***/ + +#include <dlfcn.h> +#include <stdlib.h> + +#include "macro.h" + +int main(int argc, char **argv) { + void *handle; + + assert_se((handle = dlopen(argv[1], RTLD_NOW))); + assert_se(dlclose(handle) == 0); + + return EXIT_SUCCESS; +} |