summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDieter Verfaillie <dieterv@optionexplicit.be>2011-09-05 17:19:39 +0200
committerDieter Verfaillie <dieterv@optionexplicit.be>2011-09-07 22:00:09 +0200
commit2e711659d036fcf5a7c2e7201bb1d0fd7334ebb5 (patch)
treebb2b1aa82cdcdde8cfe9aea94bd1f5579d2e9936
parent9ccfb14c08d11e3217779681123d60f930d8e684 (diff)
downloadgobject-introspection-2e711659d036fcf5a7c2e7201bb1d0fd7334ebb5.tar.gz
Windows port: compute GOBJECT_INTROSPECTION_LIBDIR at runtime.
Otherwise, we fail to properly locate the typelibs, because on Windows the value of GOBJECT_INTROSPECTION_LIBDIR depends on where Glib has been installed. Due to the nature of how we handle software that depends on Glib on Windows (it is recommended that each program bundles it's private copy), we're working in a "multi-prefixed" environment. Hence the value computed at build time will most likely not even exist at runtime. https://bugzilla.gnome.org/show_bug.cgi?id=620566
-rw-r--r--girepository/girepository.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/girepository/girepository.c b/girepository/girepository.c
index a2a778d9..cc81107f 100644
--- a/girepository/girepository.c
+++ b/girepository/girepository.c
@@ -50,6 +50,39 @@ struct _GIRepositoryPrivate
G_DEFINE_TYPE (GIRepository, g_irepository, G_TYPE_OBJECT);
+#ifdef G_PLATFORM_WIN32
+
+#include <windows.h>
+
+static HMODULE girepository_dll = NULL;
+
+#ifdef DLL_EXPORT
+
+BOOL WINAPI
+DllMain (HINSTANCE hinstDLL,
+ DWORD fdwReason,
+ LPVOID lpvReserved)
+{
+ if (fdwReason == DLL_PROCESS_ATTACH)
+ girepository_dll = hinstDLL;
+
+ return TRUE;
+}
+
+#endif
+
+#undef GOBJECT_INTROSPECTION_LIBDIR
+
+/* GOBJECT_INTROSPECTION_LIBDIR is used only in code called just once,
+ * so no problem leaking this
+ */
+#define GOBJECT_INTROSPECTION_LIBDIR \
+ g_build_filename (g_win32_get_package_installation_directory_of_module (girepository_dll), \
+ "lib", \
+ NULL)
+
+#endif
+
static void
g_irepository_init (GIRepository *repository)
{