59 lines
1.6 KiB
C#
59 lines
1.6 KiB
C#
using System.Reflection;
|
|
using CommandLine;
|
|
using CommandLine.Text;
|
|
|
|
namespace UnrealSharpWeaver;
|
|
|
|
public class WeaverOptions
|
|
{
|
|
[Option('p', "path", Required = true, HelpText = "Search paths for assemblies.")]
|
|
public required IEnumerable<string> AssemblyPaths { get; set; }
|
|
|
|
[Option('o', "output", Required = true, HelpText = "DLL output directory.")]
|
|
public required string OutputDirectory { get; set; }
|
|
|
|
public WeaverOptions(IEnumerable<string> assemblyPaths, string outputDirectory)
|
|
{
|
|
AssemblyPaths = assemblyPaths;
|
|
OutputDirectory = outputDirectory;
|
|
}
|
|
|
|
public WeaverOptions() : this([], string.Empty)
|
|
{
|
|
}
|
|
|
|
private static void PrintHelp(ParserResult<WeaverOptions> result)
|
|
{
|
|
if (result.Tag != ParserResultType.NotParsed)
|
|
{
|
|
return;
|
|
}
|
|
|
|
string name = Path.GetFileNameWithoutExtension(Assembly.GetEntryAssembly()!.Location);
|
|
Console.Error.WriteLine($"Usage: {name}");
|
|
Console.Error.WriteLine("Commands: ");
|
|
|
|
var helpText = HelpText.AutoBuild(result, h => h, e => e);
|
|
Console.WriteLine(helpText);
|
|
}
|
|
|
|
public static WeaverOptions ParseArguments(IEnumerable<string> args)
|
|
{
|
|
Parser parser = new Parser(settings =>
|
|
{
|
|
settings.AllowMultiInstance = true;
|
|
settings.HelpWriter = null;
|
|
});
|
|
|
|
ParserResult<WeaverOptions> result = parser.ParseArguments<WeaverOptions>(args);
|
|
|
|
if (result.Tag != ParserResultType.NotParsed)
|
|
{
|
|
return result.Value;
|
|
}
|
|
|
|
PrintHelp(result);
|
|
throw new InvalidOperationException("Invalid arguments.");
|
|
}
|
|
}
|