mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-26 15:36:14 +01:00
Add GI_GIR_PATH environment variable
This is searched after any command-line includes paths, but before the XDG_DATA_DIRS or any built-in paths. For example, if libraries are installed in /opt/gnome and GObject-Introspection was configured with -Dgir_dir_prefix=lib64, you could set either GI_GIR_PATH=/opt/gnome/lib64/gir-1.0 or XDG_DATA_DIRS=/opt/gnome/lib64:/opt/gnome/share:${XDG_DATA_DIRS}. Use this to communicate the ../gir directory to giscanner instead of modifying Python's builtins. Helps: #323, #455 Signed-off-by: Simon McVittie <smcv@debian.org>
This commit is contained in:
parent
59ae4e65d2
commit
19f14589d3
28
girparser.c
28
girparser.c
@ -58,6 +58,7 @@
|
||||
struct _GIrParser
|
||||
{
|
||||
gchar **includes;
|
||||
gchar **gi_gir_path;
|
||||
GList *parsed_modules; /* All previously parsed modules */
|
||||
};
|
||||
|
||||
@ -184,6 +185,10 @@ GIrParser *
|
||||
_g_ir_parser_new (void)
|
||||
{
|
||||
GIrParser *parser = g_slice_new0 (GIrParser);
|
||||
const char *gi_gir_path = g_getenv ("GI_GIR_PATH");
|
||||
|
||||
if (gi_gir_path != NULL)
|
||||
parser->gi_gir_path = g_strsplit (gi_gir_path, G_SEARCHPATH_SEPARATOR_S, 0);
|
||||
|
||||
return parser;
|
||||
}
|
||||
@ -193,8 +198,8 @@ _g_ir_parser_free (GIrParser *parser)
|
||||
{
|
||||
GList *l;
|
||||
|
||||
if (parser->includes)
|
||||
g_strfreev (parser->includes);
|
||||
g_strfreev (parser->includes);
|
||||
g_strfreev (parser->gi_gir_path);
|
||||
|
||||
for (l = parser->parsed_modules; l; l = l->next)
|
||||
_g_ir_module_free (l->data);
|
||||
@ -206,8 +211,7 @@ void
|
||||
_g_ir_parser_set_includes (GIrParser *parser,
|
||||
const gchar *const *includes)
|
||||
{
|
||||
if (parser->includes)
|
||||
g_strfreev (parser->includes);
|
||||
g_strfreev (parser->includes);
|
||||
|
||||
parser->includes = g_strdupv ((char **)includes);
|
||||
}
|
||||
@ -307,6 +311,22 @@ locate_gir (GIrParser *parser,
|
||||
g_clear_pointer (&path, g_free);
|
||||
}
|
||||
}
|
||||
|
||||
if (parser->gi_gir_path != NULL)
|
||||
{
|
||||
for (dir = (const gchar *const *) parser->gi_gir_path; *dir; dir++)
|
||||
{
|
||||
if (**dir == '\0')
|
||||
continue;
|
||||
|
||||
path = g_build_filename (*dir, girname, NULL);
|
||||
g_debug ("Trying %s from GI_GIR_PATH", path);
|
||||
if (g_file_test (path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR))
|
||||
return g_steal_pointer (&path);
|
||||
g_clear_pointer (&path, g_free);
|
||||
}
|
||||
}
|
||||
|
||||
for (dir = datadirs; *dir; dir++)
|
||||
{
|
||||
path = g_build_filename (*dir, GIR_SUFFIX, girname, NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user