in SharpGen/Parser/CppHeaderGenerator.cs [91:143]
private static string GenerateIncludeConfigContents(ConfigFile configRoot, ConfigFile configFile,
IReadOnlyCollection<ConfigFile> configsWithIncludes,
ISet<ConfigFile> configsWithExtensionHeaders,
string prolog)
{
using var outputConfig = new StringWriter();
outputConfig.WriteLine("// SharpGen include config [{0}] - Version {1}", configFile.Id, Version);
if (configRoot.Id == configFile.Id)
outputConfig.Write(prolog);
// Write includes
foreach (var includeRule in configFile.Includes)
{
if (!string.IsNullOrEmpty(includeRule.Pre))
{
outputConfig.WriteLine(includeRule.Pre);
}
outputConfig.WriteLine("#include \"{0}\"", includeRule.File);
if (!string.IsNullOrEmpty(includeRule.Post))
{
outputConfig.WriteLine(includeRule.Post);
}
}
// Write includes to references
foreach (var reference in configFile.References)
{
if (configsWithIncludes.Contains(reference))
outputConfig.WriteLine("#include \"{0}\"", reference.HeaderFileName);
}
// Dump Create from macros
if (configsWithExtensionHeaders.Contains(configFile))
{
foreach (var typeBaseRule in configFile.Extension)
{
if (typeBaseRule.GeneratesExtensionHeader())
outputConfig.WriteLine("// {0}", typeBaseRule);
}
// Include extension header if it exists
// so we can generate extension headers without needing them to already exist.
outputConfig.WriteLine("#if __has_include(\"{0}\")", configFile.ExtensionFileName);
outputConfig.WriteLine("#include \"{0}\"", configFile.ExtensionFileName);
outputConfig.WriteLine("#endif");
}
return outputConfig.ToString();
}