public override void GeneratePlatformResourceFileList(IVcxprojGenerationContext context, IFileGenerator fileGenerator, Strings alreadyWrittenPriFiles, IList <Vcxproj.ProjectFile> resourceFiles, IList <Vcxproj.ProjectFile> imageResourceFiles) { // adding the durango resw file, if they were not in PRIFiles var resourceResw = new List <Vcxproj.ProjectFile>(); foreach (string file in context.Project.XResourcesResw) { var projectFile = new Vcxproj.ProjectFile(context, file); if (!alreadyWrittenPriFiles.Contains(projectFile.FileNameProjectRelative)) { resourceResw.Add(projectFile); } } if (resourceResw.Count > 0) { fileGenerator.Write(_projectFilesBegin); foreach (var projectFile in resourceResw) { using (fileGenerator.Declare("file", projectFile)) { fileGenerator.Write(_projectPriResource); } resourceFiles.Add(projectFile); } fileGenerator.Write(_projectFilesEnd); } // adding the durango img file if (context.Project.XResourcesImg.Count > 0) { fileGenerator.Write(_projectFilesBegin); foreach (string file in context.Project.XResourcesImg) { var projectFile = new Vcxproj.ProjectFile(context, file); using (fileGenerator.Declare("file", projectFile)) { fileGenerator.Write(_projectImgResource); } imageResourceFiles.Add(projectFile); } fileGenerator.Write(_projectFilesEnd); } // WARNING: THIS IS A PATCH TO ADD THE XMANIFEST FILE IN THE FILE LIST // This is not a clean way to do but it is the only way we found so far if (context.ProjectConfigurations.First().NeedsAppxManifestFile) { fileGenerator.Write(_projectFilesBegin); { string file = Sharpmake.Util.GetAppxManifestFileName(context.ProjectConfigurations.First()); var projectFile = new Vcxproj.ProjectFile(context, file); using (fileGenerator.Declare("file", projectFile)) { fileGenerator.Write(_projectFilesXManifest); } } fileGenerator.Write(_projectFilesEnd); } }
public override void GeneratePlatformResourceFileList(IVcxprojGenerationContext context, IFileGenerator fileGenerator, Strings alreadyWrittenPriFiles, IList <Vcxproj.ProjectFile> resourceFiles, IList <Vcxproj.ProjectFile> imageResourceFiles) { // adding the durango resw file, if they were not in PRIFiles var resourceResw = new List <Vcxproj.ProjectFile>(); foreach (string file in context.Project.XResourcesResw) { var projectFile = new Vcxproj.ProjectFile(context, file); if (!alreadyWrittenPriFiles.Contains(projectFile.FileNameProjectRelative)) { resourceResw.Add(projectFile); } } if (resourceResw.Count > 0) { fileGenerator.Write(_projectFilesBegin); foreach (var projectFile in resourceResw) { using (fileGenerator.Declare("file", projectFile)) { fileGenerator.Write(_projectPriResource); } resourceFiles.Add(projectFile); } fileGenerator.Write(_projectFilesEnd); } // adding the durango img file if (context.Project.XResourcesImg.Count > 0) { fileGenerator.Write(_projectFilesBegin); foreach (string file in context.Project.XResourcesImg) { var projectFile = new Vcxproj.ProjectFile(context, file); using (fileGenerator.Declare("file", projectFile)) { fileGenerator.Write(_projectImgResource); } imageResourceFiles.Add(projectFile); } fileGenerator.Write(_projectFilesEnd); } // WARNING: THIS IS A PATCH TO ADD THE XMANIFEST FILE IN THE FILE LIST // This is not a clean way to do but it is the only way we found so far var manifestFiles = context.ProjectConfigurations .Where(x => x.Platform == Platform.durango && x.NeedsAppxManifestFile) .Select(Sharpmake.Util.GetAppxManifestFileName) .Distinct() .ToList(); if (manifestFiles.Count > 1) { throw new Error("conf.AppxManifestFilePath must be identical for all Durango configurations."); } else if (manifestFiles.Count == 1) { fileGenerator.Write(_projectFilesBegin); { var projectFile = new Vcxproj.ProjectFile(context, manifestFiles[0]); using (fileGenerator.Declare("file", projectFile)) { fileGenerator.Write(_projectFilesXManifest); } } fileGenerator.Write(_projectFilesEnd); } }
private void GenerateFilesSection( GenerationContext context, IFileGenerator fileGenerator) { Strings projectFiles = context.Project.GetSourceFilesForConfigurations(context.ProjectConfigurations); // Add source files var allFiles = new List <Vcxproj.ProjectFile>(); var includeFiles = new List <Vcxproj.ProjectFile>(); var sourceFiles = new List <Vcxproj.ProjectFile>(); var contentFiles = new List <Vcxproj.ProjectFile>(); foreach (string file in projectFiles) { var projectFile = new Vcxproj.ProjectFile(context, file); allFiles.Add(projectFile); } allFiles.Sort((l, r) => { return(string.Compare(l.FileNameProjectRelative, r.FileNameProjectRelative, StringComparison.InvariantCultureIgnoreCase)); }); // type -> files var customSourceFiles = new Dictionary <string, List <Vcxproj.ProjectFile> >(); foreach (var projectFile in allFiles) { string type = null; if (context.Project.ExtensionBuildTools.TryGetValue(projectFile.FileExtension, out type)) { List <Vcxproj.ProjectFile> files = null; if (!customSourceFiles.TryGetValue(type, out files)) { files = new List <Vcxproj.ProjectFile>(); customSourceFiles[type] = files; } files.Add(projectFile); } else if (context.Project.SourceFilesCompileExtensions.Contains(projectFile.FileExtension) || (String.Compare(projectFile.FileExtension, ".rc", StringComparison.OrdinalIgnoreCase) == 0)) { sourceFiles.Add(projectFile); } else if (String.Compare(projectFile.FileExtension, ".h", StringComparison.OrdinalIgnoreCase) == 0) { includeFiles.Add(projectFile); } else { contentFiles.Add(projectFile); } } // Write header files fileGenerator.Write(Template.Project.ProjectFilesBegin); foreach (var file in includeFiles) { using (fileGenerator.Declare("file", file)) fileGenerator.Write(Template.Project.ProjectFilesHeader); } fileGenerator.Write(Template.Project.ProjectFilesEnd); // Write content files fileGenerator.Write(Template.Project.ProjectFilesBegin); foreach (var file in contentFiles) { using (fileGenerator.Declare("file", file)) fileGenerator.Write(Template.Project.ContentSimple); } fileGenerator.Write(Template.Project.ProjectFilesEnd); // Write Android project files fileGenerator.Write(Template.Project.ItemGroupBegin); using (fileGenerator.Declare("antBuildXml", context.AndroidPackageProject.AntBuildXml)) using (fileGenerator.Declare("antProjectPropertiesFile", context.AndroidPackageProject.AntProjectPropertiesFile)) using (fileGenerator.Declare("androidManifest", context.AndroidPackageProject.AndroidManifest)) { fileGenerator.Write(Template.Project.AntBuildXml); fileGenerator.Write(Template.Project.AndroidManifest); fileGenerator.Write(Template.Project.AntProjectPropertiesFile); } fileGenerator.Write(Template.Project.ItemGroupEnd); }
private void GenerateFilesSection( GenerationContext context, IFileGenerator fileGenerator) { Strings projectFiles = context.Project.GetSourceFilesForConfigurations(context.ProjectConfigurations); // Add source files var allFiles = new List <Vcxproj.ProjectFile>(); foreach (string file in projectFiles) { var projectFile = new Vcxproj.ProjectFile(context, file); allFiles.Add(projectFile); } allFiles.Sort((l, r) => { return(string.Compare(l.FileNameProjectRelative, r.FileNameProjectRelative, StringComparison.InvariantCultureIgnoreCase)); }); var sourceFiles = new List <Vcxproj.ProjectFile>(); var contentFiles = new List <Vcxproj.ProjectFile>(); foreach (var projectFile in allFiles) { if (context.Project.SourceFilesCompileExtensions.Contains(projectFile.FileExtension)) { sourceFiles.Add(projectFile); } else { contentFiles.Add(projectFile); } } // Write content files if (contentFiles.Count > 0) { // Filter out the main 3 files from the list since they might share extensions string[] coreFiles = { fileGenerator.Resolver.Resolve(context.AndroidPackageProject.AntBuildXml), fileGenerator.Resolver.Resolve(context.AndroidPackageProject.AntProjectPropertiesFile), fileGenerator.Resolver.Resolve(context.AndroidPackageProject.AndroidManifest), }; fileGenerator.Write(Template.Project.ProjectFilesBegin); foreach (var file in contentFiles) { if (!coreFiles.Contains(fileGenerator.Resolver.Resolve(file.FileNameProjectRelative))) { using (fileGenerator.Declare("file", file)) fileGenerator.Write(Template.Project.ContentSimple); } } fileGenerator.Write(Template.Project.ProjectFilesEnd); } // Write source files if (sourceFiles.Count > 0) { fileGenerator.Write(Template.Project.ProjectFilesBegin); foreach (var file in sourceFiles) { using (fileGenerator.Declare("file", file)) fileGenerator.Write(Template.Project.ProjectFilesSource); } fileGenerator.Write(Template.Project.ProjectFilesEnd); } // Write Android project files fileGenerator.Write(Template.Project.ItemGroupBegin); if (_isGradleBuild) { foreach (var file in context.AndroidPackageProject.GradleTemplateFiles) { using (fileGenerator.Declare("gradleTemplateFile", file)) fileGenerator.Write(Template.Project.GradleTemplate); } } else { using (fileGenerator.Declare("antBuildXml", context.AndroidPackageProject.AntBuildXml)) using (fileGenerator.Declare("antProjectPropertiesFile", context.AndroidPackageProject.AntProjectPropertiesFile)) using (fileGenerator.Declare("androidManifest", context.AndroidPackageProject.AndroidManifest)) { fileGenerator.Write(Template.Project.AntBuildXml); fileGenerator.Write(Template.Project.AndroidManifest); fileGenerator.Write(Template.Project.AntProjectPropertiesFile); } } fileGenerator.Write(Template.Project.ItemGroupEnd); }