diff --git a/src/Generator.Rewrite/Program.cs b/src/Generator.Rewrite/Program.cs index e866b00f..1a888d21 100644 --- a/src/Generator.Rewrite/Program.cs +++ b/src/Generator.Rewrite/Program.cs @@ -52,10 +52,7 @@ namespace OpenTK.Rewrite } var program = new Program(); - var file = args[0]; - var key = args[1]; - var options = args.Where(a => a.StartsWith("-") || a.StartsWith("/")); - program.Rewrite(file, key, options); + program.Rewrite(); } // mscorlib types @@ -69,13 +66,8 @@ namespace OpenTK.Rewrite // OpenTK.BindingsBase private static TypeDefinition TypeBindingsBase; - private static bool dllimport; - - private void Rewrite(string file, string keyfile, IEnumerable options) + private void Rewrite() { - IEnumerable optionsEnumerated = options as IList ?? options.ToList(); - dllimport = optionsEnumerated.Contains("-dllimport"); - // Specify assembly read and write parameters // We want to keep a valid symbols file (pdb or mdb) var read_params = new ReaderParameters(); @@ -85,11 +77,11 @@ namespace OpenTK.Rewrite read_params.ReadWrite = true; write_params.WriteSymbols = true; - if (!String.IsNullOrEmpty(keyfile) && File.Exists(keyfile)) + if (!String.IsNullOrEmpty(Options.StrongNameKey) && File.Exists(Options.StrongNameKey)) { - keyfile = Path.GetFullPath(keyfile); + string absoluteKeyFilePath = Path.GetFullPath(Options.StrongNameKey); - using (var fs = new FileStream(keyfile, FileMode.Open, FileAccess.Read)) + using (var fs = new FileStream(absoluteKeyFilePath, FileMode.Open, FileAccess.Read)) { var keypair = new System.Reflection.StrongNameKeyPair(fs); write_params.StrongNameKeyPair = keypair; @@ -103,7 +95,7 @@ namespace OpenTK.Rewrite // Load assembly and process all modules try { - using (AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly(file, read_params)) + using (AssemblyDefinition assembly = AssemblyDefinition.ReadAssembly(Options.TargetAssembly, read_params)) { var rewritten = assembly.CustomAttributes.FirstOrDefault(a => a.AttributeType.Name == "RewrittenAttribute"); if (rewritten == null) @@ -143,7 +135,7 @@ namespace OpenTK.Rewrite { foreach (var type in module.Types) { - Rewrite(type, optionsEnumerated); + Rewrite(type); } } } @@ -163,7 +155,7 @@ namespace OpenTK.Rewrite } } - private void Rewrite(TypeDefinition type, IEnumerable options) + private void Rewrite(TypeDefinition type) { var entry_points = type.Fields.FirstOrDefault(f => f.Name == "EntryPoints"); if (entry_points != null) @@ -173,7 +165,7 @@ namespace OpenTK.Rewrite entry_signatures.AddRange(type.Methods .Where(t => t.CustomAttributes.Any(a => a.AttributeType.Name == "SlotAttribute"))); - Rewrite(type, entry_points, entry_signatures, options); + Rewrite(type, entry_points, entry_signatures); RemoveNativeSignatures(type, entry_signatures); } @@ -191,7 +183,7 @@ namespace OpenTK.Rewrite private static int GetSlot(MethodDefinition signature) { // Pretend there is no slots if we want to force everything to work through DllImport (Android & iOS) - if (dllimport) + if (Options.UseDLLImport) { return -1; } @@ -207,14 +199,13 @@ namespace OpenTK.Rewrite } private void Rewrite(TypeDefinition type, FieldDefinition entry_points, - List entry_signatures, IEnumerable options) + List entry_signatures) { // Rewrite all wrapper methods var wrapper_signatures = new List(); wrapper_signatures.AddRange(type.Methods .Where(m => m.IsPublic && m.CustomAttributes.Any(a => a.AttributeType.Name == "AutoGeneratedAttribute"))); - IEnumerable optionsEnumerated = options as IList ?? options.ToList(); foreach (var wrapper in wrapper_signatures) { var autogenerated = wrapper.CustomAttributes @@ -226,7 +217,7 @@ namespace OpenTK.Rewrite var signature = entry_signatures.FirstOrDefault(s => s.Name == signature_name); int slot = GetSlot(signature); - ProcessMethod(wrapper, signature, slot, entry_points, optionsEnumerated); + ProcessMethod(wrapper, signature, slot, entry_points); } } @@ -236,7 +227,7 @@ namespace OpenTK.Rewrite { foreach (var nested_type in type.NestedTypes) { - Rewrite(nested_type, entry_points, entry_signatures, optionsEnumerated); + Rewrite(nested_type, entry_points, entry_signatures); } } } @@ -283,7 +274,7 @@ namespace OpenTK.Rewrite // Create body for method private static void ProcessMethod(MethodDefinition wrapper, MethodDefinition native, int slot, - FieldDefinition entry_points, IEnumerable options) + FieldDefinition entry_points) { var body = wrapper.Body; var il = body.GetILProcessor(); @@ -294,8 +285,7 @@ namespace OpenTK.Rewrite // and push each parameter on the stack DebugVariables vars = null; - IEnumerable optionsEnumerated = options as IList ?? options.ToList(); - if (optionsEnumerated.Contains("-debug")) + if (Options.EnableDebugCalls) { vars = EmitDebugPrologue(wrapper, il); } @@ -333,7 +323,7 @@ namespace OpenTK.Rewrite EmitParameterEpilogues(wrapper, native, body, il, generatedVariables); - if (optionsEnumerated.Contains("-debug")) + if (Options.EnableDebugCalls) { EmitDebugEpilogue(wrapper, il, vars); }