summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Griffis <pgriffis@igalia.com>2021-04-21 10:19:37 -0500
committerPatrick Griffis <pgriffis@igalia.com>2021-04-21 19:21:36 -0500
commitad2ecdfb45e1fea4f0138f864dd39cbfae843091 (patch)
tree532b012b0997ebc4d0db08e028becf3f3b0018ea
parent0a6b2555b7ca74d7b879fa5ff06daf1bd22a56f6 (diff)
downloadlibsoup-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.build3
-rw-r--r--libsoup/soup-init.c13
-rw-r--r--meson.build15
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'),