public BuildTarget Filter(List<string> ModuleNames) { BuildTarget NewTarget = new BuildTarget(Name); foreach (BuildBinary Binary in Binaries) { BuildBinary NewBinary = Binary.Filter(ModuleNames); if (NewBinary.Modules.Count > 0) NewTarget.Binaries.Add(NewBinary); } return NewTarget; }
static bool BuildCodeXml(string EngineDir, string TargetInfoPath, string DoxygenPath, string XmlDir, string ArchivePath, List<string> Filters, BuildActions Actions) { if ((Actions & BuildActions.Clean) != 0) { Console.WriteLine("Cleaning '{0}'", XmlDir); Utility.SafeDeleteDirectoryContents(XmlDir, true); } if ((Actions & BuildActions.Build) != 0) { Console.WriteLine("Building XML..."); Utility.SafeCreateDirectory(XmlDir); // Read the target that we're building BuildTarget Target = new BuildTarget(Path.Combine(EngineDir, "Source"), TargetInfoPath); // Create an invariant list of exclude directories string[] InvariantExcludeDirectories = ExcludeSourceDirectories.Select(x => x.ToLowerInvariant()).ToArray(); // Get the list of folders to filter against List<string> FolderFilters = new List<string>(); if (Filters != null) { foreach (string Filter in Filters) { int Idx = Filter.IndexOf('/'); if (Idx != -1) { FolderFilters.Add("\\" + Filter.Substring(0, Idx) + "\\"); } } } // Flatten the target into a list of modules List<string> InputModules = new List<string>(); foreach (string DirectoryName in Target.DirectoryNames) { for (DirectoryInfo ModuleDirectory = new DirectoryInfo(DirectoryName); ModuleDirectory.Parent != null; ModuleDirectory = ModuleDirectory.Parent) { IEnumerator<FileInfo> ModuleFile = ModuleDirectory.EnumerateFiles("*.build.cs").GetEnumerator(); if (ModuleFile.MoveNext() && (FolderFilters.Count == 0 || FolderFilters.Any(x => ModuleFile.Current.FullName.Contains(x)))) { InputModules.AddUnique(ModuleFile.Current.FullName); break; } } } // Just use all the input modules if (!bIndexOnly) { // Set our error mode so as to not bring up the WER dialog if Doxygen crashes (which it often does) SetErrorMode(0x0007); // Create the output directory Utility.SafeCreateDirectory(XmlDir); // Build all the modules Console.WriteLine("Parsing source..."); // Build the list of definitions List<string> Definitions = new List<string>(); foreach (string Definition in Target.Definitions) { if (!Definition.StartsWith("ORIGINAL_FILE_NAME=")) { Definitions.Add(Definition.Replace("DLLIMPORT", "").Replace("DLLEXPORT", "")); } } // Build a list of input paths List<string> InputPaths = new List<string>(); foreach (string InputModule in InputModules) { foreach (string DirectoryName in Directory.EnumerateDirectories(Path.GetDirectoryName(InputModule), "*", SearchOption.AllDirectories)) { // Find the relative path from the engine directory string NormalizedDirectoryName = DirectoryName; if (NormalizedDirectoryName.StartsWith(EngineDir)) { NormalizedDirectoryName = NormalizedDirectoryName.Substring(EngineDir.Length); } if (!NormalizedDirectoryName.EndsWith("\\")) { NormalizedDirectoryName += "\\"; } // Check we can include it if (!ExcludeSourceDirectories.Any(x => NormalizedDirectoryName.Contains("\\" + x + "\\"))) { if (FolderFilters.Count == 0 || FolderFilters.Any(x => NormalizedDirectoryName.Contains(x))) { InputPaths.Add(DirectoryName); } } } } // Build the configuration for this module DoxygenConfig Config = new DoxygenConfig("UE4", InputPaths.ToArray(), XmlDir); Config.Definitions.AddRange(Definitions); Config.Definitions.AddRange(DoxygenPredefinedMacros); Config.ExpandAsDefined.AddRange(DoxygenExpandedMacros); Config.IncludePaths.AddRange(Target.IncludePaths); Config.ExcludePatterns.AddRange(ExcludeSourceDirectories.Select(x => "*/" + x + "/*")); Config.ExcludePatterns.AddRange(ExcludeSourceFiles); // Run Doxygen if (!Doxygen.Run(DoxygenPath, Path.Combine(EngineDir, "Source"), Config, true)) { Console.WriteLine(" error: Doxygen crashed. Skipping."); return false; } } // Write the modules file File.WriteAllLines(Path.Combine(XmlDir, "modules.txt"), InputModules); } if ((Actions & BuildActions.Archive) != 0) { Console.WriteLine("Creating archive '{0}'", ArchivePath); Utility.CreateTgzFromDir(ArchivePath, XmlDir); } return true; }
public static BuildTarget FromXml(XmlNode Node) { BuildTarget NewTarget = new BuildTarget(Node.Attributes["name"].Value); using (XmlNodeList BinaryNodeList = Node.SelectNodes("binary")) { foreach (XmlNode BinaryNode in BinaryNodeList) { BuildBinary NewBinary = BuildBinary.FromXml(BinaryNode); NewTarget.Binaries.Add(NewBinary); } } return NewTarget; }