var gir_parser = new GirParser ();
gir_parser.parse (context);
- if (gir_parser.get_package_names != null) {
- foreach (var pkg in gir_parser.get_package_names ()) {
- context.add_package (pkg);
- }
- }
-
if (context.report.get_errors () > 0 || (fatal_warnings && context.report.get_warnings () > 0)) {
return quit ();
}
MarkupTokenType current_token;
string[] cheader_filenames;
- string[] package_names;
HashMap<string,string> attributes_map = new HashMap<string,string> (str_hash, str_equal);
} else if (reader.name == "include") {
parse_include ();
} else if (reader.name == "package") {
- parse_package ();
+ var pkg = parse_package ();
+ if (context.has_package (pkg)) {
+ // package already provided elsewhere, stop parsing this GIR
+ return;
+ } else {
+ context.add_package (pkg);
+ }
} else if (reader.name == "c:include") {
parse_c_include ();
} else {
end_element ("include");
}
- void parse_package () {
+ string parse_package () {
start_element ("package");
- add_package_name (reader.get_attribute ("name"));
+ var pkg = reader.get_attribute ("name");
next ();
end_element ("package");
+ return pkg;
}
void parse_c_include () {
Report.error (null, "Metadata file `%s' not found".printf (metadata_filename));
}
}
-
- void add_package_name (string name) {
- if (package_names == null) {
- package_names = new string[0];
- }
-
- foreach (var existing in package_names) {
- if (name == existing) {
- return;
- }
- }
-
- package_names += name;
- }
-
- public string[]? get_package_names () {
- return package_names;
- }
}