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