blob: 9bfb6e85ccf7977079a35dea8abf45c0598d87a8 [file] [log] [blame]
Andrew Geisslereff27472021-10-29 15:35:00 -05001From ab071f315deed3740f867161ee58436b985d6fc1 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
Andrew Geisslereff27472021-10-29 15:35:00 -050022index d34037a..7442df6 100644
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050023--- a/gio/giomodule.c
24+++ b/gio/giomodule.c
Andrew Geisslereff27472021-10-29 15:35:00 -050025@@ -54,6 +54,8 @@
Patrick Williamsc0f7c042017-02-23 20:41:17 -060026 #ifdef G_OS_WIN32
27 #include "gregistrysettingsbackend.h"
Andrew Geisslerc926e172021-05-07 16:11:35 -050028 #include "giowin32-priv.h"
Patrick Williamsc0f7c042017-02-23 20:41:17 -060029+#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
Andrew Geisslereff27472021-10-29 15:35:00 -050034@@ -1224,7 +1226,15 @@ get_gio_module_dir (void)
Andrew Geissler4b740dc2020-05-05 08:54:39 -050035 NULL);
Patrick Williamsc0f7c042017-02-23 20:41:17 -060036 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