Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }