summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch')
-rw-r--r--meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch49
1 files changed, 49 insertions, 0 deletions
diff --git a/meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch b/meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch
new file mode 100644
index 0000000000..f9e3f3dbaa
--- /dev/null
+++ b/meta/recipes-core/glib-2.0/glib-2.0/relocate-modules.patch
@@ -0,0 +1,49 @@
1Instead of hard-coding GIO_MODULE_PATH when glib is built, use dladdr() to
2determine where libglib.so is and use that path to calculate GIO_MODULES_DIR.
3
4This solves relocation problems with GIOModule for native builds of glib.
5
6Upstream-Status: Inappropriate
7Signed-off-by: Ross Burton <ross.burton@intel.com>
8
9diff --git a/gio/giomodule.c b/gio/giomodule.c
10index 56c498c..a2e32b7 100644
11--- a/gio/giomodule.c
12+++ b/gio/giomodule.c
13@@ -47,6 +47,27 @@
14 #include "gdesktopappinfo.h"
15 #endif
16
17+#include <dlfcn.h>
18+
19+/*
20+ * Generate a GIO module directory based on where glib is installed
21+ */
22+static const char *
23+_get_gio_module_dir (void)
24+{
25+ Dl_info info;
26+
27+ if (dladdr (g_io_module_new, &info)) {
28+ char *libdir = g_path_get_dirname (info.dli_fname);
29+ char *dir = g_build_filename (libdir, "gio", "modules", NULL);
30+ g_free (libdir);
31+ return dir;
32+ } else {
33+ return GIO_MODULE_DIR;
34+ }
35+}
36+
37+
38 /**
39 * SECTION:giomodule
40 * @short_description: Loadable GIO Modules
41@@ -1057,7 +1078,7 @@ _g_io_modules_ensure_loaded (void)
42 /* Then load the compiled in path */
43 module_dir = g_getenv ("GIO_MODULE_DIR");
44 if (module_dir == NULL)
45- module_dir = GIO_MODULE_DIR;
46+ module_dir = _get_gio_module_dir ();
47
48 g_io_modules_scan_all_in_directory_with_scope (module_dir, scope);
49