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.");
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |