84 lines
2.7 KiB
C#
84 lines
2.7 KiB
C#
|
|
using System.Reflection;
|
|||
|
|
using CommandLine;
|
|||
|
|
using CommandLine.Text;
|
|||
|
|
|
|||
|
|
namespace UnrealSharpBuildTool;
|
|||
|
|
|
|||
|
|
public enum BuildAction : int
|
|||
|
|
{
|
|||
|
|
Build,
|
|||
|
|
Clean,
|
|||
|
|
GenerateProject,
|
|||
|
|
UpdateProjectDependencies,
|
|||
|
|
Rebuild,
|
|||
|
|
Weave,
|
|||
|
|
PackageProject,
|
|||
|
|
GenerateSolution,
|
|||
|
|
BuildWeave,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public enum BuildConfig : int
|
|||
|
|
{
|
|||
|
|
Debug,
|
|||
|
|
Release,
|
|||
|
|
Publish,
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public class BuildToolOptions
|
|||
|
|
{
|
|||
|
|
[Option("Action", Required = true, HelpText = "The action the build tool should process. Possible values: Build, Clean, GenerateProject, Rebuild, Weave, PackageProject, GenerateSolution, BuildWeave.")]
|
|||
|
|
public BuildAction Action { get; set; }
|
|||
|
|
|
|||
|
|
[Option("DotNetPath", Required = false, HelpText = "The path to the dotnet.exe")]
|
|||
|
|
public string DotNetPath { get; set; } = string.Empty;
|
|||
|
|
|
|||
|
|
[Option("ProjectDirectory", Required = true, HelpText = "The directory where the .uproject file resides.")]
|
|||
|
|
public string ProjectDirectory { get; set; } = string.Empty;
|
|||
|
|
|
|||
|
|
[Option("PluginDirectory", Required = false, HelpText = "The UnrealSharp plugin directory.")]
|
|||
|
|
public string PluginDirectory { get; set; } = string.Empty;
|
|||
|
|
|
|||
|
|
[Option("EngineDirectory", Required = false, HelpText = "The Unreal Engine directory.")]
|
|||
|
|
public string EngineDirectory { get; set; } = string.Empty;
|
|||
|
|
|
|||
|
|
[Option("ProjectName", Required = true, HelpText = "The name of the Unreal Engine project.")]
|
|||
|
|
public string ProjectName { get; set; } = string.Empty;
|
|||
|
|
|
|||
|
|
[Option("AdditionalArgs", Required = false, HelpText = "Additional key-value arguments for the build tool.")]
|
|||
|
|
public IEnumerable<string> AdditionalArgs { get; set; } = new List<string>();
|
|||
|
|
|
|||
|
|
public string TryGetArgument(string argument)
|
|||
|
|
{
|
|||
|
|
return GetArguments(argument).FirstOrDefault() ?? string.Empty;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public IEnumerable<string> GetArguments(string argument)
|
|||
|
|
{
|
|||
|
|
return AdditionalArgs.Where(arg => arg.StartsWith(argument))
|
|||
|
|
.Select(arg => arg[(argument.Length + 1)..]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public bool HasArgument(string argument)
|
|||
|
|
{
|
|||
|
|
return AdditionalArgs.Any(arg => arg.StartsWith(argument));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static void PrintHelp(ParserResult<BuildToolOptions> result)
|
|||
|
|
{
|
|||
|
|
string name = Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly()!.Location);
|
|||
|
|
Console.Error.WriteLine($"Usage: {name} [options]");
|
|||
|
|
Console.Error.WriteLine("Options:");
|
|||
|
|
|
|||
|
|
var helpText = HelpText.AutoBuild(result, h => h, e => e);
|
|||
|
|
Console.WriteLine(helpText);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void NormalizePaths()
|
|||
|
|
{
|
|||
|
|
ProjectDirectory = Path.GetFullPath(ProjectDirectory);
|
|||
|
|
PluginDirectory = Path.GetFullPath(PluginDirectory);
|
|||
|
|
EngineDirectory = Path.GetFullPath(EngineDirectory);
|
|||
|
|
DotNetPath = Path.GetFullPath(DotNetPath);
|
|||
|
|
}
|
|||
|
|
}
|