/// <summary> /// Constructor. Reads a makefile from disk. /// </summary> /// <param name="Reader">The archive to read from</param> /// <param name="LastWriteTimeUtc">Last modified time for the makefile</param> public TargetMakefile(BinaryArchiveReader Reader, DateTime LastWriteTimeUtc) { CreateTimeUtc = new DateTime(Reader.ReadLong(), DateTimeKind.Utc); ModifiedTimeUtc = LastWriteTimeUtc; Diagnostics = Reader.ReadList(() => Reader.ReadString()); ExternalMetadata = Reader.ReadString(); ExecutableFile = Reader.ReadFileReference(); ReceiptFile = Reader.ReadFileReference(); ProjectIntermediateDirectory = Reader.ReadDirectoryReference(); TargetType = (TargetType)Reader.ReadInt(); ConfigValueTracker = new ConfigValueTracker(Reader); bDeployAfterCompile = Reader.ReadBool(); bHasProjectScriptPlugin = Reader.ReadBool(); AdditionalArguments = Reader.ReadArray(() => Reader.ReadString()); PreBuildScripts = Reader.ReadArray(() => Reader.ReadFileReference()); Actions = Reader.ReadList(() => new Action(Reader)); EnvironmentVariables = Reader.ReadList(() => Tuple.Create(Reader.ReadString(), Reader.ReadString())); OutputItems = Reader.ReadList(() => Reader.ReadFileItem()); ModuleNameToOutputItems = Reader.ReadDictionary(() => Reader.ReadString(), () => Reader.ReadArray(() => Reader.ReadFileItem()), StringComparer.OrdinalIgnoreCase); HotReloadModuleNames = Reader.ReadHashSet(() => Reader.ReadString(), StringComparer.OrdinalIgnoreCase); SourceDirectories = Reader.ReadList(() => Reader.ReadDirectoryItem()); DirectoryToSourceFiles = Reader.ReadDictionary(() => Reader.ReadDirectoryItem(), () => Reader.ReadArray(() => Reader.ReadFileItem())); WorkingSet = Reader.ReadHashSet(() => Reader.ReadFileItem()); CandidatesForWorkingSet = Reader.ReadHashSet(() => Reader.ReadFileItem()); UObjectModules = Reader.ReadList(() => new UHTModuleInfo(Reader)); UObjectModuleHeaders = Reader.ReadList(() => new UHTModuleHeaderInfo(Reader)); PluginFiles = Reader.ReadHashSet(() => Reader.ReadFileItem()); ExternalDependencies = Reader.ReadHashSet(() => Reader.ReadFileItem()); InternalDependencies = Reader.ReadHashSet(() => Reader.ReadFileItem()); }
/// <summary> /// Constructor /// </summary> /// <param name="ExternalMetadata">External build metadata from the platform</param> /// <param name="ExecutableFile">Path to the executable or primary output binary for this target</param> /// <param name="ReceiptFile">Path to the receipt file</param> /// <param name="ProjectIntermediateDirectory">Path to the project intermediate directory</param> /// <param name="TargetType">The type of target</param> /// <param name="ConfigValueTracker">Set of dependencies on config files</param> /// <param name="bDeployAfterCompile">Whether to deploy the target after compiling</param> /// <param name="bHasProjectScriptPlugin">Whether the target has a project script plugin</param> public TargetMakefile(string ExternalMetadata, FileReference ExecutableFile, FileReference ReceiptFile, DirectoryReference ProjectIntermediateDirectory, TargetType TargetType, ConfigValueTracker ConfigValueTracker, bool bDeployAfterCompile, bool bHasProjectScriptPlugin) { this.CreateTimeUtc = UnrealBuildTool.StartTimeUtc; this.ModifiedTimeUtc = CreateTimeUtc; this.Diagnostics = new List <string>(); this.ExternalMetadata = ExternalMetadata; this.ExecutableFile = ExecutableFile; this.ReceiptFile = ReceiptFile; this.ProjectIntermediateDirectory = ProjectIntermediateDirectory; this.TargetType = TargetType; this.ConfigValueTracker = ConfigValueTracker; this.bDeployAfterCompile = bDeployAfterCompile; this.bHasProjectScriptPlugin = bHasProjectScriptPlugin; this.Actions = new List <Action>(); this.OutputItems = new List <FileItem>(); this.ModuleNameToOutputItems = new Dictionary <string, FileItem[]>(StringComparer.OrdinalIgnoreCase); this.HotReloadModuleNames = new HashSet <string>(StringComparer.OrdinalIgnoreCase); this.SourceDirectories = new List <DirectoryItem>(); this.DirectoryToSourceFiles = new Dictionary <DirectoryItem, FileItem[]>(); this.WorkingSet = new HashSet <FileItem>(); this.CandidatesForWorkingSet = new HashSet <FileItem>(); this.UObjectModules = new List <UHTModuleInfo>(); this.UObjectModuleHeaders = new List <UHTModuleHeaderInfo>(); this.PluginFiles = new HashSet <FileItem>(); this.ExternalDependencies = new HashSet <FileItem>(); this.InternalDependencies = new HashSet <FileItem>(); }
/// <summary> /// Read config settings for the given object /// </summary> /// <param name="ProjectDir">Path to the project directory</param> /// <param name="Platform">The platform being built</param> /// <param name="TargetObject">Object to receive the settings</param> /// <param name="Tracker">Tracks the set of config values that were retrieved. May be null.</param> internal static void ReadSettings(DirectoryReference ProjectDir, UnrealTargetPlatform Platform, object TargetObject, ConfigValueTracker Tracker) { List <ConfigField> Fields = FindConfigFieldsForType(TargetObject.GetType()); foreach (ConfigField Field in Fields) { // Read the hierarchy listed ConfigHierarchy Hierarchy = ReadHierarchy(Field.Attribute.ConfigType, ProjectDir, Platform); // Get the key name string KeyName = Field.Attribute.KeyName ?? Field.FieldInfo.Name; // Get the value(s) associated with this key IReadOnlyList <string> Values; Hierarchy.TryGetValues(Field.Attribute.SectionName, KeyName, out Values); // Parse the values from the config files and update the target object if (Field.AddElement == null) { if (Values != null && Values.Count == 1) { object Value; if (TryParseValue(Values[0], Field.FieldInfo.FieldType, out Value)) { Field.FieldInfo.SetValue(TargetObject, Value); } } } else { if (Values != null) { foreach (string Item in Values) { object Value; if (TryParseValue(Item, Field.ElementType, out Value)) { Field.AddElement(TargetObject, Value); } } } } // Save the dependency if (Tracker != null) { Tracker.Add(Field.Attribute.ConfigType, ProjectDir, Platform, Field.Attribute.SectionName, KeyName, Values); } } }