コード例 #1
0
            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);
                }
            }
コード例 #2
0
            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);
                }
            }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: Androidproj.cs プロジェクト: kudaba/Sharpmake
        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);
        }