// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved. using System; using System.Collections.Generic; using System.IO; using System.Diagnostics; using System.Linq; namespace UnrealBuildTool { public enum ModuleHostType { Runtime, RuntimeNoCommandlet, Developer, Editor, EditorNoCommandlet, Program, } public enum ModuleLoadingPhase { Default, PostDefault, PreDefault, PostConfigInit, PreLoadingScreen, PostEngineInit, } [DebuggerDisplay("Name={Name}")] public class ModuleDescriptor { // Name of this module public readonly string Name; // Usage type of module public ModuleHostType Type; // When should the module be loaded during the startup sequence? This is sort of an advanced setting. public ModuleLoadingPhase LoadingPhase = ModuleLoadingPhase.Default; // List of allowed platforms public UnrealTargetPlatform[] WhitelistPlatforms; // List of disallowed platforms public UnrealTargetPlatform[] BlacklistPlatforms; // List of additional dependencies for building this module. public string[] AdditionalDependencies; /// /// Constructor /// /// Name of the module /// Type of target that can host this module public ModuleDescriptor(string InName, ModuleHostType InType) { Name = InName; Type = InType; } /// /// Constructs a ModuleDescriptor from a Json object /// /// /// The new module descriptor public static ModuleDescriptor FromJsonObject(JsonObject InObject) { ModuleDescriptor Module = new ModuleDescriptor(InObject.GetStringField("Name"), InObject.GetEnumField("Type")); ModuleLoadingPhase LoadingPhase; if(InObject.TryGetEnumField("LoadingPhase", out LoadingPhase)) { Module.LoadingPhase = LoadingPhase; } UnrealTargetPlatform[] WhitelistPlatforms; if(InObject.TryGetEnumArrayField("WhitelistPlatforms", out WhitelistPlatforms)) { Module.WhitelistPlatforms = WhitelistPlatforms; } UnrealTargetPlatform[] BlacklistPlatforms; if(InObject.TryGetEnumArrayField("BlacklistPlatforms", out BlacklistPlatforms)) { Module.BlacklistPlatforms = BlacklistPlatforms; } string[] AdditionalDependencies; if(InObject.TryGetStringArrayField("AdditionalDependencies", out AdditionalDependencies)) { Module.AdditionalDependencies = AdditionalDependencies; } return Module; } /// /// Determines whether the given plugin module is part of the current build. /// /// The platform being compiled for /// The type of the target being compiled public bool IsCompiledInConfiguration(UnrealTargetPlatform Platform, TargetRules.TargetType TargetType) { // Check the platform is whitelisted if(WhitelistPlatforms != null && WhitelistPlatforms.Length > 0 && !WhitelistPlatforms.Contains(Platform)) { return false; } // Check the platform is not blacklisted if(BlacklistPlatforms != null && BlacklistPlatforms.Contains(Platform)) { return false; } // Check the module is compatible with this target. switch (Type) { case ModuleHostType.Runtime: case ModuleHostType.RuntimeNoCommandlet: return true; case ModuleHostType.Developer: return UEBuildConfiguration.bBuildDeveloperTools; case ModuleHostType.Editor: case ModuleHostType.EditorNoCommandlet: return UEBuildConfiguration.bBuildEditor; case ModuleHostType.Program: return TargetType == TargetRules.TargetType.Program; } return false; } } }