From e2409e5e180f1fa369d0e87e38e4d646d9f68791 Mon Sep 17 00:00:00 2001 From: Tom Schoonjans Date: Fri, 6 Sep 2019 15:26:28 +0100 Subject: [PATCH 1/2] gmodule: use dl implementation on macOS Closes #1887 --- gmodule/meson.build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gmodule/meson.build b/gmodule/meson.build index d38ad2df1..5fce96de1 100644 --- a/gmodule/meson.build +++ b/gmodule/meson.build @@ -13,12 +13,12 @@ if host_system == 'windows' # dlopen() filepath must be of the form /path/libname.a(libname.so) elif host_system == 'aix' g_module_impl = 'G_MODULE_IMPL_AR' +elif have_dlopen_dlsym + g_module_impl = 'G_MODULE_IMPL_DL' # NSLinkModule (dyld) in system libraries (Darwin) elif cc.has_function('NSLinkModule') g_module_impl = 'G_MODULE_IMPL_DYLD' g_module_need_uscore = 1 -elif have_dlopen_dlsym - g_module_impl = 'G_MODULE_IMPL_DL' endif # additional checks for G_MODULE_IMPL_DL From 036f6ca7e3ef810498f2fd2ce9c9c1c2a3278f3c Mon Sep 17 00:00:00 2001 From: Tom Schoonjans Date: Fri, 6 Sep 2019 19:03:31 +0100 Subject: [PATCH 2/2] gmodule: write test for shared libraries --- tests/meson.build | 28 +++++++++++++++++++++++++--- tests/module-test.c | 4 ++-- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/tests/meson.build b/tests/meson.build index ce3044258..e4ea22692 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -44,9 +44,17 @@ tests = { 'type-test' : {}, 'unicode-caseconv' : {}, 'unicode-encoding' : {}, - 'module-test' : { + 'module-test-library' : { 'dependencies' : [libgmodule_dep], 'export_dynamic' : true, + 'source': 'module-test.c', + 'c_args': ['-DMODULE_TYPE="library"'], + }, + 'module-test-plugin' : { + 'dependencies' : [libgmodule_dep], + 'export_dynamic' : true, + 'source': 'module-test.c', + 'c_args': ['-DMODULE_TYPE="plugin"'], }, 'cxx-test' : { 'source' : 'cxx-test.cpp', @@ -87,11 +95,25 @@ if installed_tests_enabled ) endif +module_suffix = [] +# Keep the autotools convention for shared module suffix because GModule +# depends on it: https://gitlab.gnome.org/GNOME/glib/issues/520 +if ['darwin', 'ios'].contains(host_machine.system()) + module_suffix = 'so' +endif + foreach module : ['moduletestplugin_a', 'moduletestplugin_b'] - shared_module(module, 'lib@0@.c'.format(module), + shared_module(module + '_plugin', 'lib@0@.c'.format(module), dependencies : [libglib_dep, libgmodule_dep], install_dir : installed_tests_execdir, - install : installed_tests_enabled + install : installed_tests_enabled, + name_suffix : module_suffix + ) + shared_library(module + '_library', 'lib@0@.c'.format(module), + dependencies : [libglib_dep, libgmodule_dep], + install_dir : installed_tests_execdir, + install : installed_tests_enabled, + name_suffix : module_suffix ) endforeach diff --git a/tests/module-test.c b/tests/module-test.c index 8047b74ec..e0e6423f6 100644 --- a/tests/module-test.c +++ b/tests/module-test.c @@ -90,8 +90,8 @@ main (int argc, if (!g_module_supported ()) g_error ("dynamic modules not supported"); - plugin_a = g_test_build_filename (G_TEST_BUILT, MODULE_FILENAME_PREFIX "moduletestplugin_a", NULL); - plugin_b = g_test_build_filename (G_TEST_BUILT, MODULE_FILENAME_PREFIX "moduletestplugin_b", NULL); + plugin_a = g_test_build_filename (G_TEST_BUILT, MODULE_FILENAME_PREFIX "moduletestplugin_a_" MODULE_TYPE, NULL); + plugin_b = g_test_build_filename (G_TEST_BUILT, MODULE_FILENAME_PREFIX "moduletestplugin_b_" MODULE_TYPE, NULL); /* module handles */