static void Main()

in Utilities/CMake/ProjectFileProcessor/Program.cs [93:208]


        static void Main(string[] args)
        {
            string rootFolder = null;
            if (args.Length == 0)
                rootFolder = @"C:\git\forks\xbox-live-api";
            else
                rootFolder = args[0];

            if (args.Length == 4 && args[1] == "diff")
            {
                string fileOld = args[2];
                string fileNew = args[3];
                DiffFiles(fileOld, fileNew, rootFolder);
                return;
            }

            var fileNodes = new List<FileNode>();

            // UWP
            fileNodes.Add(new FileNode
            {
                cmake_vcxproj = @"libHttpClient.UWP.C.vcxproj",
                template = @"template-libHttpClient.UWP.C.vcxproj",
                toolsets = new List<string>{ "140", "141", "142" }
            });

            // Win32
            fileNodes.Add(new FileNode
            {
                cmake_vcxproj = @"libHttpClient.Win32.C.vcxproj",
                template = @"template-libHttpClient.Win32.C.vcxproj",
                toolsets = new List<string>{ "140", "141", "142", "143" }
            });

            // XDK
            fileNodes.Add(new FileNode
            {
                cmake_vcxproj = @"libHttpClient.XDK.C.vcxproj",
                template = @"template-libHttpClient.XDK.C.vcxproj",
                toolsets = new List<string>{ "140", "141", "142" }
            });

            // TAEF UnitTests
            fileNodes.Add(new FileNode
            {
                cmake_vcxproj = @"libHttpClient.UnitTest.TAEF.vcxproj",
                template = @"template-libHttpClient.UnitTest.TAEF.vcxproj",
                toolsets = new List<string>{ "142" }
            });

            // TE UnitTests
            fileNodes.Add(new FileNode
            {
                cmake_vcxproj = @"libHttpClient.UnitTest.TE.vcxproj",
                template = @"template-libHttpClient.UnitTest.TE.vcxproj",
                toolsets = new List<string>{ "142" }
            });

            // GDK
            fileNodes.Add(new FileNode
            {
                cmake_vcxproj = @"libHttpClient.GDK.C.vcxproj",
                template = @"template-libHttpClient.GDK.C.vcxproj",
                toolsets = new List<string>{ "141", "142", "143" }
            });

            foreach (FileNode fn in fileNodes)
            {
                foreach (var toolset in fn.toolsets)
                {
                    var template_lines = new List<string>();
                    var output_lines = new List<string>();
                    var cmake_vcxproj_lines = new List<string>();
                    var cmake_vcxproj_filters_lines = new List<string>();
                    var cmake_vcxproj_filters_lines_filtered = new List<string>();
                    var cmake_vcxproj_files = new List<string>();

                    string cmake_vcxproj = Path.Combine(rootFolder, Path.Combine(@"Utilities\CMake\vcxprojs", fn.cmake_vcxproj));
                    string cmake_vcxproj_filters_name = fn.cmake_vcxproj + ".filters";
                    string cmake_vcxproj_filters = Path.Combine(rootFolder, Path.Combine(@"Utilities\CMake\vcxprojs", cmake_vcxproj_filters_name));
                    string template = Path.Combine(rootFolder, Path.Combine(@"Utilities\CMake", fn.template));
                    string output_vcxproj = fn.cmake_vcxproj.Replace("libHttpClient", "libHttpClient." + toolset);
                    string output_directory = @"Build\" + output_vcxproj.Replace(".vcxproj", "");
                    string output = Path.Combine(rootFolder, Path.Combine(output_directory, output_vcxproj));
                    string outputFilterName = output_vcxproj + ".filters";
                    string output_filters = Path.Combine(rootFolder, Path.Combine(output_directory, outputFilterName));

                    FileInfo fiInput = new FileInfo(cmake_vcxproj);
                    FileInfo fiInputFilters = new FileInfo(cmake_vcxproj_filters);
                    Console.WriteLine("inputVcxproj: " + cmake_vcxproj);
                    Console.WriteLine("template: " + template);
                    Console.WriteLine("output: " + output);

                    if (fiInput.Exists && fiInputFilters.Exists)
                    {
                        ReadFile(cmake_vcxproj, ref cmake_vcxproj_lines);
                        ReadFile(cmake_vcxproj_filters, ref cmake_vcxproj_filters_lines);
                        ExtractFileSection(ref cmake_vcxproj_lines, ref cmake_vcxproj_files, rootFolder, false);
                        ReadFile(template, ref template_lines);
                        ReplaceFileSection(template_lines, cmake_vcxproj_files, ref output_lines);
                        ReplaceToolset(ref output_lines, toolset);
                        Console.WriteLine("Writing " + output);
                        WriteFile(output_lines, output);
                        cmake_vcxproj_filters_lines_filtered = ProcessFiltersFile(cmake_vcxproj_filters_lines, cmake_vcxproj_filters_lines_filtered, rootFolder, output_vcxproj);
                        Console.WriteLine("Writing " + output_filters);
                        WriteFile(cmake_vcxproj_filters_lines_filtered, output_filters);
                    }
                    else
                    {
                        Console.WriteLine("Skipping");
                    }

                    Console.WriteLine("");
                }
            }
        }