public bool Handle() { var logger = LoggerManager.LoggerFactory.CreateLogger <VorbisLibHandler>(); #if WINDOWS var libPath = Path.Combine( Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath) !, Environment.Is64BitProcess ? "win-x64" : "win-x86"); #if NETSTANDARD2_0 // On Full Framework, AssemblyLoadContext isn't available, so we add the directory to PATH if (RuntimeInformation.FrameworkDescription.StartsWith(".NET Framework", StringComparison.Ordinal)) { Environment.SetEnvironmentVariable("PATH", $"{libPath}{Path.PathSeparator}{Environment.GetEnvironmentVariable("PATH")}"); } else { AddUnmanagedLibraryPath(libPath); } #else AddUnmanagedLibraryPath(libPath); #endif #elif OSX var osVersion = GetOSVersion(); AddUnmanagedLibraryPath(Path.Combine( Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath) !, osVersion.StartsWith("10.13", StringComparison.Ordinal) ? "osx.10.13-x64" : osVersion.StartsWith("10.14", StringComparison.Ordinal) ? "osx.10.14-x64" : osVersion.StartsWith("10.15", StringComparison.Ordinal) ? "osx.10.15-x64" : "osx.11")); #else // LINUX var release = GetRelease(); if (release.StartsWith("Ubuntu", StringComparison.OrdinalIgnoreCase)) { AddUnmanagedLibraryPath(Path.Combine( Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().Location).LocalPath) !, release.StartsWith("Ubuntu 16.04", StringComparison.OrdinalIgnoreCase) ? "ubuntu.16.04-x64" : release.StartsWith("Ubuntu 18.04", StringComparison.OrdinalIgnoreCase) ? "ubuntu.18.04-x64" : "ubuntu.20.04-x64")); } #endif try { foreach (var methodInfo in typeof(SafeNativeMethods).GetMethods( BindingFlags.NonPublic | BindingFlags.Static)) { Marshal.Prelink(methodInfo); } } catch (DllNotFoundException e) { logger.LogWarning(e.Message); return(false); } catch (EntryPointNotFoundException e) { logger.LogWarning(e.Message); return(false); } logger.LogInformation("Using Vorbis version {0}.", Marshal.PtrToStringAnsi(SafeNativeMethods.VorbisVersion())); return(true); }
public bool Handle() { var logger = LoggerManager.LoggerFactory.CreateLogger <VorbisLibHandler>(); #if WINDOWS var libPath = Path.Combine( // ReSharper disable once AssignNullToNotNullAttribute Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath), Environment.Is64BitProcess ? "win-x64" : "win-x86"); #if NETSTANDARD2_0 // On Full Framework, AssemblyLoadContext isn't available, so we add the directory to PATH if (RuntimeInformation.FrameworkDescription.StartsWith(".NET Framework", StringComparison.Ordinal)) { Environment.SetEnvironmentVariable("PATH", $"{libPath}{Path.PathSeparator}{Environment.GetEnvironmentVariable("PATH")}"); } else { AddUnmanagedLibraryPath(libPath); } #else AddUnmanagedLibraryPath(libPath); #endif #elif OSX var osVersion = GetOSVersion(); AddUnmanagedLibraryPath(Path.Combine( // ReSharper disable once AssignNullToNotNullAttribute Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath), osVersion.StartsWith("10.12", StringComparison.Ordinal) ? "osx.10.12-x64" : osVersion.StartsWith("10.13", StringComparison.Ordinal) ? "osx.10.13-x64" : "osx.10.14-x64")); #else // LINUX var release = GetRelease(); if (release.StartsWith("Ubuntu 16.04", StringComparison.OrdinalIgnoreCase)) { AddUnmanagedLibraryPath(Path.Combine( // ReSharper disable once AssignNullToNotNullAttribute Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath), release.StartsWith("Ubuntu 16.04", StringComparison.OrdinalIgnoreCase) ? "ubuntu.16.04-x64" : "ubuntu.18.04-x64")); } if (!VerifyLibrary("libogg.so.0")) { logger.LogWarning( release.StartsWith("Ubuntu", StringComparison.OrdinalIgnoreCase) ? "Missing libogg.so.0. Run 'sudo apt-get install -y libogg0 && sudo updatedb' then restart AudioWorks." : "Missing libogg.so.0."); return(false); } #endif logger.LogInformation("Using libvorbis version {0}.", Marshal.PtrToStringAnsi(SafeNativeMethods.VorbisVersion())); return(true); }