diff --git a/gio/tests/giomodule.c b/gio/tests/giomodule.c index e832e95d37b6c19c9a7fce2adbc6eb47aced4256..893357110e0d74e94fd7f40b5f3172964b545daa 100644 --- a/gio/tests/giomodule.c +++ b/gio/tests/giomodule.c @@ -76,51 +76,57 @@ test_extension_point (void) static void test_module_scan_all (void) { - if (g_test_subprocess ()) + if (g_module_supported ()) { - GIOExtensionPoint *ep; - GIOExtension *ext; - GList *list; - ep = g_io_extension_point_register ("test-extension-point"); - g_io_modules_scan_all_in_directory (g_test_get_filename (G_TEST_BUILT, "modules", NULL)); - g_io_modules_scan_all_in_directory (g_test_get_filename (G_TEST_BUILT, "modules/.libs", NULL)); - list = g_io_extension_point_get_extensions (ep); - g_assert_cmpint (g_list_length (list), ==, 2); - ext = list->data; - g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-b"); - ext = list->next->data; - g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-a"); - return; + if (g_test_subprocess ()) + { + GIOExtensionPoint *ep; + GIOExtension *ext; + GList *list; + ep = g_io_extension_point_register ("test-extension-point"); + g_io_modules_scan_all_in_directory (g_test_get_filename (G_TEST_BUILT, "modules", NULL)); + g_io_modules_scan_all_in_directory (g_test_get_filename (G_TEST_BUILT, "modules/.libs", NULL)); + list = g_io_extension_point_get_extensions (ep); + g_assert_cmpint (g_list_length (list), ==, 2); + ext = list->data; + g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-b"); + ext = list->next->data; + g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-a"); + return; + } + g_test_trap_subprocess (NULL, 0, 7); + g_test_trap_assert_passed (); } - g_test_trap_subprocess (NULL, 0, 7); - g_test_trap_assert_passed (); } static void test_module_scan_all_with_scope (void) { - if (g_test_subprocess ()) + if (g_module_supported ()) { - GIOExtensionPoint *ep; - GIOModuleScope *scope; - GIOExtension *ext; - GList *list; + if (g_test_subprocess ()) + { + GIOExtensionPoint *ep; + GIOModuleScope *scope; + GIOExtension *ext; + GList *list; - ep = g_io_extension_point_register ("test-extension-point"); - scope = g_io_module_scope_new (G_IO_MODULE_SCOPE_BLOCK_DUPLICATES); - g_io_module_scope_block (scope, "libtestmoduleb." G_MODULE_SUFFIX); - g_io_modules_scan_all_in_directory_with_scope (g_test_get_filename (G_TEST_BUILT, "modules", NULL), scope); - list = g_io_extension_point_get_extensions (ep); - g_io_modules_scan_all_in_directory_with_scope (g_test_get_filename (G_TEST_BUILT, "modules/.libs", NULL), scope); - list = g_io_extension_point_get_extensions (ep); - g_assert_cmpint (g_list_length (list), ==, 1); - ext = list->data; - g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-a"); - g_io_module_scope_free (scope); - return; + ep = g_io_extension_point_register ("test-extension-point"); + scope = g_io_module_scope_new (G_IO_MODULE_SCOPE_BLOCK_DUPLICATES); + g_io_module_scope_block (scope, "libtestmoduleb." G_MODULE_SUFFIX); + g_io_modules_scan_all_in_directory_with_scope (g_test_get_filename (G_TEST_BUILT, "modules", NULL), scope); + list = g_io_extension_point_get_extensions (ep); + g_io_modules_scan_all_in_directory_with_scope (g_test_get_filename (G_TEST_BUILT, "modules/.libs", NULL), scope); + list = g_io_extension_point_get_extensions (ep); + g_assert_cmpint (g_list_length (list), ==, 1); + ext = list->data; + g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-a"); + g_io_module_scope_free (scope); + return; + } + g_test_trap_subprocess (NULL, 0, 7); + g_test_trap_assert_passed (); } - g_test_trap_subprocess (NULL, 0, 7); - g_test_trap_assert_passed (); } int diff --git a/gmodule/meson.build b/gmodule/meson.build index e4a6a1c811c97ea32e27c79a766dd31205e7789b..77ffdc476a631eed8403a88b08006e6fb4b16494 100644 --- a/gmodule/meson.build +++ b/gmodule/meson.build @@ -8,7 +8,8 @@ libdl_dep = [ ] g_module_lib_args = [ ] g_module_impl = '' -dlopen_dlsym_test_code = ''' +if get_option('default_library') != 'static' + dlopen_dlsym_test_code = ''' #include <dlfcn.h> int glib_underscore_test (void) { return 42; } int main (int argc, char ** argv) { @@ -21,48 +22,49 @@ int main (int argc, char ** argv) { return (!f2 || f1); }''' -# On Windows force native WIN32 shared lib loader -if host_system == 'windows' - g_module_impl = 'G_MODULE_IMPL_WIN32' -# Force native AIX library loader -# dlopen() filepath must be of the form /path/libname.a(libname.so) -elif host_system == 'aix' - g_module_impl = 'G_MODULE_IMPL_AR' -elif cc.links(dlopen_dlsym_test_code, name : 'dlopen() and dlsym() in system libraries') - 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 cc.links(dlopen_dlsym_test_code, args : '-ldl', name : 'dlopen() and dlsym() in libdl') - g_module_impl = 'G_MODULE_IMPL_DL' - libdl_dep = cc.find_library('dl') - g_module_lib_args = '-ldl' -endif + # On Windows force native WIN32 shared lib loader + if host_system == 'windows' + g_module_impl = 'G_MODULE_IMPL_WIN32' + # Force native AIX library loader + # dlopen() filepath must be of the form /path/libname.a(libname.so) + elif host_system == 'aix' + g_module_impl = 'G_MODULE_IMPL_AR' + elif cc.links(dlopen_dlsym_test_code, name : 'dlopen() and dlsym() in system libraries') + 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 cc.links(dlopen_dlsym_test_code, args : '-ldl', name : 'dlopen() and dlsym() in libdl') + g_module_impl = 'G_MODULE_IMPL_DL' + libdl_dep = cc.find_library('dl') + g_module_lib_args = '-ldl' + endif -# additional checks for G_MODULE_IMPL_DL -if g_module_impl == 'G_MODULE_IMPL_DL' - # FIXME: check for OSF1/5.0 RTLD_GLOBAL brokenness (is this still relevant?) + # additional checks for G_MODULE_IMPL_DL + if g_module_impl == 'G_MODULE_IMPL_DL' + # FIXME: check for OSF1/5.0 RTLD_GLOBAL brokenness (is this still relevant?) - # Check whether we need preceding underscores - if cc.get_id() == 'msvc' - message('Building for MSVC: assuming that symbols are prefixed with underscore') - g_module_need_uscore = 1 - elif meson.has_exe_wrapper() - # FIXME: communicate result via stdout instead of return value, so non-0 return is not printed in bold red - rres = cc.run(dlopen_dlsym_test_code, - args : g_module_lib_args, - name : 'dlsym() preceding underscores') - if host_system == 'windows' or rres.returncode() == 0 + # Check whether we need preceding underscores + if cc.get_id() == 'msvc' + message('Building for MSVC: assuming that symbols are prefixed with underscore') g_module_need_uscore = 1 + elif meson.has_exe_wrapper() + # FIXME: communicate result via stdout instead of return value, so non-0 return is not printed in bold red + rres = cc.run(dlopen_dlsym_test_code, + args : g_module_lib_args, + name : 'dlsym() preceding underscores') + if host_system == 'windows' or rres.returncode() == 0 + g_module_need_uscore = 1 + endif + else + message('Cross-compiling: assuming that symbols aren\'t prefixed with underscore') + g_module_need_uscore = 0 endif - else - message('Cross-compiling: assuming that symbols aren\'t prefixed with underscore') - g_module_need_uscore = 0 - endif - if cc.has_function('dlerror', args : g_module_lib_args) - g_module_have_dlerror = 1 + if cc.has_function('dlerror', args : g_module_lib_args) + g_module_have_dlerror = 1 + endif endif endif diff --git a/tests/module-test.c b/tests/module-test.c index fbf23169f730f3ecf2f24c1071f6ee1869fdc2fe..04a12128923258fe0ab0b37e618fe89b11cb0327 100644 --- a/tests/module-test.c +++ b/tests/module-test.c @@ -82,7 +82,7 @@ main (int argc, g_test_init (&argc, &argv, NULL); if (!g_module_supported ()) - g_error ("dynamic modules not supported"); + return 0; plugin_a = g_test_build_filename (G_TEST_BUILT, "libmoduletestplugin_a", NULL); plugin_b = g_test_build_filename (G_TEST_BUILT, "libmoduletestplugin_b", NULL);