private static string GenerateIncludeConfigContents()

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();
        }