]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Generate <c:include/> tags
authorDidier 'Ptitjes <ptitjes@free.fr>
Fri, 20 Mar 2009 14:47:03 +0000 (15:47 +0100)
committerJürg Billeter <j@bitron.ch>
Thu, 26 Mar 2009 08:07:20 +0000 (09:07 +0100)
Signed-off-by: Didier 'Ptitjes <ptitjes@free.fr>
gobject/valagirwriter.vala

index ad7582cd2443047ed915933b41408034f20d4ec8..0c13c3e3408033ed812d1594d80dca99d6412a8e 100644 (file)
@@ -68,6 +68,29 @@ public class Vala.GIRWriter : CodeVisitor {
                stream = null;
        }
 
+       private void write_c_includes (Namespace ns) {
+               // Collect C header filenames
+               Gee.Set<string> header_filenames = new Gee.HashSet<string> (str_hash, str_equal);
+               foreach (string c_header_filename in ns.get_cheader_filenames ()) {
+                       header_filenames.add (c_header_filename);
+               }
+               foreach (Symbol symbol in ns.scope.get_symbol_table ().get_values ()) {
+                       foreach (string c_header_filename in symbol.get_cheader_filenames ()) {
+                               header_filenames.add (c_header_filename);
+                       }
+               }
+
+               // Generate c:include tags
+               foreach (string c_header_filename in header_filenames) {
+                       write_c_include (c_header_filename);
+               }
+       }
+
+       private void write_c_include (string name) {
+               write_indent ();
+               stream.printf ("<c:include name=\"%s\"/>\n", name);
+       }
+
        public override void visit_namespace (Namespace ns) {
                if (ns.external_package) {
                        return;
@@ -85,6 +108,8 @@ public class Vala.GIRWriter : CodeVisitor {
                        return;
                }
 
+               write_c_includes (ns);
+
                write_indent ();
                stream.printf ("<namespace name=\"%s\" version=\"1.0\">\n", ns.name);
                indent++;