Instead of hard-coding GIO_MODULE_PATH when glib is built, use dladdr() to determine where libglib.so is and use that path to calculate GIO_MODULES_DIR. This solves relocation problems with GIOModule for native builds of glib. Upstream-Status: Inappropriate Signed-off-by: Ross Burton diff --git a/gio/giomodule.c b/gio/giomodule.c index 56c498c..a2e32b7 100644 --- a/gio/giomodule.c +++ b/gio/giomodule.c @@ -47,6 +47,27 @@ #include "gdesktopappinfo.h" #endif +#include + +/* + * Generate a GIO module directory based on where glib is installed + */ +static const char * +_get_gio_module_dir (void) +{ + Dl_info info; + + if (dladdr (g_io_module_new, &info)) { + char *libdir = g_path_get_dirname (info.dli_fname); + char *dir = g_build_filename (libdir, "gio", "modules", NULL); + g_free (libdir); + return dir; + } else { + return GIO_MODULE_DIR; + } +} + + /** * SECTION:giomodule * @short_description: Loadable GIO Modules @@ -1057,7 +1078,7 @@ _g_io_modules_ensure_loaded (void) /* Then load the compiled in path */ module_dir = g_getenv ("GIO_MODULE_DIR"); if (module_dir == NULL) - module_dir = GIO_MODULE_DIR; + module_dir = _get_gio_module_dir (); g_io_modules_scan_all_in_directory_with_scope (module_dir, scope);