예제 #1
0
        protected override IEnumerable <string> GetAllAvailableAndroidNdks()
        {
            var preferedNdkPath = PreferedAndroidNdkPath;

            if (!string.IsNullOrEmpty(preferedNdkPath))
            {
                yield return(preferedNdkPath);
            }

            // Look in PATH
            foreach (var ndkStack in ProcessUtils.FindExecutablesInPath(NdkStack))
            {
                var ndkDir = Path.GetDirectoryName(ndkStack);
                if (ValidateAndroidNdkLocation(ndkDir))
                {
                    yield return(ndkDir);
                }
            }
        }
        static string GetExecutablePath(string?dir, string exe)
        {
            if (string.IsNullOrEmpty(dir))
            {
                return(exe);
            }

            foreach (var e in ProcessUtils.ExecutableFiles(exe))
            {
                try {
                    if (File.Exists(Path.Combine(dir, e)))
                    {
                        return(e);
                    }
                } catch (ArgumentException) {
                    continue;
                }
            }
            return(exe);
        }
예제 #3
0
        void FixOwnership(List <string>?paths)
        {
            if (!need_chown || paths == null || paths.Count == 0)
            {
                return;
            }

            var stdout = new StringWriter();
            var stderr = new StringWriter();
            var args   = new List <string> {
                QuoteString(sudo_user !)
            };

            foreach (string p in paths)
            {
                args.Add(QuoteString(p));
            }

            var psi = new ProcessStartInfo(OS.IsMac ? "/usr/sbin/chown" : "/bin/chown")
            {
                CreateNoWindow = true,
                Arguments      = String.Join(" ", args),
            };

            Logger(TraceLevel.Verbose, $"Changing filesystem object ownership: {psi.FileName} {psi.Arguments}");
            Task <int> chown_task = ProcessUtils.StartProcess(psi, stdout, stderr, System.Threading.CancellationToken.None);

            if (chown_task.Result != 0)
            {
                Logger(TraceLevel.Warning, $"Failed to change ownership of filesystem object(s)");
                Logger(TraceLevel.Verbose, $"standard output: {stdout}");
                Logger(TraceLevel.Verbose, $"standard error: {stderr}");
            }

            string QuoteString(string p)
            {
                return($"\"{p}\"");
            }
        }
    }
예제 #4
0
        static IEnumerable <string> GetLibexecJdkPaths(Action <TraceLevel, string> logger)
        {
            var java_home = Path.GetFullPath("/usr/libexec/java_home");

            if (!File.Exists(java_home))
            {
                yield break;
            }
            var jhp = new ProcessStartInfo {
                FileName  = java_home,
                Arguments = "-X",
            };
            var xml = new StringBuilder();

            ProcessUtils.Exec(jhp, (o, e) => {
                if (string.IsNullOrEmpty(e.Data))
                {
                    return;
                }
                xml.Append(e.Data);
            }, includeStderr: false);
            var plist = XElement.Parse(xml.ToString());

            foreach (var info in plist.Elements("array").Elements("dict"))
            {
                var JVMHomePath = (XNode)info.Elements("key").FirstOrDefault(e => e.Value == "JVMHomePath");
                if (JVMHomePath == null)
                {
                    continue;
                }
                while (JVMHomePath.NextNode.NodeType != XmlNodeType.Element)
                {
                    JVMHomePath = JVMHomePath.NextNode;
                }
                var strElement = (XElement)JVMHomePath.NextNode;
                var path       = strElement.Value;
                yield return(path);
            }
        }
예제 #5
0
        private static bool CheckRegistryKeyForExecutable(UIntPtr key, string subkey, string valueName, RegistryEx.Wow64 wow64, string subdir, string exe)
        {
            try {
                string key_name = string.Format(@"{0}\{1}\{2}", key == RegistryEx.CurrentUser ? "HKCU" : "HKLM", subkey, valueName);

                var path = NullIfEmpty(RegistryEx.GetValueString(key, subkey, valueName, wow64));

                if (path == null)
                {
                    return(false);
                }

                if (!ProcessUtils.FindExecutablesInDirectory(Path.Combine(path, subdir), exe).Any())
                {
                    return(false);
                }

                return(true);
            } catch (Exception) {
                return(false);
            }
        }
예제 #6
0
        protected virtual IEnumerable <string> GetAllAvailableAndroidNdks()
        {
            // Look in PATH
            foreach (var ndkStack in ProcessUtils.FindExecutablesInPath(NdkStack))
            {
                var ndkDir = Path.GetDirectoryName(ndkStack);
                if (ndkDir == null)
                {
                    continue;
                }
                yield return(ndkDir);
            }

            // Check for the "ndk-bundle" directory inside other SDK directories
            foreach (var sdk in GetAllAvailableAndroidSdks())
            {
                if (sdk == AndroidSdkPath)
                {
                    continue;
                }
                yield return(Path.Combine(sdk, "ndk-bundle"));
            }
        }
예제 #7
0
 Dictionary <string, List <string> > GetJavaProperties()
 {
     return(GetJavaProperties(ProcessUtils.FindExecutablesInDirectory(Path.Combine(HomePath, "bin"), "java").First()));
 }