From 5d73a9f5fce23b030821f5fb2d71855099f14ec2 Mon Sep 17 00:00:00 2001 From: Mary-nyan Date: Thu, 17 Nov 2022 00:18:29 +0100 Subject: [PATCH] Fix Fedora support (#3815) For some reasons, my fresh installation of Fedora 36 (KDE) doesn't have a symlink for libX11.so. This commit fixes this by trying to import the library with its major version or fallback to the normal way. --- Ryujinx.Ava/Ryujinx.Ava.csproj | 2 +- Ryujinx/Program.cs | 30 +++++++++++++++++++++++++++++- Ryujinx/Ryujinx.csproj | 2 +- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/Ryujinx.Ava/Ryujinx.Ava.csproj b/Ryujinx.Ava/Ryujinx.Ava.csproj index 3b4d8cf02a..d36fa62983 100644 --- a/Ryujinx.Ava/Ryujinx.Ava.csproj +++ b/Ryujinx.Ava/Ryujinx.Ava.csproj @@ -36,7 +36,7 @@ - + diff --git a/Ryujinx/Program.cs b/Ryujinx/Program.cs index a91f9aa521..be790a48f5 100644 --- a/Ryujinx/Program.cs +++ b/Ryujinx/Program.cs @@ -29,7 +29,11 @@ namespace Ryujinx public static string ConfigurationPath { get; set; } - [DllImport("libX11")] + public static string CommandLineProfile { get; set; } + + private const string X11LibraryName = "libX11"; + + [DllImport(X11LibraryName)] private extern static int XInitThreads(); [DllImport("user32.dll", SetLastError = true)] @@ -37,6 +41,30 @@ namespace Ryujinx private const uint MB_ICONWARNING = 0x30; + static Program() + { + if (OperatingSystem.IsLinux()) + { + NativeLibrary.SetDllImportResolver(typeof(Program).Assembly, (name, assembly, path) => + { + if (name != X11LibraryName) + { + return IntPtr.Zero; + } + + if (!NativeLibrary.TryLoad("libX11.so.6", assembly, path, out IntPtr result)) + { + if (!NativeLibrary.TryLoad("libX11.so", assembly, path, out result)) + { + return IntPtr.Zero; + } + } + + return result; + }); + } + } + static void Main(string[] args) { Version = ReleaseInformations.GetVersion(); diff --git a/Ryujinx/Ryujinx.csproj b/Ryujinx/Ryujinx.csproj index 23f5d15595..58b1555cff 100644 --- a/Ryujinx/Ryujinx.csproj +++ b/Ryujinx/Ryujinx.csproj @@ -25,7 +25,7 @@ - +