/// <summary> /// Constructor. Be sure to use this.ParamName to set the actual property name as parameter names and property names /// overlap here. /// If a parameter value is not set, it will be parsed from the command line if the command is null, the default value will be used. /// </summary> public ProjectParams( string RawProjectPath, CommandUtils Command = null, string Device = null, string MapToRun = null, string AdditionalServerMapParams = null, ParamList<string> Port = null, string RunCommandline = null, string StageCommandline = null, string BundleName = null, string StageDirectoryParam = null, bool? StageNonMonolithic = null, string UE4Exe = null, string SignPak = null, List<UnrealTargetConfiguration> ClientConfigsToBuild = null, List<UnrealTargetConfiguration> ServerConfigsToBuild = null, ParamList<string> MapsToCook = null, ParamList<string> DirectoriesToCook = null, string InternationalizationPreset = null, ParamList<string> CulturesToCook = null, ParamList<string> ClientCookedTargets = null, ParamList<string> EditorTargets = null, ParamList<string> ServerCookedTargets = null, List<UnrealTargetPlatform> ClientTargetPlatforms = null, Dictionary<UnrealTargetPlatform, UnrealTargetPlatform> ClientDependentPlatformMap = null, List<UnrealTargetPlatform> ServerTargetPlatforms = null, Dictionary<UnrealTargetPlatform, UnrealTargetPlatform> ServerDependentPlatformMap = null, bool? Build = null, bool? Cook = null, string CookFlavor = null, bool? Run = null, bool? SkipServer = null, bool? Clean = null, bool? Compressed = null, bool? UseDebugParamForEditorExe = null, bool? IterativeCooking = null, bool? CookAll = null, bool? CookMapsOnly = null, bool? CookOnTheFly = null, bool? CookOnTheFlyStreaming = null, bool? UnversionedCookedContent = null, string AdditionalCookerOptions = null, string BasedOnReleaseVersion = null, string CreateReleaseVersion = null, bool? GeneratePatch = null, string DLCName = null, bool? DLCIncludeEngineContent = null, bool? NewCook = null, bool? OldCook = null, bool? CrashReporter = null, bool? DedicatedServer = null, bool? Client = null, bool? Deploy = null, bool? FileServer = null, bool? Foreign = null, bool? ForeignCode = null, bool? LogWindow = null, bool? NoCleanStage = null, bool? NoClient = null, bool? NoDebugInfo = null, bool? NoXGE = null, bool? Package = null, bool? Pak = null, bool? Prereqs = null, bool? NoBootstrapExe = null, bool? SignedPak = null, bool? NullRHI = null, bool? FakeClient = null, bool? EditorTest = null, bool? RunAutomationTests = null, string RunAutomationTest = null, int? CrashIndex = null, bool? Rocket = null, bool? SkipCook = null, bool? SkipCookOnTheFly = null, bool? SkipPak = null, bool? SkipStage = null, bool? Stage = null, bool? Manifests = null, bool? CreateChunkInstall = null, bool? Unattended = null, int? NumClients = null, bool? Archive = null, string ArchiveDirectoryParam = null, bool? ArchiveMetaData = null, ParamList<string> ProgramTargets = null, bool? Distribution = null, bool? Prebuilt = null, int? RunTimeoutSeconds = null, string SpecifiedArchitecture = null, bool? IterativeDeploy = null, bool? FastCook = null, bool? IgnoreCookErrors = null ) { // //// Use this.Name with properties and fields! // this.RawProjectPath = RawProjectPath; if (DirectoriesToCook != null) { this.DirectoriesToCook = DirectoriesToCook; } this.InternationalizationPreset = ParseParamValueIfNotSpecified(Command, InternationalizationPreset, "i18npreset"); if (CulturesToCook != null) { this.CulturesToCook = CulturesToCook; } if (ClientCookedTargets != null) { this.ClientCookedTargets = ClientCookedTargets; } if (ServerCookedTargets != null) { this.ServerCookedTargets = ServerCookedTargets; } if (EditorTargets != null) { this.EditorTargets = EditorTargets; } if (ProgramTargets != null) { this.ProgramTargets = ProgramTargets; } // Parse command line params for client platforms "-TargetPlatform=Win64+Mac", "-Platform=Win64+Mac" and also "-Win64", "-Mac" etc. if (ClientDependentPlatformMap != null) { this.ClientDependentPlatformMap = ClientDependentPlatformMap; } this.ClientTargetPlatforms = SetupTargetPlatforms(ref this.ClientDependentPlatformMap, Command, ClientTargetPlatforms, new ParamList<UnrealTargetPlatform>() { HostPlatform.Current.HostEditorPlatform }, true, "TargetPlatform", "Platform"); // Parse command line params for server platforms "-ServerTargetPlatform=Win64+Mac", "-ServerPlatform=Win64+Mac". "-Win64" etc is not allowed here if (ServerDependentPlatformMap != null) { this.ServerDependentPlatformMap = ServerDependentPlatformMap; } this.ServerTargetPlatforms = SetupTargetPlatforms(ref this.ServerDependentPlatformMap, Command, ServerTargetPlatforms, this.ClientTargetPlatforms, false, "ServerTargetPlatform", "ServerPlatform"); this.Build = GetParamValueIfNotSpecified(Command, Build, this.Build, "build"); this.Run = GetParamValueIfNotSpecified(Command, Run, this.Run, "run"); this.Cook = GetParamValueIfNotSpecified(Command, Cook, this.Cook, "cook"); this.CookFlavor = ParseParamValueIfNotSpecified(Command, CookFlavor, "cookflavor", String.Empty); this.NewCook = GetParamValueIfNotSpecified(Command, NewCook, this.NewCook, "NewCook"); this.OldCook = GetParamValueIfNotSpecified(Command, OldCook, this.OldCook, "OldCook"); this.CreateReleaseVersion = ParseParamValueIfNotSpecified(Command, CreateReleaseVersion, "createreleaseversion", String.Empty); this.BasedOnReleaseVersion = ParseParamValueIfNotSpecified(Command, BasedOnReleaseVersion, "basedonreleaseversion", String.Empty); this.GeneratePatch = GetParamValueIfNotSpecified(Command, GeneratePatch, this.GeneratePatch, "GeneratePatch"); this.AdditionalCookerOptions = ParseParamValueIfNotSpecified(Command, AdditionalCookerOptions, "AdditionalCookerOptions", String.Empty); this.DLCName = ParseParamValueIfNotSpecified(Command, DLCName, "DLCName", String.Empty); this.DLCIncludeEngineContent = GetParamValueIfNotSpecified(Command, DLCIncludeEngineContent, this.DLCIncludeEngineContent, "DLCIncludeEngineContent"); this.SkipCook = GetParamValueIfNotSpecified(Command, SkipCook, this.SkipCook, "skipcook"); if (this.SkipCook) { this.Cook = true; } this.Clean = GetOptionalParamValueIfNotSpecified(Command, Clean, this.Clean, "clean", null); this.SignPak = ParseParamValueIfNotSpecified(Command, SignPak, "signpak", String.Empty); this.SignedPak = !String.IsNullOrEmpty(this.SignPak) || GetParamValueIfNotSpecified(Command, SignedPak, this.SignedPak, "signedpak"); this.Pak = this.SignedPak || GetParamValueIfNotSpecified(Command, Pak, this.Pak, "pak"); this.SkipPak = GetParamValueIfNotSpecified(Command, SkipPak, this.SkipPak, "skippak"); if (this.SkipPak) { this.Pak = true; } this.NoXGE = GetParamValueIfNotSpecified(Command, NoXGE, this.NoXGE, "noxge"); this.CookOnTheFly = GetParamValueIfNotSpecified(Command, CookOnTheFly, this.CookOnTheFly, "cookonthefly"); if (this.CookOnTheFly && this.SkipCook) { this.Cook = false; } this.CookOnTheFlyStreaming = GetParamValueIfNotSpecified(Command, CookOnTheFlyStreaming, this.CookOnTheFlyStreaming, "cookontheflystreaming"); this.UnversionedCookedContent = GetParamValueIfNotSpecified(Command, UnversionedCookedContent, this.UnversionedCookedContent, "UnversionedCookedContent"); this.Compressed = GetParamValueIfNotSpecified(Command, Compressed, this.Compressed, "compressed"); this.UseDebugParamForEditorExe = GetParamValueIfNotSpecified(Command, UseDebugParamForEditorExe, this.UseDebugParamForEditorExe, "UseDebugParamForEditorExe"); this.IterativeCooking = GetParamValueIfNotSpecified(Command, IterativeCooking, this.IterativeCooking, new string[] { "iterativecooking", "iterate" } ); this.SkipCookOnTheFly = GetParamValueIfNotSpecified(Command, SkipCookOnTheFly, this.SkipCookOnTheFly, "skipcookonthefly"); this.CookAll = GetParamValueIfNotSpecified(Command, CookAll, this.CookAll, "CookAll"); this.CookMapsOnly = GetParamValueIfNotSpecified(Command, CookMapsOnly, this.CookMapsOnly, "CookMapsOnly"); this.FileServer = GetParamValueIfNotSpecified(Command, FileServer, this.FileServer, "fileserver"); this.DedicatedServer = GetParamValueIfNotSpecified(Command, DedicatedServer, this.DedicatedServer, "dedicatedserver", "server"); this.Client = GetParamValueIfNotSpecified(Command, Client, this.Client, "client"); if( this.Client ) { this.DedicatedServer = true; } this.NoClient = GetParamValueIfNotSpecified(Command, NoClient, this.NoClient, "noclient"); this.LogWindow = GetParamValueIfNotSpecified(Command, LogWindow, this.LogWindow, "logwindow"); this.Stage = GetParamValueIfNotSpecified(Command, Stage, this.Stage, "stage"); this.SkipStage = GetParamValueIfNotSpecified(Command, SkipStage, this.SkipStage, "skipstage"); if (this.SkipStage) { this.Stage = true; } this.StageDirectoryParam = ParseParamValueIfNotSpecified(Command, StageDirectoryParam, "stagingdirectory", String.Empty, true); this.StageNonMonolithic = GetParamValueIfNotSpecified(Command, StageNonMonolithic, this.StageNonMonolithic, "StageNonMonolithic"); this.Manifests = GetParamValueIfNotSpecified(Command, Manifests, this.Manifests, "manifests"); this.CreateChunkInstall = GetParamValueIfNotSpecified(Command, CreateChunkInstall, this.CreateChunkInstall, "createchunkinstall"); this.ChunkInstallDirectory = ParseParamValueIfNotSpecified(Command, ChunkInstallDirectory, "chunkinstalldirectory", String.Empty, true); this.ChunkInstallVersionString = ParseParamValueIfNotSpecified(Command, ChunkInstallVersionString, "chunkinstallversion", String.Empty, true); this.Archive = GetParamValueIfNotSpecified(Command, Archive, this.Archive, "archive"); this.ArchiveDirectoryParam = ParseParamValueIfNotSpecified(Command, ArchiveDirectoryParam, "archivedirectory", String.Empty, true); this.ArchiveMetaData = GetParamValueIfNotSpecified(Command, ArchiveMetaData, this.ArchiveMetaData, "archivemetadata"); this.Distribution = GetParamValueIfNotSpecified(Command, Distribution, this.Distribution, "distribution"); this.Prereqs = GetParamValueIfNotSpecified(Command, Prereqs, this.Prereqs, "prereqs"); this.NoBootstrapExe = GetParamValueIfNotSpecified(Command, NoBootstrapExe, this.NoBootstrapExe, "nobootstrapexe"); this.Prebuilt = GetParamValueIfNotSpecified(Command, Prebuilt, this.Prebuilt, "prebuilt"); if (this.Prebuilt) { this.SkipCook = true; /*this.SkipPak = true; this.SkipStage = true; this.Pak = true; this.Stage = true;*/ this.Cook = true; this.Archive = true; this.Deploy = true; this.Run = true; //this.StageDirectoryParam = this.PrebuiltDir; } this.NoDebugInfo = GetParamValueIfNotSpecified(Command, NoDebugInfo, this.NoDebugInfo, "nodebuginfo"); this.NoCleanStage = GetParamValueIfNotSpecified(Command, NoCleanStage, this.NoCleanStage, "nocleanstage"); this.MapToRun = ParseParamValueIfNotSpecified(Command, MapToRun, "map", String.Empty); this.AdditionalServerMapParams = ParseParamValueIfNotSpecified(Command, AdditionalServerMapParams, "AdditionalServerMapParams", String.Empty); this.Foreign = GetParamValueIfNotSpecified(Command, Foreign, this.Foreign, "foreign"); this.ForeignCode = GetParamValueIfNotSpecified(Command, ForeignCode, this.ForeignCode, "foreigncode"); this.StageCommandline = ParseParamValueIfNotSpecified(Command, StageCommandline, "cmdline"); this.BundleName = ParseParamValueIfNotSpecified(Command, BundleName, "bundlename"); this.RunCommandline = ParseParamValueIfNotSpecified(Command, RunCommandline, "addcmdline"); this.Package = GetParamValueIfNotSpecified(Command, Package, this.Package, "package"); this.Deploy = GetParamValueIfNotSpecified(Command, Deploy, this.Deploy, "deploy"); this.IterativeDeploy = GetParamValueIfNotSpecified(Command, IterativeDeploy, this.IterativeDeploy, new string[] {"iterativedeploy", "iterate" } ); this.FastCook = GetParamValueIfNotSpecified(Command, FastCook, this.FastCook, "FastCook"); this.IgnoreCookErrors = GetParamValueIfNotSpecified(Command, IgnoreCookErrors, this.IgnoreCookErrors, "IgnoreCookErrors"); this.Device = ParseParamValueIfNotSpecified(Command, Device, "device", String.Empty).Trim(new char[] { '\"' }); // strip the platform prefix the specified device. if (this.Device.Contains("@")) { this.DeviceName = this.Device.Substring(this.Device.IndexOf("@") + 1); } else { this.DeviceName = this.Device; } this.ServerDevice = ParseParamValueIfNotSpecified(Command, ServerDevice, "serverdevice", this.Device); this.NullRHI = GetParamValueIfNotSpecified(Command, NullRHI, this.NullRHI, "nullrhi"); this.FakeClient = GetParamValueIfNotSpecified(Command, FakeClient, this.FakeClient, "fakeclient"); this.EditorTest = GetParamValueIfNotSpecified(Command, EditorTest, this.EditorTest, "editortest"); this.RunAutomationTest = ParseParamValueIfNotSpecified(Command, RunAutomationTest, "RunAutomationTest"); this.RunAutomationTests = this.RunAutomationTest != "" || GetParamValueIfNotSpecified(Command, RunAutomationTests, this.RunAutomationTests, "RunAutomationTests"); this.SkipServer = GetParamValueIfNotSpecified(Command, SkipServer, this.SkipServer, "skipserver"); this.Rocket = GetParamValueIfNotSpecified(Command, Rocket, this.Rocket || GlobalCommandLine.Rocket, "rocket"); this.UE4Exe = ParseParamValueIfNotSpecified(Command, UE4Exe, "ue4exe", "UE4Editor-Cmd.exe"); this.Unattended = GetParamValueIfNotSpecified(Command, Unattended, this.Unattended, "unattended"); this.DeviceUsername = ParseParamValueIfNotSpecified(Command, DeviceUsername, "deviceuser", String.Empty); this.DevicePassword = ParseParamValueIfNotSpecified(Command, DevicePassword, "devicepass", String.Empty); this.CrashReporter = GetParamValueIfNotSpecified(Command, CrashReporter, this.CrashReporter, "crashreporter"); this.SpecifiedArchitecture = ParseParamValueIfNotSpecified(Command, SpecifiedArchitecture, "specifiedarchitecture", String.Empty); if (ClientConfigsToBuild == null) { if (Command != null) { var ClientConfig = Command.ParseParamValue("clientconfig"); if (ClientConfig != null) { this.ClientConfigsToBuild = new List<UnrealTargetConfiguration>(); var Configs = new ParamList<string>(ClientConfig.Split('+')); foreach (var ConfigName in Configs) { this.ClientConfigsToBuild.Add((UnrealTargetConfiguration)Enum.Parse(typeof(UnrealTargetConfiguration), ConfigName, true)); } } } } else { this.ClientConfigsToBuild = ClientConfigsToBuild; } if (Port == null) { if( Command != null ) { this.Port = new ParamList<string>(); var PortString = Command.ParseParamValue("port"); if (String.IsNullOrEmpty(PortString) == false) { var Ports = new ParamList<string>(PortString.Split('+')); foreach (var P in Ports) { this.Port.Add(P); } } } } else { this.Port = Port; } if (MapsToCook == null) { if (Command != null) { this.MapsToCook = new ParamList<string>(); var MapsString = Command.ParseParamValue("MapsToCook"); if (String.IsNullOrEmpty(MapsString) == false) { var MapNames = new ParamList<string>(MapsString.Split('+')); foreach ( var M in MapNames ) { this.MapsToCook.Add( M ); } } } } else { this.MapsToCook = MapsToCook; } if (String.IsNullOrEmpty(this.MapToRun) == false) { this.MapsToCook.Add(this.MapToRun); } if (ServerConfigsToBuild == null) { if (Command != null) { var ServerConfig = Command.ParseParamValue("serverconfig"); if (ServerConfig != null && ServerConfigsToBuild == null) { this.ServerConfigsToBuild = new List<UnrealTargetConfiguration>(); var Configs = new ParamList<string>(ServerConfig.Split('+')); foreach (var ConfigName in Configs) { this.ServerConfigsToBuild.Add((UnrealTargetConfiguration)Enum.Parse(typeof(UnrealTargetConfiguration), ConfigName, true)); } } } } else { this.ServerConfigsToBuild = ServerConfigsToBuild; } if (NumClients.HasValue) { this.NumClients = NumClients.Value; } else if (Command != null) { this.NumClients = Command.ParseParamInt("numclients"); } if (CrashIndex.HasValue) { this.CrashIndex = CrashIndex.Value; } else if (Command != null) { this.CrashIndex = Command.ParseParamInt("CrashIndex"); } if (RunTimeoutSeconds.HasValue) { this.RunTimeoutSeconds = RunTimeoutSeconds.Value; } else if (Command != null) { this.RunTimeoutSeconds = Command.ParseParamInt("runtimeoutseconds"); } AutodetectSettings(false); ValidateAndLog(); }
/// <summary> /// Constructor. Be sure to use this.ParamName to set the actual property name as parameter names and property names /// overlap here. /// If a parameter value is not set, it will be parsed from the command line; if the command is null, the default value will be used. /// </summary> public ProjectParams( FileReference RawProjectPath, CommandUtils Command = null, string Device = null, string MapToRun = null, string AdditionalServerMapParams = null, ParamList<string> Port = null, string RunCommandline = null, string StageCommandline = null, string BundleName = null, string StageDirectoryParam = null, string UE4Exe = null, string SignPak = null, List<UnrealTargetConfiguration> ClientConfigsToBuild = null, List<UnrealTargetConfiguration> ServerConfigsToBuild = null, ParamList<string> MapsToCook = null, ParamList<string> DirectoriesToCook = null, string InternationalizationPreset = null, ParamList<string> CulturesToCook = null, ParamList<string> ClientCookedTargets = null, ParamList<string> EditorTargets = null, ParamList<string> ServerCookedTargets = null, List<TargetPlatformDescriptor> ClientTargetPlatforms = null, Dictionary<TargetPlatformDescriptor, TargetPlatformDescriptor> ClientDependentPlatformMap = null, List<TargetPlatformDescriptor> ServerTargetPlatforms = null, Dictionary<TargetPlatformDescriptor, TargetPlatformDescriptor> ServerDependentPlatformMap = null, bool? Build = null, bool? Cook = null, bool? Run = null, bool? SkipServer = null, bool? Clean = null, bool? Compressed = null, bool? UseDebugParamForEditorExe = null, bool? IterativeCooking = null, bool? CookAll = null, bool? CookPartialGC = null, bool? CookMapsOnly = null, bool? CookOnTheFly = null, bool? CookOnTheFlyStreaming = null, bool? UnversionedCookedContent = null, bool? EncryptIniFiles = null, bool? SkipCookingEditorContent = null, int? NumCookersToSpawn = null, string AdditionalCookerOptions = null, string BasedOnReleaseVersion = null, string CreateReleaseVersion = null, string CreateReleaseVersionBasePath = null, string BasedOnReleaseVersionBasePath = null, bool? GeneratePatch = null, string DLCName = null, string DiffCookedContentPath = null, bool? DLCIncludeEngineContent = null, bool? NewCook = null, bool? OldCook = null, bool? CrashReporter = null, bool? DedicatedServer = null, bool? Client = null, bool? Deploy = null, bool? FileServer = null, bool? Foreign = null, bool? ForeignCode = null, bool? LogWindow = null, bool? NoCleanStage = null, bool? NoClient = null, bool? NoDebugInfo = null, bool? NoXGE = null, bool? Package = null, bool? Pak = null, bool? Prereqs = null, string AppLocalDirectory = null, bool? NoBootstrapExe = null, bool? SignedPak = null, bool? NullRHI = null, bool? FakeClient = null, bool? EditorTest = null, bool? RunAutomationTests = null, string RunAutomationTest = null, int? CrashIndex = null, bool? SkipCook = null, bool? SkipCookOnTheFly = null, bool? SkipPak = null, bool? SkipStage = null, bool? Stage = null, bool? Manifests = null, bool? CreateChunkInstall = null, bool? Unattended = null, int? NumClients = null, bool? Archive = null, string ArchiveDirectoryParam = null, bool? ArchiveMetaData = null, bool? CreateAppBundle = null, ParamList<string> ProgramTargets = null, bool? Distribution = null, bool? Prebuilt = null, int? RunTimeoutSeconds = null, string SpecifiedArchitecture = null, bool? IterativeDeploy = null, bool? FastCook = null, bool? IgnoreCookErrors = null, bool? RunAssetNativization = null, bool? CodeSign = null, bool? TreatNonShippingBinariesAsDebugFiles = null, string Provision = null, string Certificate = null, ParamList<string> InMapsToRebuildLightMaps = null, ParamList<string> TitleID = null ) { // //// Use this.Name with properties and fields! // this.RawProjectPath = RawProjectPath; if (DirectoriesToCook != null) { this.DirectoriesToCook = DirectoriesToCook; } this.InternationalizationPreset = ParseParamValueIfNotSpecified(Command, InternationalizationPreset, "i18npreset"); // If not specified in parameters, check commandline. if (CulturesToCook == null) { if (Command != null) { var CookCulturesString = Command.ParseParamValue("CookCultures"); if (CookCulturesString != null) { this.CulturesToCook = new ParamList<string>(CookCulturesString.Split(',')); } } } else { this.CulturesToCook = CulturesToCook; } if (ClientCookedTargets != null) { this.ClientCookedTargets = ClientCookedTargets; } if (ServerCookedTargets != null) { this.ServerCookedTargets = ServerCookedTargets; } if (EditorTargets != null) { this.EditorTargets = EditorTargets; } if (ProgramTargets != null) { this.ProgramTargets = ProgramTargets; } // Parse command line params for client platforms "-TargetPlatform=Win64+Mac", "-Platform=Win64+Mac" and also "-Win64", "-Mac" etc. if (ClientDependentPlatformMap != null) { this.ClientDependentPlatformMap = ClientDependentPlatformMap; } List<TargetPlatformDescriptor> DefaultTargetPlatforms = new ParamList<TargetPlatformDescriptor>(new TargetPlatformDescriptor(HostPlatform.Current.HostEditorPlatform)); this.ClientTargetPlatforms = SetupTargetPlatforms(ref this.ClientDependentPlatformMap, Command, ClientTargetPlatforms, DefaultTargetPlatforms, true, "TargetPlatform", "Platform"); // Parse command line params for server platforms "-ServerTargetPlatform=Win64+Mac", "-ServerPlatform=Win64+Mac". "-Win64" etc is not allowed here if (ServerDependentPlatformMap != null) { this.ServerDependentPlatformMap = ServerDependentPlatformMap; } this.ServerTargetPlatforms = SetupTargetPlatforms(ref this.ServerDependentPlatformMap, Command, ServerTargetPlatforms, this.ClientTargetPlatforms, false, "ServerTargetPlatform", "ServerPlatform"); this.Build = GetParamValueIfNotSpecified(Command, Build, this.Build, "build"); this.Run = GetParamValueIfNotSpecified(Command, Run, this.Run, "run"); this.Cook = GetParamValueIfNotSpecified(Command, Cook, this.Cook, "cook"); this.NewCook = GetParamValueIfNotSpecified(Command, NewCook, this.NewCook, "NewCook"); this.OldCook = GetParamValueIfNotSpecified(Command, OldCook, this.OldCook, "OldCook"); this.CreateReleaseVersionBasePath = ParseParamValueIfNotSpecified(Command, CreateReleaseVersionBasePath, "createreleaseversionroot", String.Empty); this.BasedOnReleaseVersionBasePath = ParseParamValueIfNotSpecified(Command, BasedOnReleaseVersionBasePath, "basedonreleaseversionroot", String.Empty); this.CreateReleaseVersion = ParseParamValueIfNotSpecified(Command, CreateReleaseVersion, "createreleaseversion", String.Empty); this.BasedOnReleaseVersion = ParseParamValueIfNotSpecified(Command, BasedOnReleaseVersion, "basedonreleaseversion", String.Empty); this.GeneratePatch = GetParamValueIfNotSpecified(Command, GeneratePatch, this.GeneratePatch, "GeneratePatch"); this.AdditionalCookerOptions = ParseParamValueIfNotSpecified(Command, AdditionalCookerOptions, "AdditionalCookerOptions", String.Empty); this.DLCName = ParseParamValueIfNotSpecified(Command, DLCName, "DLCName", String.Empty); this.DiffCookedContentPath = ParseParamValueIfNotSpecified(Command, DiffCookedContentPath, "DiffCookedContentPath", String.Empty); this.DLCIncludeEngineContent = GetParamValueIfNotSpecified(Command, DLCIncludeEngineContent, this.DLCIncludeEngineContent, "DLCIncludeEngineContent"); this.SkipCook = GetParamValueIfNotSpecified(Command, SkipCook, this.SkipCook, "skipcook"); if (this.SkipCook) { this.Cook = true; } this.Clean = GetOptionalParamValueIfNotSpecified(Command, Clean, this.Clean, "clean", null); this.SignPak = ParseParamValueIfNotSpecified(Command, SignPak, "signpak", String.Empty); this.SignedPak = !String.IsNullOrEmpty(this.SignPak) || GetParamValueIfNotSpecified(Command, SignedPak, this.SignedPak, "signedpak"); if (string.IsNullOrEmpty(this.SignPak)) { this.SignPak = Path.Combine(RawProjectPath.Directory.FullName, @"Build\NoRedist\Keys.txt"); if (!File.Exists(this.SignPak)) { this.SignPak = null; } } this.Pak = GetParamValueIfNotSpecified(Command, Pak, this.Pak, "pak"); this.SkipPak = GetParamValueIfNotSpecified(Command, SkipPak, this.SkipPak, "skippak"); if (this.SkipPak) { this.Pak = true; } this.NoXGE = GetParamValueIfNotSpecified(Command, NoXGE, this.NoXGE, "noxge"); this.CookOnTheFly = GetParamValueIfNotSpecified(Command, CookOnTheFly, this.CookOnTheFly, "cookonthefly"); if (this.CookOnTheFly && this.SkipCook) { this.Cook = false; } this.CookOnTheFlyStreaming = GetParamValueIfNotSpecified(Command, CookOnTheFlyStreaming, this.CookOnTheFlyStreaming, "cookontheflystreaming"); this.UnversionedCookedContent = GetParamValueIfNotSpecified(Command, UnversionedCookedContent, this.UnversionedCookedContent, "UnversionedCookedContent"); this.EncryptIniFiles = GetParamValueIfNotSpecified(Command, EncryptIniFiles, this.EncryptIniFiles, "EncryptIniFiles"); this.SkipCookingEditorContent = GetParamValueIfNotSpecified(Command, SkipCookingEditorContent, this.SkipCookingEditorContent, "SkipCookingEditorContent"); if (NumCookersToSpawn.HasValue) { this.NumCookersToSpawn = NumCookersToSpawn.Value; } else if (Command != null) { this.NumCookersToSpawn = Command.ParseParamInt("NumCookersToSpawn"); } this.Compressed = GetParamValueIfNotSpecified(Command, Compressed, this.Compressed, "compressed"); this.UseDebugParamForEditorExe = GetParamValueIfNotSpecified(Command, UseDebugParamForEditorExe, this.UseDebugParamForEditorExe, "UseDebugParamForEditorExe"); this.IterativeCooking = GetParamValueIfNotSpecified(Command, IterativeCooking, this.IterativeCooking, new string[] { "iterativecooking", "iterate" } ); this.SkipCookOnTheFly = GetParamValueIfNotSpecified(Command, SkipCookOnTheFly, this.SkipCookOnTheFly, "skipcookonthefly"); this.CookAll = GetParamValueIfNotSpecified(Command, CookAll, this.CookAll, "CookAll"); this.CookPartialGC = GetParamValueIfNotSpecified(Command, CookPartialGC, this.CookPartialGC, "CookPartialGC"); this.CookMapsOnly = GetParamValueIfNotSpecified(Command, CookMapsOnly, this.CookMapsOnly, "CookMapsOnly"); this.FileServer = GetParamValueIfNotSpecified(Command, FileServer, this.FileServer, "fileserver"); this.DedicatedServer = GetParamValueIfNotSpecified(Command, DedicatedServer, this.DedicatedServer, "dedicatedserver", "server"); this.Client = GetParamValueIfNotSpecified(Command, Client, this.Client, "client"); /*if( this.Client ) { this.DedicatedServer = true; }*/ this.NoClient = GetParamValueIfNotSpecified(Command, NoClient, this.NoClient, "noclient"); this.LogWindow = GetParamValueIfNotSpecified(Command, LogWindow, this.LogWindow, "logwindow"); this.Stage = GetParamValueIfNotSpecified(Command, Stage, this.Stage, "stage"); this.SkipStage = GetParamValueIfNotSpecified(Command, SkipStage, this.SkipStage, "skipstage"); if (this.SkipStage) { this.Stage = true; } this.StageDirectoryParam = ParseParamValueIfNotSpecified(Command, StageDirectoryParam, "stagingdirectory", String.Empty, true); this.bCodeSign = GetParamValueIfNotSpecified(Command, CodeSign, CommandUtils.IsBuildMachine, "CodeSign"); this.bTreatNonShippingBinariesAsDebugFiles = GetParamValueIfNotSpecified(Command, TreatNonShippingBinariesAsDebugFiles, false, "TreatNonShippingBinariesAsDebugFiles"); this.Manifests = GetParamValueIfNotSpecified(Command, Manifests, this.Manifests, "manifests"); this.CreateChunkInstall = GetParamValueIfNotSpecified(Command, CreateChunkInstall, this.CreateChunkInstall, "createchunkinstall"); this.ChunkInstallDirectory = ParseParamValueIfNotSpecified(Command, ChunkInstallDirectory, "chunkinstalldirectory", String.Empty, true); this.ChunkInstallVersionString = ParseParamValueIfNotSpecified(Command, ChunkInstallVersionString, "chunkinstallversion", String.Empty, true); this.Archive = GetParamValueIfNotSpecified(Command, Archive, this.Archive, "archive"); this.ArchiveDirectoryParam = ParseParamValueIfNotSpecified(Command, ArchiveDirectoryParam, "archivedirectory", String.Empty, true); this.ArchiveMetaData = GetParamValueIfNotSpecified(Command, ArchiveMetaData, this.ArchiveMetaData, "archivemetadata"); this.CreateAppBundle = GetParamValueIfNotSpecified(Command, CreateAppBundle, true, "createappbundle"); this.Distribution = GetParamValueIfNotSpecified(Command, Distribution, this.Distribution, "distribution"); this.Prereqs = GetParamValueIfNotSpecified(Command, Prereqs, this.Prereqs, "prereqs"); this.AppLocalDirectory = ParseParamValueIfNotSpecified(Command, AppLocalDirectory, "applocaldirectory", String.Empty, true); this.NoBootstrapExe = GetParamValueIfNotSpecified(Command, NoBootstrapExe, this.NoBootstrapExe, "nobootstrapexe"); this.Prebuilt = GetParamValueIfNotSpecified(Command, Prebuilt, this.Prebuilt, "prebuilt"); if (this.Prebuilt) { this.SkipCook = true; /*this.SkipPak = true; this.SkipStage = true; this.Pak = true; this.Stage = true;*/ this.Cook = true; this.Archive = true; this.Deploy = true; this.Run = true; //this.StageDirectoryParam = this.PrebuiltDir; } this.NoDebugInfo = GetParamValueIfNotSpecified(Command, NoDebugInfo, this.NoDebugInfo, "nodebuginfo"); this.NoCleanStage = GetParamValueIfNotSpecified(Command, NoCleanStage, this.NoCleanStage, "nocleanstage"); this.MapToRun = ParseParamValueIfNotSpecified(Command, MapToRun, "map", String.Empty); this.AdditionalServerMapParams = ParseParamValueIfNotSpecified(Command, AdditionalServerMapParams, "AdditionalServerMapParams", String.Empty); this.Foreign = GetParamValueIfNotSpecified(Command, Foreign, this.Foreign, "foreign"); this.ForeignCode = GetParamValueIfNotSpecified(Command, ForeignCode, this.ForeignCode, "foreigncode"); this.StageCommandline = ParseParamValueIfNotSpecified(Command, StageCommandline, "cmdline"); this.BundleName = ParseParamValueIfNotSpecified(Command, BundleName, "bundlename"); this.RunCommandline = ParseParamValueIfNotSpecified(Command, RunCommandline, "addcmdline"); this.RunCommandline = this.RunCommandline.Replace('\'', '\"'); // replace any single quotes with double quotes this.ServerCommandline = ParseParamValueIfNotSpecified(Command, ServerCommandline, "servercmdline"); this.ServerCommandline = this.ServerCommandline.Replace('\'', '\"'); // replace any single quotes with double quotes this.Package = GetParamValueIfNotSpecified(Command, Package, this.Package, "package"); this.Deploy = GetParamValueIfNotSpecified(Command, Deploy, this.Deploy, "deploy"); this.IterativeDeploy = GetParamValueIfNotSpecified(Command, IterativeDeploy, this.IterativeDeploy, new string[] {"iterativedeploy", "iterate" } ); this.FastCook = GetParamValueIfNotSpecified(Command, FastCook, this.FastCook, "FastCook"); this.IgnoreCookErrors = GetParamValueIfNotSpecified(Command, IgnoreCookErrors, this.IgnoreCookErrors, "IgnoreCookErrors"); this.RunAssetNativization = GetParamValueIfNotSpecified(Command, RunAssetNativization, this.RunAssetNativization, "nativizeAssets"); string DeviceString = ParseParamValueIfNotSpecified(Command, Device, "device", String.Empty).Trim(new char[] { '\"' }); if(DeviceString == "") { this.Devices = new ParamList<string>(""); this.DeviceNames = new ParamList<string>(""); } else { this.Devices = new ParamList<string>(DeviceString.Split('+')); this.DeviceNames = new ParamList<string>(); foreach (var d in this.Devices) { // strip the platform prefix the specified device. if (d.Contains("@")) { this.DeviceNames.Add(d.Substring(d.IndexOf("@") + 1)); } else { this.DeviceNames.Add(d); } } } this.Provision = ParseParamValueIfNotSpecified(Command, Provision, "provision", String.Empty, true); this.Certificate = ParseParamValueIfNotSpecified(Command, Certificate, "certificate", String.Empty, true); this.ServerDevice = ParseParamValueIfNotSpecified(Command, ServerDevice, "serverdevice", this.Devices.Count > 0 ? this.Devices[0] : ""); this.NullRHI = GetParamValueIfNotSpecified(Command, NullRHI, this.NullRHI, "nullrhi"); this.FakeClient = GetParamValueIfNotSpecified(Command, FakeClient, this.FakeClient, "fakeclient"); this.EditorTest = GetParamValueIfNotSpecified(Command, EditorTest, this.EditorTest, "editortest"); this.RunAutomationTest = ParseParamValueIfNotSpecified(Command, RunAutomationTest, "RunAutomationTest"); this.RunAutomationTests = this.RunAutomationTest != "" || GetParamValueIfNotSpecified(Command, RunAutomationTests, this.RunAutomationTests, "RunAutomationTests"); this.SkipServer = GetParamValueIfNotSpecified(Command, SkipServer, this.SkipServer, "skipserver"); this.UE4Exe = ParseParamValueIfNotSpecified(Command, UE4Exe, "ue4exe", "UE4Editor-Cmd.exe"); this.Unattended = GetParamValueIfNotSpecified(Command, Unattended, this.Unattended, "unattended"); this.DeviceUsername = ParseParamValueIfNotSpecified(Command, DeviceUsername, "deviceuser", String.Empty); this.DevicePassword = ParseParamValueIfNotSpecified(Command, DevicePassword, "devicepass", String.Empty); this.CrashReporter = GetParamValueIfNotSpecified(Command, CrashReporter, this.CrashReporter, "crashreporter"); this.SpecifiedArchitecture = ParseParamValueIfNotSpecified(Command, SpecifiedArchitecture, "specifiedarchitecture", String.Empty); if (ClientConfigsToBuild == null) { if (Command != null) { var ClientConfig = Command.ParseParamValue("clientconfig"); if (ClientConfig == null) ClientConfig = Command.ParseParamValue("config"); if (ClientConfig != null) { this.ClientConfigsToBuild = new List<UnrealTargetConfiguration>(); var Configs = new ParamList<string>(ClientConfig.Split('+')); foreach (var ConfigName in Configs) { this.ClientConfigsToBuild.Add((UnrealTargetConfiguration)Enum.Parse(typeof(UnrealTargetConfiguration), ConfigName, true)); } } } } else { this.ClientConfigsToBuild = ClientConfigsToBuild; } if (Port == null) { if( Command != null ) { this.Port = new ParamList<string>(); var PortString = Command.ParseParamValue("port"); if (String.IsNullOrEmpty(PortString) == false) { var Ports = new ParamList<string>(PortString.Split('+')); foreach (var P in Ports) { this.Port.Add(P); } } } } else { this.Port = Port; } if (MapsToCook == null) { if (Command != null) { this.MapsToCook = new ParamList<string>(); var MapsString = Command.ParseParamValue("MapsToCook"); if (String.IsNullOrEmpty(MapsString) == false) { var MapNames = new ParamList<string>(MapsString.Split('+')); foreach ( var M in MapNames ) { this.MapsToCook.Add( M ); } } } } else { this.MapsToCook = MapsToCook; } if (String.IsNullOrEmpty(this.MapToRun) == false) { this.MapsToCook.Add(this.MapToRun); } if (InMapsToRebuildLightMaps == null) { if (Command != null) { this.MapsToRebuildLightMaps = new ParamList<string>(); var MapsString = Command.ParseParamValue("MapsToRebuildLightMaps"); if (String.IsNullOrEmpty(MapsString) == false) { var MapNames = new ParamList<string>(MapsString.Split('+')); foreach (var M in MapNames) { this.MapsToRebuildLightMaps.Add(M); } } } } else { this.MapsToRebuildLightMaps = InMapsToRebuildLightMaps; } if (TitleID == null) { if (Command != null) { this.TitleID = new ParamList<string>(); var TitleString = Command.ParseParamValue("TitleID"); if (String.IsNullOrEmpty(TitleString) == false) { var TitleIDs = new ParamList<string>(TitleString.Split('+')); foreach (var T in TitleIDs) { this.TitleID.Add(T); } } } } else { this.TitleID = TitleID; } if (ServerConfigsToBuild == null) { if (Command != null) { var ServerConfig = Command.ParseParamValue("serverconfig"); if (ServerConfig == null) ServerConfig = Command.ParseParamValue("config"); if (ServerConfig != null) { this.ServerConfigsToBuild = new List<UnrealTargetConfiguration>(); var Configs = new ParamList<string>(ServerConfig.Split('+')); foreach (var ConfigName in Configs) { this.ServerConfigsToBuild.Add((UnrealTargetConfiguration)Enum.Parse(typeof(UnrealTargetConfiguration), ConfigName, true)); } } } } else { this.ServerConfigsToBuild = ServerConfigsToBuild; } if (NumClients.HasValue) { this.NumClients = NumClients.Value; } else if (Command != null) { this.NumClients = Command.ParseParamInt("numclients"); } if (CrashIndex.HasValue) { this.CrashIndex = CrashIndex.Value; } else if (Command != null) { this.CrashIndex = Command.ParseParamInt("CrashIndex"); } if (RunTimeoutSeconds.HasValue) { this.RunTimeoutSeconds = RunTimeoutSeconds.Value; } else if (Command != null) { this.RunTimeoutSeconds = Command.ParseParamInt("runtimeoutseconds"); } AutodetectSettings(false); ValidateAndLog(); }
/// <summary> /// Constructor. Be sure to use this.ParamName to set the actual property name as parameter names and property names /// overlap here. /// If a parameter value is not set, it will be parsed from the command line if the command is null, the default value will be used. /// </summary> public ProjectParams( string RawProjectPath, CommandUtils Command = null, string Device = null, string MapToRun = null, string Port = null, string RunCommandline = null, string StageCommandline = null, string BundleName = null, string StageDirectoryParam = null, string UE4Exe = null, string SignPak = null, List<UnrealTargetConfiguration> ClientConfigsToBuild = null, List<UnrealTargetConfiguration> ServerConfigsToBuild = null, ParamList<string> MapsToCook = null, ParamList<string> DirectoriesToCook = null, ParamList<string> ClientCookedTargets = null, ParamList<string> EditorTargets = null, ParamList<string> ServerCookedTargets = null, List<UnrealTargetPlatform> ClientTargetPlatforms = null, List<UnrealTargetPlatform> ServerTargetPlatforms = null, bool? Build = null, bool? Cook = null, string CookFlavor = null, bool? Run = null, bool? SkipServer = null, bool? Clean = null, bool? Compressed = null, bool? UseDebugParamForEditorExe = null, bool? IterativeCooking = null, bool? CookOnTheFly = null, bool? CrashReporter = null, bool? DedicatedServer = null, bool? Client = null, bool? Deploy = null, bool? FileServer = null, bool? Foreign = null, bool? ForeignCode = null, bool? LogWindow = null, bool? NoCleanStage = null, bool? NoClient = null, bool? NoDebugInfo = null, bool? NoXGE = null, bool? Package = null, bool? Pak = null, bool? SignedPak = null, bool? NullRHI = null, bool? FakeClient = null, bool? EditorTest = null, bool? RunAutomationTests = null, string RunAutomationTest = null, int? CrashIndex = null, bool? Rocket = null, bool? SkipCook = null, bool? SkipCookOnTheFly = null, bool? SkipPak = null, bool? SkipStage = null, bool? Stage = null, bool? Manifests = null, bool? Unattended = null, int? NumClients = null, bool? Archive = null, string ArchiveDirectoryParam = null, ParamList<string> ProgramTargets = null, bool? Distribution = null ) { // //// Use this.Name with properties and fields! // this.RawProjectPath = RawProjectPath; if (MapsToCook != null) { this.MapsToCook = MapsToCook; } if (DirectoriesToCook != null) { this.DirectoriesToCook = DirectoriesToCook; } if (ClientCookedTargets != null) { this.ClientCookedTargets = ClientCookedTargets; } if (ServerCookedTargets != null) { this.ServerCookedTargets = ServerCookedTargets; } if (EditorTargets != null) { this.EditorTargets = EditorTargets; } if (ProgramTargets != null) { this.ProgramTargets = ProgramTargets; } // Parse command line params for client platforms "-TargetPlatform=", "-Platform=" and also "-Win64", "-Mac" etc. this.ClientTargetPlatforms = SetupTargetPlatforms(Command, ClientTargetPlatforms, new ParamList<UnrealTargetPlatform>() {UnrealTargetPlatform.Win64}, true, "TargetPlatform", "Platform"); // Parse command line params for server paltforms "-ServerTargetPlatform", "-ServerPlatform"; "-Win64" etc is not allowed here this.ServerTargetPlatforms = SetupTargetPlatforms(Command, ServerTargetPlatforms, this.ClientTargetPlatforms, false, "ServerTargetPlatform", "ServerPlatform"); this.Build = GetParamValueIfNotSpecified(Command, Build, this.Build, "build"); this.Run = GetParamValueIfNotSpecified(Command, Run, this.Run, "run"); this.Cook = GetParamValueIfNotSpecified(Command, Cook, this.Cook, "cook"); this.CookFlavor = ParseParamValueIfNotSpecified(Command, CookFlavor, "cookflavor", String.Empty); this.SkipCook = GetParamValueIfNotSpecified(Command, SkipCook, this.SkipCook, "skipcook"); if (this.SkipCook) { this.Cook = true; } this.Clean = GetOptionalParamValueIfNotSpecified(Command, Clean, this.Clean, "clean", null); this.SignPak = ParseParamValueIfNotSpecified(Command, SignPak, "signpak", String.Empty); this.SignedPak = !String.IsNullOrEmpty(this.SignPak) || GetParamValueIfNotSpecified(Command, SignedPak, this.SignedPak, "signedpak"); this.Pak = this.SignedPak || GetParamValueIfNotSpecified(Command, Pak, this.Pak, "pak"); this.SkipPak = GetParamValueIfNotSpecified(Command, SkipPak, this.SkipPak, "skippak"); if (this.SkipPak) { this.Pak = true; } this.NoXGE = GetParamValueIfNotSpecified(Command, NoXGE, this.NoXGE, "noxge"); this.CookOnTheFly = GetParamValueIfNotSpecified(Command, CookOnTheFly, this.CookOnTheFly, "cookonthefly"); this.Compressed = GetParamValueIfNotSpecified(Command, Compressed, this.Compressed, "compressed"); this.UseDebugParamForEditorExe = GetParamValueIfNotSpecified(Command, UseDebugParamForEditorExe, this.UseDebugParamForEditorExe, "UseDebugParamForEditorExe"); this.IterativeCooking = GetParamValueIfNotSpecified(Command, IterativeCooking, this.IterativeCooking, "iterativecooking", "iterate"); this.SkipCookOnTheFly = GetParamValueIfNotSpecified(Command, SkipCookOnTheFly, this.SkipCookOnTheFly, "skipcookonthefly"); this.FileServer = GetParamValueIfNotSpecified(Command, FileServer, this.FileServer, "fileserver"); this.DedicatedServer = GetParamValueIfNotSpecified(Command, DedicatedServer, this.DedicatedServer, "dedicatedserver", "server"); this.Client = GetParamValueIfNotSpecified(Command, Client, this.Client, "client"); if( this.Client ) { this.DedicatedServer = true; } this.NoClient = GetParamValueIfNotSpecified(Command, NoClient, this.NoClient, "noclient"); this.LogWindow = GetParamValueIfNotSpecified(Command, LogWindow, this.LogWindow, "logwindow"); this.Stage = GetParamValueIfNotSpecified(Command, Stage, this.Stage, "stage"); this.SkipStage = GetParamValueIfNotSpecified(Command, SkipStage, this.SkipStage, "skipstage"); if (this.SkipStage) { this.Stage = true; } this.StageDirectoryParam = ParseParamValueIfNotSpecified(Command, StageDirectoryParam, "stagingdirectory", String.Empty).Trim(new char[]{'\"'}); this.Manifests = GetParamValueIfNotSpecified(Command, Manifests, this.Manifests, "manifests"); this.Archive = GetParamValueIfNotSpecified(Command, Archive, this.Archive, "archive"); this.ArchiveDirectoryParam = ParseParamValueIfNotSpecified(Command, ArchiveDirectoryParam, "archivedirectory", String.Empty); this.Distribution = GetParamValueIfNotSpecified(Command, Distribution, this.Distribution, "distribution"); this.NoDebugInfo = GetParamValueIfNotSpecified(Command, NoDebugInfo, this.NoDebugInfo, "nodebuginfo"); this.NoCleanStage = GetParamValueIfNotSpecified(Command, NoCleanStage, this.NoCleanStage, "nocleanstage"); this.MapToRun = ParseParamValueIfNotSpecified(Command, MapToRun, "map", String.Empty); this.Foreign = GetParamValueIfNotSpecified(Command, Foreign, this.Foreign, "foreign"); this.ForeignCode = GetParamValueIfNotSpecified(Command, ForeignCode, this.ForeignCode, "foreigncode"); this.StageCommandline = ParseParamValueIfNotSpecified(Command, StageCommandline, "cmdline"); this.BundleName = ParseParamValueIfNotSpecified(Command, BundleName, "bundlename"); this.RunCommandline = ParseParamValueIfNotSpecified(Command, RunCommandline, "addcmdline"); this.Package = GetParamValueIfNotSpecified(Command, Package, this.Package, "package"); this.Deploy = GetParamValueIfNotSpecified(Command, Deploy, this.Deploy, "deploy"); this.Device = ParseParamValueIfNotSpecified(Command, Device, "device", String.Empty).Trim(new char[]{'\"'}); this.ServerDevice = ParseParamValueIfNotSpecified(Command, ServerDevice, "serverdevice", this.Device); this.Port = ParseParamValueIfNotSpecified(Command, Port, "port", String.Empty); this.NullRHI = GetParamValueIfNotSpecified(Command, NullRHI, this.NullRHI, "nullrhi"); this.FakeClient = GetParamValueIfNotSpecified(Command, FakeClient, this.FakeClient, "fakeclient"); this.EditorTest = GetParamValueIfNotSpecified(Command, EditorTest, this.EditorTest, "editortest"); this.RunAutomationTest = ParseParamValueIfNotSpecified(Command, RunAutomationTest, "RunAutomationTest"); this.RunAutomationTests = this.RunAutomationTest != "" || GetParamValueIfNotSpecified(Command, RunAutomationTests, this.RunAutomationTests, "RunAutomationTests"); this.SkipServer = GetParamValueIfNotSpecified(Command, SkipServer, this.SkipServer, "skipserver"); this.Rocket = GetParamValueIfNotSpecified(Command, Rocket, this.Rocket || GlobalCommandLine.Rocket, "rocket"); this.UE4Exe = ParseParamValueIfNotSpecified(Command, UE4Exe, "ue4exe", "UE4Editor-Cmd.exe"); this.Unattended = GetParamValueIfNotSpecified(Command, Unattended, this.Unattended, "unattended"); this.DeviceUsername = ParseParamValueIfNotSpecified(Command, DeviceUsername, "deviceuser", String.Empty); this.DevicePassword = ParseParamValueIfNotSpecified(Command, DevicePassword, "devicepass", String.Empty); this.CrashReporter = GetParamValueIfNotSpecified(Command, CrashReporter, this.CrashReporter, "crashreporter"); if (ClientConfigsToBuild == null) { if (Command != null) { var ClientConfig = Command.ParseParamValue("clientconfig"); if (ClientConfig != null) { this.ClientConfigsToBuild = new List<UnrealTargetConfiguration>(); var Configs = new ParamList<string>(ClientConfig.Split('+')); foreach (var ConfigName in Configs) { this.ClientConfigsToBuild.Add((UnrealTargetConfiguration)Enum.Parse(typeof(UnrealTargetConfiguration), ConfigName, true)); } } } } else { this.ClientConfigsToBuild = ClientConfigsToBuild; } if (ServerConfigsToBuild == null) { if (Command != null) { var ServerConfig = Command.ParseParamValue("serverconfig"); if (ServerConfig != null && ServerConfigsToBuild == null) { this.ServerConfigsToBuild = new List<UnrealTargetConfiguration>(); var Configs = new ParamList<string>(ServerConfig.Split('+')); foreach (var ConfigName in Configs) { this.ServerConfigsToBuild.Add((UnrealTargetConfiguration)Enum.Parse(typeof(UnrealTargetConfiguration), ConfigName, true)); } } } } else { this.ServerConfigsToBuild = ServerConfigsToBuild; } if (NumClients.HasValue) { this.NumClients = NumClients.Value; } else if (Command != null) { this.NumClients = Command.ParseParamInt("numclients"); } if (CrashIndex.HasValue) { this.CrashIndex = CrashIndex.Value; } else if (Command != null) { this.CrashIndex = Command.ParseParamInt("CrashIndex"); } AutodetectSettings(false); ValidateAndLog(); }