blob: 380bee086c074b639276f5464a366eaf57320ce8 [file] [log] [blame]
Brad Bishop96ff1982019-08-19 13:50:42 -04001From 9c5d6e6ce5254a5f050bba2118a4a1807292c02a Mon Sep 17 00:00:00 2001
Brad Bishop1a4b7ee2018-12-16 17:11:34 -08002From: Ross Burton <ross.burton@intel.com>
3Date: Fri, 11 Mar 2016 15:35:55 +0000
4Subject: [PATCH] glib-2.0: relocate the GIO module directory for native builds
5
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05006Instead of hard-coding GIO_MODULE_PATH when glib is built, use dladdr() to
7determine where libglib.so is and use that path to calculate GIO_MODULES_DIR.
8
9This solves relocation problems with GIOModule for native builds of glib.
10
11Upstream-Status: Inappropriate
12Signed-off-by: Ross Burton <ross.burton@intel.com>
13
Patrick Williamsc0f7c042017-02-23 20:41:17 -060014Port patch to 2.48
15Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080016
Patrick Williamsc0f7c042017-02-23 20:41:17 -060017---
18 gio/giomodule.c | 12 +++++++++++-
19 1 file changed, 11 insertions(+), 1 deletion(-)
20
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050021diff --git a/gio/giomodule.c b/gio/giomodule.c
Brad Bishop15ae2502019-06-18 21:44:24 -040022index b92162d..fce9933 100644
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050023--- a/gio/giomodule.c
24+++ b/gio/giomodule.c
Patrick Williamsc0f7c042017-02-23 20:41:17 -060025@@ -40,6 +40,8 @@
26 #include "gnetworkmonitor.h"
27 #ifdef G_OS_WIN32
28 #include "gregistrysettingsbackend.h"
29+#else
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050030+#include <dlfcn.h>
Patrick Williamsc0f7c042017-02-23 20:41:17 -060031 #endif
32 #include <glib/gstdio.h>
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050033
Brad Bishop15ae2502019-06-18 21:44:24 -040034@@ -1156,7 +1158,15 @@ get_gio_module_dir (void)
Patrick Williamsc0f7c042017-02-23 20:41:17 -060035 #endif
36 g_free (install_dir);
37 #else
38- module_dir = g_strdup (GIO_MODULE_DIR);
39+ Dl_info info;
40+
41+ if (dladdr (g_io_module_new, &info)) {
42+ char *libdir = g_path_get_dirname (info.dli_fname);
43+ module_dir = g_build_filename (libdir, "gio", "modules", NULL);
44+ g_free (libdir);
45+ } else {
46+ module_dir = g_strdup (GIO_MODULE_DIR);
47+ }
48 #endif
49 }
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050050