Improve OS detection (fixes #14)

This commit is contained in:
cra0zy 2018-01-29 19:36:04 +01:00
parent eec217a5c5
commit 441ed4b897
3 changed files with 31 additions and 6 deletions

View file

@ -30,12 +30,37 @@ class FuncLoader
public static extern IntPtr dlsym(IntPtr handle, string symbol); public static extern IntPtr dlsym(IntPtr handle, string symbol);
} }
private static bool IsWindows, IsOSX; [DllImport("libc")]
private static extern int uname(IntPtr buf);
public static bool IsWindows, IsOSX;
static FuncLoader() static FuncLoader()
{ {
IsWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows); switch (Environment.OSVersion.Platform)
IsOSX = RuntimeInformation.IsOSPlatform(OSPlatform.OSX); {
case PlatformID.Win32NT:
case PlatformID.Win32S:
case PlatformID.Win32Windows:
case PlatformID.WinCE:
IsWindows = true;
break;
case PlatformID.MacOSX:
IsOSX = true;
break;
case PlatformID.Unix:
try
{
var buf = Marshal.AllocHGlobal(8192);
if (uname(buf) == 0 && Marshal.PtrToStringAnsi(buf) == "Darwin")
IsOSX = true;
Marshal.FreeHGlobal(buf);
}
catch { }
break;
}
} }
public static IntPtr LoadLibrary(string libname) public static IntPtr LoadLibrary(string libname)

View file

@ -47,9 +47,9 @@ class GLibrary
var i = _libdict.Find((e) => e.Library == library); var i = _libdict.Find((e) => e.Library == library);
var s = i.LinuxLib; var s = i.LinuxLib;
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) if (FuncLoader.IsWindows)
s = i.WindowsLib; s = i.WindowsLib;
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) else if (FuncLoader.IsOSX)
s = i.OSXLib; s = i.OSXLib;
_libraries[library] = ret = FuncLoader.LoadLibrary(s); _libraries[library] = ret = FuncLoader.LoadLibrary(s);

View file

@ -6,7 +6,7 @@
// VARS // VARS
Settings.Cake = Context; Settings.Cake = Context;
Settings.Version = "3.22.24.28"; Settings.Version = "3.22.24.29";
Settings.BuildTarget = Argument("BuildTarget", "Default"); Settings.BuildTarget = Argument("BuildTarget", "Default");
Settings.Assembly = Argument("Assembly", ""); Settings.Assembly = Argument("Assembly", "");