diff options
author | Patrick Griffis <pgriffis@igalia.com> | 2021-04-21 10:19:37 -0500 |
---|---|---|
committer | Patrick Griffis <pgriffis@igalia.com> | 2021-04-21 19:21:36 -0500 |
commit | ad2ecdfb45e1fea4f0138f864dd39cbfae843091 (patch) | |
tree | 532b012b0997ebc4d0db08e028becf3f3b0018ea | |
parent | 0a6b2555b7ca74d7b879fa5ff06daf1bd22a56f6 (diff) | |
download | libsoup-wip/noload.tar.gz |
Abort when libsoup 2 is already loaded in processwip/noload
This avoids accidental mixups causing unpredictable issues
-rw-r--r-- | libsoup/meson.build | 3 | ||||
-rw-r--r-- | libsoup/soup-init.c | 13 | ||||
-rw-r--r-- | meson.build | 15 |
3 files changed, 31 insertions, 0 deletions
diff --git a/libsoup/meson.build b/libsoup/meson.build index adcccc3e..49d0d1aa 100644 --- a/libsoup/meson.build +++ b/libsoup/meson.build @@ -203,6 +203,7 @@ libsoup = library('soup-@0@'.format(apiversion), soversion : soversion, darwin_versions: darwin_versions, c_args : libsoup_c_args, + link_args : dl_link_args, include_directories : libsoup_includes, gnu_symbol_visibility: 'hidden', install : true, @@ -215,6 +216,7 @@ libsoup_static = static_library('soup-@0@-static'.format(apiversion), soup_enums, ], c_args : libsoup_c_args, + link_args : dl_link_args, include_directories : libsoup_includes, dependencies : deps, ) @@ -236,6 +238,7 @@ libsoup_dep = declare_dependency(link_with : libsoup, libsoup_static_dep = declare_dependency(link_with : libsoup_static, include_directories : libsoup_includes, sources : soup_enum_h, + link_args : dl_link_args, dependencies : [ platform_deps, glib_deps ] ) diff --git a/libsoup/soup-init.c b/libsoup/soup-init.c index 816c9ae9..9371139f 100644 --- a/libsoup/soup-init.c +++ b/libsoup/soup-init.c @@ -9,6 +9,10 @@ #include <config.h> #endif +#ifdef HAVE_RTLD_NOLOAD +#include <dlfcn.h> +#endif + #include <glib/gi18n-lib.h> #include "gconstructor.h" @@ -34,6 +38,15 @@ soup_init (void) #ifdef HAVE_BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); #endif + +#ifdef HAVE_RTLD_NOLOAD + gpointer handle = dlopen("libsoup-2.4.so.1", RTLD_NOW | RTLD_NOLOAD); + if (handle) { + g_error ("libsoup 2 was detected while loading libsoup 3. This is not supported."); + dlclose (handle); + } +#endif + } #if defined (G_OS_WIN32) diff --git a/meson.build b/meson.build index 3881d7c7..02823395 100644 --- a/meson.build +++ b/meson.build @@ -161,6 +161,21 @@ if cc.has_function('gmtime_r', prefix : '#include <time.h>', args : default_sour cdata.set('HAVE_GMTIME_R', '1') endif +# dlopen +dl_dep = dependency('dl', required : false) +dl_link_args = '' +if cc.has_function('dlopen', + prefix : '#include <dlfcn.h>', + dependencies : dl_dep, + args : '-ldl' +) + cdata.set('HAVE_RTLD_NOLOAD', + cc.has_header_symbol('dlfcn.h', 'RTLD_NOLOAD') + ) + platform_deps += dl_dep + dl_link_args = '-ldl' +endif + # sysprof support libsysprof_capture_dep = dependency('sysprof-capture-4', required: get_option('sysprof'), |