}
header_declarations = new CCodeDeclarationSpace ();
+ header_declarations.is_header = true;
internal_header_declarations = new CCodeDeclarationSpace ();
+ internal_header_declarations.is_header = true;
/* we're only interested in non-pkg source files */
var source_files = context.get_source_files ();
}
public void generate_property_accessor_declaration (PropertyAccessor acc, CCodeDeclarationSpace decl_space) {
- if (decl_space.add_symbol_declaration (acc.prop, acc.get_cname ())) {
+ if (decl_space.add_symbol_declaration (acc, acc.get_cname ())) {
return;
}
using Gee;
class Vala.CCodeDeclarationSpace {
+ public bool is_header { get; set; }
+
Set<string> declarations = new HashSet<string> (str_hash, str_equal);
Set<string> includes = new HashSet<string> (str_hash, str_equal);
internal CCodeFragment include_directives = new CCodeFragment ();
if (add_declaration (name)) {
return true;
}
- if (sym.external_package) {
+ if (sym.external_package || (!is_header && CodeContext.get ().use_header && !sym.is_internal_symbol ())) {
// add appropriate include file
foreach (string header_filename in sym.get_cheader_filenames ()) {
- add_include (header_filename);
+ add_include (header_filename, !sym.external_package);
}
// declaration complete
return true;
static bool ccode_only;
static string header_filename;
+ static bool use_header;
static string internal_header_filename;
static string internal_vapi_filename;
static string includedir;
{ "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" },
+ { "use-header", 0, 0, OptionArg.NONE, ref use_header, "Use C header file", null },
{ "includedir", 0, 0, OptionArg.FILENAME, ref includedir, "Directory used to include the C header file", "DIRECTORY" },
{ "internal-header", 'h', 0, OptionArg.FILENAME, ref internal_header_filename, "Output internal C header file", "FILE" },
{ "internal-vapi", 0, 0, OptionArg.FILENAME, ref internal_vapi_filename, "Output vapi with internal api", "FILE" },
context.ccode_only = ccode_only;
context.compile_only = compile_only;
context.header_filename = header_filename;
+ context.use_header = use_header;
context.internal_header_filename = internal_header_filename;
context.includedir = includedir;
context.output = output;