Fix unity build for osx

This commit is contained in:
Chris Marsh 2017-12-01 08:50:41 -08:00 committed by Chris Marsh
parent 82439911c6
commit 50ea4e61c6

View file

@ -5,52 +5,97 @@ using System.IO;
[InitializeOnLoad] [InitializeOnLoad]
public class ScriptBatch public class ScriptBatch
{ {
static ScriptBatch() static ScriptBatch()
{ {
EnsureDLL(); EnsureDLL();
} }
public static bool FileExists(string filename) public static bool FileExists(string filename)
{ {
return new FileInfo(filename).Exists; return new FileInfo(filename).Exists;
} }
public static void EnsureDLL() public static bool RunRpcBuildScript()
{ {
UnityEngine.Debug.Log("Make sure Discord dll exists"); UnityEngine.Debug.Log("Try to run build script");
string dstDll32 = "Assets/Plugins/x86/discord-rpc.dll"; Process proc = new Process();
string dstDll64 = "Assets/Plugins/x86_64/discord-rpc.dll"; #if UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
proc.StartInfo.UseShellExecute = false;
// brew installs cmake in /usr/local/bin, which Unity seems to strip from PATH?
string newPath = proc.StartInfo.EnvironmentVariables["PATH"] + ":/usr/local/bin";
proc.StartInfo.EnvironmentVariables["PATH"] = newPath;
#endif
proc.StartInfo.FileName = "python";
proc.StartInfo.Arguments = "build.py";
proc.StartInfo.WorkingDirectory = "../..";
proc.Start();
proc.WaitForExit();
return proc.ExitCode == 0;
}
if (!FileExists(dstDll32) || !FileExists(dstDll64)) public static void EnsureDLL()
{ {
string srcDll32 = "../../builds/install/win64-dynamic/bin/discord-rpc.dll"; #if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN
string srcDll64 = "../../builds/install/win64-dynamic/bin/discord-rpc.dll"; string[] dstDirs = { "Assets/Plugins", "Assets/Plugins/x86", "Assets/Plugins/x86_64" };
string[] dstDlls = { "Assets/Plugins/x86/discord-rpc.dll", "Assets/Plugins/x86_64/discord-rpc.dll" };
string[] srcDlls = { "../../builds/install/win64-dynamic/bin/discord-rpc.dll", "../../builds/install/win64-dynamic/bin/discord-rpc.dll" };
#elif UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
string[] dstDirs = { "Assets/Plugins" };
string[] dstDlls = { "Assets/Plugins/discord-rpc.bundle" };
string[] srcDlls = { "../../builds/install/osx-dynamic/lib/libdiscord-rpc.dylib" };
#else
string[] dstDirs = { "Assets/Plugins", "Assets/Plugins/x86", "Assets/Plugins/x86_64" };
string[] dstDlls = { "Assets/Plugins/x86/discord-rpc.so", "Assets/Plugins/x86_64/discord-rpc.so" };
string[] srcDlls = { "../../builds/install/linux-dynamic/bin/discord-rpc.dll", "../../builds/install/win64-dynamic/bin/discord-rpc.dll" };
#endif
if (!FileExists(srcDll32) || !FileExists(srcDll64)) Debug.Assert(dstDlls.Length == srcDlls.Length);
{
UnityEngine.Debug.Log("Try to run build script");
Process proc = new Process();
proc.StartInfo.FileName = "python";
proc.StartInfo.Arguments = "build.py";
proc.StartInfo.WorkingDirectory = "../..";
proc.Start();
proc.WaitForExit();
if (proc.ExitCode != 0)
{
UnityEngine.Debug.LogError("Build failed");
return;
}
}
// make sure the dirs exist bool exists = true;
Directory.CreateDirectory("Assets/Plugins"); foreach (string fname in dstDlls)
Directory.CreateDirectory("Assets/Plugins/x86"); {
Directory.CreateDirectory("Assets/Plugins/x86_64"); if (!FileExists(fname))
{
exists = false;
break;
}
}
// Copy dlls if (exists)
FileUtil.CopyFileOrDirectory("../../builds/install/win64-dynamic/bin/discord-rpc.dll", dstDll64); {
FileUtil.CopyFileOrDirectory("../../builds/install/win32-dynamic/bin/discord-rpc.dll", dstDll32); return;
} }
}
exists = true;
foreach (string fname in srcDlls)
{
if (!FileExists(fname))
{
exists = false;
break;
}
}
if (!exists)
{
if (!RunRpcBuildScript())
{
UnityEngine.Debug.LogError("Build failed");
return;
}
}
// make sure the dirs exist
foreach (string dirname in dstDirs)
{
Directory.CreateDirectory(dirname);
}
// Copy dlls
for (int i = 0; i < dstDlls.Length; ++i)
{
FileUtil.CopyFileOrDirectory(srcDlls[i], dstDlls[i]);
}
}
} }