From ad2ecdfb45e1fea4f0138f864dd39cbfae843091 Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Wed, 21 Apr 2021 10:19:37 -0500 Subject: Abort when libsoup 2 is already loaded in process This avoids accidental mixups causing unpredictable issues --- libsoup/meson.build | 3 +++ libsoup/soup-init.c | 13 +++++++++++++ meson.build | 15 +++++++++++++++ 3 files changed, 31 insertions(+) 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 #endif +#ifdef HAVE_RTLD_NOLOAD +#include +#endif + #include #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 ', 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 ', + 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'), -- cgit v1.2.1