mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-03-08 10:10:00 +00:00
Fixed keyfile handling in Visual Studio.
This commit is contained in:
parent
5fdf830e2c
commit
4e191bc928
|
@ -21,13 +21,14 @@ namespace OpenTK.Build
|
||||||
{
|
{
|
||||||
class Project
|
class Project
|
||||||
{
|
{
|
||||||
static string RootPath;
|
static string RootPath = Directory.GetCurrentDirectory();
|
||||||
|
static string SourcePath = Path.Combine(RootPath, "Source");
|
||||||
|
|
||||||
const string bindings = "Generator.Prebuild.xml";
|
const string bindings = "Generator.Prebuild.xml";
|
||||||
const string opentk = "OpenTK.Prebuild.xml";
|
const string opentk = "OpenTK.Prebuild.xml";
|
||||||
const string quickstart = "QuickStart.Prebuild.xml";
|
const string quickstart = "QuickStart.Prebuild.xml";
|
||||||
|
|
||||||
const string keyfile = "OpenTK.snk";
|
const string keyfile = "OpenTK.snk"; // Do not change
|
||||||
|
|
||||||
const string Usage = @"Usage: Build.exe target
|
const string Usage = @"Usage: Build.exe target
|
||||||
target: one of vs, vs9, clean, distclean, help";
|
target: one of vs, vs9, clean, distclean, help";
|
||||||
|
@ -52,6 +53,7 @@ Assembly signing:
|
||||||
|
|
||||||
enum BuildTarget
|
enum BuildTarget
|
||||||
{
|
{
|
||||||
|
None = 0,
|
||||||
VS2005,
|
VS2005,
|
||||||
VS2008,
|
VS2008,
|
||||||
Mono,
|
Mono,
|
||||||
|
@ -60,8 +62,6 @@ Assembly signing:
|
||||||
DistClean,
|
DistClean,
|
||||||
}
|
}
|
||||||
|
|
||||||
static BuildTarget target = BuildTarget.VS2005;
|
|
||||||
|
|
||||||
static void PrintUsage()
|
static void PrintUsage()
|
||||||
{
|
{
|
||||||
Console.WriteLine(Usage);
|
Console.WriteLine(Usage);
|
||||||
|
@ -85,18 +85,61 @@ Assembly signing:
|
||||||
args[0] = "vs";
|
args[0] = "vs";
|
||||||
}
|
}
|
||||||
|
|
||||||
RootPath = Directory.GetCurrentDirectory();
|
try
|
||||||
|
{
|
||||||
|
PreparePrebuildFiles();
|
||||||
|
PrepareEnvironment();
|
||||||
|
|
||||||
//string sign_assembly = CheckKeyFile(keyfile) ? "SIGN_ASSEMBLY" : "";
|
BuildTarget target = SelectTarget(args);
|
||||||
string sign_assembly = CheckKeyFile(keyfile) ? @"<KeyFile>../../" + keyfile + @"</KeyFile>" : "";
|
if (target != BuildTarget.None)
|
||||||
|
{
|
||||||
|
Build(target);
|
||||||
|
foreach (string file in Directory.GetFiles("Source", "*.csproj", SearchOption.AllDirectories))
|
||||||
|
ApplyMonoDevelopWorkarounds(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
// Wait until Prebuild releases the input files.
|
||||||
|
System.Threading.Thread.Sleep(2000);
|
||||||
|
DeletePrebuildFiles();
|
||||||
|
}
|
||||||
|
|
||||||
File.WriteAllText(bindings, String.Format(Resources.Generator, sign_assembly));
|
WaitForExit();
|
||||||
File.WriteAllText(opentk, String.Format(Resources.OpenTK, sign_assembly));
|
}
|
||||||
File.WriteAllText(quickstart, String.Format(Resources.QuickStart,sign_assembly));
|
|
||||||
|
|
||||||
|
private static void PrepareEnvironment()
|
||||||
|
{
|
||||||
// Workaroung for nant on x64 windows (safe for other platforms too, as this affects only the current process).
|
// Workaroung for nant on x64 windows (safe for other platforms too, as this affects only the current process).
|
||||||
Environment.SetEnvironmentVariable("CommonProgramFiles(x86)", String.Empty, EnvironmentVariableTarget.Process);
|
Environment.SetEnvironmentVariable("CommonProgramFiles(x86)", String.Empty, EnvironmentVariableTarget.Process);
|
||||||
Environment.SetEnvironmentVariable("ProgramFiles(x86)", String.Empty, EnvironmentVariableTarget.Process);
|
Environment.SetEnvironmentVariable("ProgramFiles(x86)", String.Empty, EnvironmentVariableTarget.Process);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void PreparePrebuildFiles()
|
||||||
|
{
|
||||||
|
//string sign_assembly = CheckKeyFile(keyfile) ? "SIGN_ASSEMBLY" : "";
|
||||||
|
string sign_assembly = CheckKeyFile(keyfile) ? @"<KeyFile>" + keyfile + @"</KeyFile>" : "";
|
||||||
|
if (sign_assembly != "")
|
||||||
|
DistributeKeyFile(keyfile);
|
||||||
|
|
||||||
|
File.WriteAllText(bindings, String.Format(Resources.Generator, sign_assembly));
|
||||||
|
File.WriteAllText(opentk, String.Format(Resources.OpenTK, sign_assembly));
|
||||||
|
File.WriteAllText(quickstart, String.Format(Resources.QuickStart, sign_assembly));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copies keyfile to the various source directories. This is necessary
|
||||||
|
// as Visual Studio won't pick up the file otherwise.
|
||||||
|
static void DistributeKeyFile(string keyfile)
|
||||||
|
{
|
||||||
|
foreach (string dir in Directory.GetDirectories("Source"))
|
||||||
|
{
|
||||||
|
File.Copy(keyfile, Path.Combine(dir, keyfile), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static BuildTarget SelectTarget(string[] args)
|
||||||
|
{
|
||||||
|
BuildTarget target = BuildTarget.None;
|
||||||
|
|
||||||
foreach (string s in args)
|
foreach (string s in args)
|
||||||
{
|
{
|
||||||
|
@ -108,7 +151,7 @@ Assembly signing:
|
||||||
|
|
||||||
case "help":
|
case "help":
|
||||||
PrintHelp();
|
PrintHelp();
|
||||||
return;
|
break;
|
||||||
|
|
||||||
case "mono":
|
case "mono":
|
||||||
case "xbuild":
|
case "xbuild":
|
||||||
|
@ -142,10 +185,15 @@ Assembly signing:
|
||||||
default:
|
default:
|
||||||
Console.WriteLine("Unknown command: {0}", s);
|
Console.WriteLine("Unknown command: {0}", s);
|
||||||
PrintUsage();
|
PrintUsage();
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Build(BuildTarget target)
|
||||||
|
{
|
||||||
switch (target)
|
switch (target)
|
||||||
{
|
{
|
||||||
//case BuildTarget.Mono:
|
//case BuildTarget.Mono:
|
||||||
|
@ -181,22 +229,24 @@ Assembly signing:
|
||||||
ExecutePrebuild("/target", "vs2008", "/file", opentk);
|
ExecutePrebuild("/target", "vs2008", "/file", opentk);
|
||||||
ExecutePrebuild("/target", "vs2008", "/file", quickstart);
|
ExecutePrebuild("/target", "vs2008", "/file", quickstart);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BuildTarget.Clean:
|
case BuildTarget.Clean:
|
||||||
Console.WriteLine("Cleaning intermediate object files.");
|
Console.WriteLine("Cleaning intermediate object files.");
|
||||||
ExecutePrebuild("/clean", "/yes", "/file", bindings);
|
ExecutePrebuild("/clean", "/yes", "/file", bindings);
|
||||||
ExecutePrebuild("/clean", "/yes", "/file", opentk);
|
ExecutePrebuild("/clean", "/yes", "/file", opentk);
|
||||||
ExecutePrebuild("/clean", "/yes", "/file", quickstart);
|
ExecutePrebuild("/clean", "/yes", "/file", quickstart);
|
||||||
DeleteDirectories(RootPath, "obj");
|
DeleteDirectories(RootPath, "obj");
|
||||||
|
DeleteFiles(SourcePath, keyfile);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BuildTarget.DistClean:
|
case BuildTarget.DistClean:
|
||||||
Console.WriteLine("Cleaning intermediate and final object files.");
|
Console.WriteLine("Cleaning intermediate and final object files.");
|
||||||
ExecutePrebuild("/clean", "/yes", "/file", bindings);
|
ExecutePrebuild("/clean", "/yes", "/file", bindings);
|
||||||
ExecutePrebuild("/clean", "/yes", "/file", opentk);
|
ExecutePrebuild("/clean", "/yes", "/file", opentk);
|
||||||
ExecutePrebuild("/clean", "/yes", "/file", quickstart);
|
ExecutePrebuild("/clean", "/yes", "/file", quickstart);
|
||||||
DeleteDirectories(RootPath, "obj");
|
DeleteDirectories(RootPath, "obj");
|
||||||
DeleteDirectories(RootPath, "bin");
|
DeleteDirectories(RootPath, "bin");
|
||||||
|
DeleteFiles(SourcePath, keyfile);
|
||||||
|
|
||||||
string binaries_path = Path.Combine(RootPath, "Binaries");
|
string binaries_path = Path.Combine(RootPath, "Binaries");
|
||||||
if (Directory.Exists(binaries_path))
|
if (Directory.Exists(binaries_path))
|
||||||
|
@ -207,19 +257,12 @@ Assembly signing:
|
||||||
default:
|
default:
|
||||||
Console.WriteLine("Unknown target: {0}", target);
|
Console.WriteLine("Unknown target: {0}", target);
|
||||||
PrintUsage();
|
PrintUsage();
|
||||||
return;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Wait until Prebuild releases the input files.
|
static void WaitForExit()
|
||||||
System.Threading.Thread.Sleep(1000);
|
{
|
||||||
|
|
||||||
File.Delete(bindings);
|
|
||||||
File.Delete(opentk);
|
|
||||||
File.Delete(quickstart);
|
|
||||||
|
|
||||||
foreach (string file in Directory.GetFiles("Source", "*.csproj", SearchOption.AllDirectories))
|
|
||||||
ApplyMonoDevelopWorkarounds(file);
|
|
||||||
|
|
||||||
if (Debugger.IsAttached)
|
if (Debugger.IsAttached)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Press any key to continue...");
|
Console.WriteLine("Press any key to continue...");
|
||||||
|
@ -227,11 +270,27 @@ Assembly signing:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void DeletePrebuildFiles()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
File.Delete(bindings);
|
||||||
|
File.Delete(opentk);
|
||||||
|
File.Delete(quickstart);
|
||||||
|
}
|
||||||
|
catch (IOException e)
|
||||||
|
{
|
||||||
|
Console.WriteLine("[Warning] Failed to delete prebuild files, error follows:");
|
||||||
|
Console.WriteLine(e.ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void ApplyMonoDevelopWorkarounds(string solution)
|
static void ApplyMonoDevelopWorkarounds(string solution)
|
||||||
{
|
{
|
||||||
File.WriteAllText(solution, File.ReadAllText(solution)
|
// Both workarounds cause problems in visual studio...
|
||||||
.Replace("AssemblyOriginatorKeyFile", "AssemblyKeyFile"));
|
//File.WriteAllText(solution, File.ReadAllText(solution)
|
||||||
//.Replace(@"..\", @"../")); // Causes problems in visual studio
|
// .Replace("AssemblyOriginatorKeyFile", "AssemblyKeyFile"));
|
||||||
|
// .Replace(@"..\", @"../"));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DeleteDirectories(string root_path, string search)
|
static void DeleteDirectories(string root_path, string search)
|
||||||
|
@ -245,6 +304,17 @@ Assembly signing:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void DeleteFiles(string root_path, string search)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Deleting {0} files", search);
|
||||||
|
List<string> matches = new List<string>();
|
||||||
|
FindDirectories(root_path, search, matches);
|
||||||
|
foreach (string m in matches)
|
||||||
|
{
|
||||||
|
File.Delete(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void FindDirectories(string directory, string search, List<string> matches)
|
static void FindDirectories(string directory, string search, List<string> matches)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -264,6 +334,25 @@ Assembly signing:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void FindFiles(string directory, string search, List<string> matches)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
foreach (string d in Directory.GetDirectories(directory))
|
||||||
|
{
|
||||||
|
foreach (string f in Directory.GetFiles(d, search))
|
||||||
|
{
|
||||||
|
matches.Add(f);
|
||||||
|
}
|
||||||
|
FindFiles(d, search, matches);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (System.Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void FileCopy(string srcdir, string destdir, Regex match)
|
static void FileCopy(string srcdir, string destdir, Regex match)
|
||||||
{
|
{
|
||||||
//DirectoryInfo dir;
|
//DirectoryInfo dir;
|
||||||
|
|
Loading…
Reference in a new issue