Report.error (null, "GResources file `%s' does not exist".printf (gresource));
continue;
}
- var gresource_dir = Path.get_dirname (gresource);
+
MarkupReader reader = new MarkupReader (gresource);
int state = 0;
state = 1;
} else if (state == 1 && current_token == MarkupTokenType.TEXT) {
var name = reader.content;
- var filename = Path.build_filename (gresource_dir, name);
+ var filename = context.get_gresource_path (gresource, name);
if (alias != null) {
gresource_to_file_map.set (Path.build_filename (prefix, alias), filename);
}
var ui_file = gresource_to_file_map.get (ui_resource);
if (ui_file == null || !FileUtils.test (ui_file, FileTest.EXISTS)) {
node.error = true;
- Report.error (node.source_reference, "UI resource not found: `%s'. Please make sure to specify the proper GResources xml files with --gresources.".printf (ui_resource));
+ Report.error (node.source_reference, "UI resource not found: `%s'. Please make sure to specify the proper GResources xml files with --gresources and alternative search locations with --gresourcesdir.".printf (ui_resource));
return;
}
current_handler_to_signal_map = new HashMap<string, Signal>(str_hash, str_equal);
static string target_glib;
[CCode (array_length = false, array_null_terminated = true)]
static string[] gresources;
+ [CCode (array_length = false, array_null_terminated = true)]
+ static string[] gresources_directories;
static bool ccode_only;
static string header_filename;
{ "no-color", 0, 0, OptionArg.NONE, ref disable_colored_output, "Disable colored output, alias for --color=never", null },
{ "color", 0, OptionFlags.OPTIONAL_ARG, OptionArg.CALLBACK, (void*) option_parse_color, "Enable color output, options are 'always', 'never', or 'auto'", "WHEN" },
{ "target-glib", 0, 0, OptionArg.STRING, ref target_glib, "Target version of glib for code generation", "MAJOR.MINOR" },
- { "gresources", 0, 0, OptionArg.STRING_ARRAY, ref gresources, "XML of gresources", "FILE..." },
+ { "gresources", 0, 0, OptionArg.FILENAME_ARRAY, ref gresources, "XML of gresources", "FILE..." },
+ { "gresourcesdir", 0, 0, OptionArg.FILENAME_ARRAY, ref gresources_directories, "Look for resources in DIRECTORY", "DIRECTORY..." },
{ "enable-version-header", 0, 0, OptionArg.NONE, ref enable_version_header, "Write vala build version in generated files", null },
{ "disable-version-header", 0, 0, OptionArg.NONE, ref disable_version_header, "Do not write vala build version in generated files", null },
{ "", 0, 0, OptionArg.FILENAME_ARRAY, ref sources, null, "FILE..." },
}
context.gresources = gresources;
+ context.gresources_directories = gresources_directories;
if (context.report.get_errors () > 0 || (fatal_warnings && context.report.get_warnings () > 0)) {
return quit ();
public string[] gresources;
+ public string[] gresources_directories;
+
private List<SourceFile> source_files = new ArrayList<SourceFile> ();
private List<string> c_source_files = new ArrayList<string> ();
private Namespace _root = new Namespace (null);
return get_file_path (gir + ".gir", "gir-1.0", null, gir_directories);
}
+ public string? get_gresource_path (string gresource, string resource) {
+ var filename = get_file_path (resource, null, null, { Path.get_dirname (gresource) });
+ if (filename == null) {
+ filename = get_file_path (resource, null, null, gresources_directories);
+ }
+ return filename;
+ }
+
/*
* Returns the .metadata file associated with the given .gir file.
*/