static bool ccode_only;
static string header_filename;
+ static string internal_header_filename;
static bool compile_only;
static string output;
static bool debug;
{ "version", 0, 0, OptionArg.NONE, ref version, "Display version number", null },
{ "ccode", 'C', 0, OptionArg.NONE, ref ccode_only, "Output C code", null },
{ "header", 'H', 0, OptionArg.FILENAME, ref header_filename, "Output C header file", "FILE" },
+ { "internal-header", 'h', 0, OptionArg.FILENAME, ref internal_header_filename, "Output internal C header file", "FILE" },
{ "compile", 'c', 0, OptionArg.NONE, ref compile_only, "Compile but do not link", null },
{ "output", 'o', 0, OptionArg.FILENAME, ref output, "Place output in file FILE", "FILE" },
{ "debug", 'g', 0, OptionArg.NONE, ref debug, "Produce debug information", null },
context.ccode_only = ccode_only;
context.compile_only = compile_only;
context.header_filename = header_filename;
+ context.internal_header_filename = internal_header_filename;
context.output = output;
if (basedir == null) {
context.basedir = realpath (".");
public PropertyAccessor current_property_accessor;
public CCodeDeclarationSpace header_declarations;
+ public CCodeDeclarationSpace internal_header_declarations;
public CCodeDeclarationSpace source_declarations;
public CCodeFragment source_signal_marshaller_declaration;
}
header_declarations = new CCodeDeclarationSpace ();
+ internal_header_declarations = new CCodeDeclarationSpace ();
/* we're only interested in non-pkg source files */
var source_files = context.get_source_files ();
writer.close ();
}
}
+
+ // generate C header file for internal API
+ if (context.internal_header_filename != null) {
+ var writer = new CCodeWriter (context.internal_header_filename);
+ if (!writer.open ()) {
+ Report.error (null, "unable to open `%s' for writing".printf (writer.filename));
+ return;
+ }
+ writer.write_newline ();
+
+ var once = new CCodeOnceSection (get_define_for_filename (writer.filename));
+ once.append (new CCodeNewline ());
+ once.append (internal_header_declarations.include_directives);
+ once.append (new CCodeNewline ());
+ once.append (new CCodeIdentifier ("G_BEGIN_DECLS"));
+ once.append (new CCodeNewline ());
+ once.append (new CCodeNewline ());
+ once.append (internal_header_declarations.type_declaration);
+ once.append (new CCodeNewline ());
+ once.append (internal_header_declarations.type_definition);
+ once.append (new CCodeNewline ());
+ once.append (internal_header_declarations.type_member_declaration);
+ once.append (new CCodeNewline ());
+ once.append (internal_header_declarations.constant_declaration);
+ once.append (new CCodeNewline ());
+ once.append (new CCodeIdentifier ("G_END_DECLS"));
+ once.append (new CCodeNewline ());
+ once.append (new CCodeNewline ());
+ once.write (writer);
+ writer.close ();
+ }
}
public override CCodeIdentifier get_value_setter_function (DataType type_reference) {
generated_external_symbols = new HashSet<Symbol> ();
header_declarations.add_include ("glib.h");
+ internal_header_declarations.add_include ("glib.h");
source_declarations.add_include ("glib.h");
source_declarations.add_include ("glib-object.h");
if (!en.is_internal_symbol ()) {
generate_enum_declaration (en, header_declarations);
}
+ generate_enum_declaration (en, internal_header_declarations);
if (!en.has_type_id) {
return;
if (!f.is_internal_symbol ()) {
generate_field_declaration (f, header_declarations);
}
+ generate_field_declaration (f, internal_header_declarations);
lhs = new CCodeIdentifier (f.get_cname ());
|| acc.access == SymbolAccessibility.PROTECTED)) {
generate_property_accessor_declaration (acc, header_declarations);
}
+ generate_property_accessor_declaration (acc, internal_header_declarations);
}
var this_type = new ObjectType (t);