104 lines
3.8 KiB
C#
104 lines
3.8 KiB
C#
using Mono.Cecil;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using MonoMod.Utils;
|
|
using System.Reflection;
|
|
|
|
namespace MonoMod {
|
|
class Program {
|
|
|
|
#if !MONOMOD_NO_ENTRY
|
|
public static int Main(string[] args) {
|
|
Console.WriteLine("MonoMod " + typeof(Program).GetTypeInfo().Assembly.GetName().Version);
|
|
|
|
if (args.Length == 0) {
|
|
Console.WriteLine("No valid arguments (assembly path) passed.");
|
|
if (System.Diagnostics.Debugger.IsAttached) // Keep window open when running in IDE
|
|
Console.ReadKey();
|
|
return 0;
|
|
}
|
|
|
|
string pathIn;
|
|
string pathOut;
|
|
|
|
int pathInI = 0;
|
|
|
|
for (int i = 0; i < args.Length; i++)
|
|
if (args[i] == "--dependency-missing-throw=0" || args[i] == "--lean-dependencies") {
|
|
Environment.SetEnvironmentVariable("MONOMOD_DEPENDENCY_MISSING_THROW", "0");
|
|
pathInI = i + 1;
|
|
} else if (args[i] == "--cleanup=0" || args[i] == "--skip-cleanup") {
|
|
Environment.SetEnvironmentVariable("MONOMOD_CLEANUP", "0");
|
|
pathInI = i + 1;
|
|
} else if (args[i] == "--cleanup-all=1" || args[i] == "--cleanup-all") {
|
|
Environment.SetEnvironmentVariable("MONOMOD_CLEANUP_ALL", "1");
|
|
pathInI = i + 1;
|
|
} else if (args[i] == "--verbose=1" || args[i] == "--verbose" || args[i] == "-v") {
|
|
Environment.SetEnvironmentVariable("MONOMOD_LOG_VERBOSE", "1");
|
|
pathInI = i + 1;
|
|
} else if (args[i] == "--cache=0" || args[i] == "--uncached") {
|
|
Environment.SetEnvironmentVariable("MONOMOD_RELINKER_CACHED", "0");
|
|
pathInI = i + 1;
|
|
}
|
|
|
|
if (pathInI >= args.Length) {
|
|
Console.WriteLine("No assembly path passed.");
|
|
if (System.Diagnostics.Debugger.IsAttached) // Keep window open when running in IDE
|
|
Console.ReadKey();
|
|
return 0;
|
|
}
|
|
|
|
pathIn = args[pathInI];
|
|
pathOut = args.Length != 1 && pathInI != args.Length - 1 ? args[args.Length - 1] : null;
|
|
pathOut = pathOut ?? Path.Combine(Path.GetDirectoryName(pathIn), "MONOMODDED_" + Path.GetFileName(pathIn));
|
|
|
|
if (File.Exists(pathOut)) File.Delete(pathOut);
|
|
|
|
#if !DEBUG
|
|
try {
|
|
#endif
|
|
using (MonoModder mm = new MonoModder() {
|
|
InputPath = pathIn,
|
|
OutputPath = pathOut
|
|
}) {
|
|
mm.Read();
|
|
|
|
if (args.Length <= 2) {
|
|
mm.Log("[Main] Scanning for mods in directory.");
|
|
mm.ReadMod(Directory.GetParent(pathIn).FullName);
|
|
} else {
|
|
mm.Log("[Main] Reading mods list from arguments.");
|
|
for (int i = pathInI + 1; i < args.Length - 1; i++)
|
|
mm.ReadMod(args[i]);
|
|
}
|
|
|
|
mm.MapDependencies();
|
|
|
|
mm.Log("[Main] mm.AutoPatch();");
|
|
mm.AutoPatch();
|
|
|
|
mm.Write();
|
|
|
|
mm.Log("[Main] Done.");
|
|
}
|
|
#if !DEBUG
|
|
} catch (Exception e) {
|
|
Console.WriteLine(e);
|
|
if (System.Diagnostics.Debugger.IsAttached) // Keep window open when running in IDE
|
|
Console.ReadKey();
|
|
return -1;
|
|
}
|
|
#endif
|
|
|
|
if (System.Diagnostics.Debugger.IsAttached) // Keep window open when running in IDE
|
|
Console.ReadKey();
|
|
return 0;
|
|
}
|
|
#endif
|
|
|
|
}
|
|
}
|