Bug 557468 – Support for GI_TYPELIB_PATH
authorJohan Bilien <jobi@via.ecp.fr>
Thu, 23 Oct 2008 09:10:04 +0000 (09:10 +0000)
committerJohan Bilien <jobi@src.gnome.org>
Thu, 23 Oct 2008 09:10:04 +0000 (09:10 +0000)
2008-10-23  Johan Bilien  <jobi@via.ecp.fr>

Bug 557468 – Support for GI_TYPELIB_PATH

* girepository/girepository.c: if the GI_TYPELIB_PATH is set, add the
provided paths to the global search path.

svn path=/trunk/; revision=786

ChangeLog
gir/Makefile.am
girepository/girepository.c

index 57c95f1..1cfa551 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-10-23  Johan Bilien  <jobi@via.ecp.fr>
+
+       Bug 557468 – Support for GI_TYPELIB_PATH
+
+       * girepository/girepository.c: if the GI_TYPELIB_PATH is set, add the
+       provided paths to the global search path.
+
 2008-10-22  Tommi Komulainen  <tommi.komulainen@iki.fi>
 
        Bug 557379 – g-ir-generate not writing the 'abstract' attribute
index 4847302..f2f1d11 100644 (file)
@@ -121,7 +121,7 @@ dist_gir_DATA = $(BUILT_SOURCES)
 %.typelib: %.gir $(top_builddir)/tools/g-ir-compiler$(EXEEXT) Makefile
        $(DEBUG) $(top_builddir)/tools/g-ir-compiler$(EXEEXT) --includedir=. $(G_IR_COMPILER_OPTS) $< -o $@
 
-typelibsdir = $(datadir)/girepository
+typelibsdir = $(libdir)/girepository
 typelibs_DATA = GLib-2.0.typelib GModule-2.0.typelib GObject-2.0.typelib Gio-2.0.typelib
 CLEANFILES += $(typelibs_DATA)
 
index b43a451..3e90953 100644 (file)
@@ -84,8 +84,8 @@ init_globals ()
 {
   g_static_mutex_lock (&globals_lock);
 
-  if (default_repository == NULL) 
-    { 
+  if (default_repository == NULL)
+    {
       default_repository = g_object_new (G_TYPE_IREPOSITORY, NULL);
     }
 
@@ -93,14 +93,37 @@ init_globals ()
     {
       const gchar *const *datadirs;
       const gchar *const *dir;
-      
-      datadirs = g_get_system_data_dirs ();
-      
+      const gchar *type_lib_path_env;
+
+      type_lib_path_env = g_getenv ("GI_TYPELIB_PATH");
+
       search_path = NULL;
-      for (dir = datadirs; *dir; dir++) {
-       char *path = g_build_filename (*dir, "girepository", NULL);
-       search_path = g_slist_prepend (search_path, path);
-      }
+      if (type_lib_path_env)
+        {
+          gchar **custom_dirs;
+          gchar **d;
+
+          custom_dirs = g_strsplit (type_lib_path_env, G_SEARCHPATH_SEPARATOR_S, 0);
+
+          d = custom_dirs;
+          while (*d)
+            {
+              search_path = g_slist_prepend (search_path, *d);
+              d++;
+            }
+
+          /* ownership of the array content was passed to the list */
+          g_free (custom_dirs);
+        }
+
+      datadirs = g_get_system_data_dirs ();
+
+      for (dir = datadirs; *dir; dir++)
+        {
+          char *path = g_build_filename (*dir, "girepository", NULL);
+          search_path = g_slist_prepend (search_path, path);
+        }
+
       search_path = g_slist_reverse (search_path);
     }