예제 #1
0
        public static void GetCMakeVersion(Action <string> callback, bool refresh = false)
        {
            if (!refresh)
            {
                string version = EditorPrefs.GetString("cmakeVersion");
                if (!string.IsNullOrEmpty(version))
                {
                    cmakeVersion = version;
                    callback(version);
                    return;
                }
            }

            ProcessStartInfo  startInfo         = new ProcessStartInfo(CMakeLocation, "--version");
            BackgroundProcess backgroundProcess = new BackgroundProcess(startInfo);

            backgroundProcess.Name    = "Getting CMake version \"cmake --version\"";
            backgroundProcess.Exited += (exitCode, outputData, errorData) => {
                if (exitCode == 0)
                {
                    outputData = outputData.ToLower();
                    if (outputData.Contains("version"))
                    {
                        outputData = outputData.Substring(outputData.IndexOf("version") + "version".Length).Trim().Split(' ')[0];
                    }
                    EditorPrefs.SetString("cmakeVersion", outputData);
                    cmakeVersion = outputData;
                    callback(outputData);
                }
                else
                {
                    errorData = "Not able to get CMake version. Are you sure CMake is installed?\n" + errorData;
                    throw new Exception(errorData);
                }
            };

            backgroundProcess.Start();
        }
예제 #2
0
        public void Build()
        {
            bool nothingToBuild = true;

            foreach (NativeBuildOptions options in buildOptions)
            {
                if (!options.isEnabled)
                {
                    continue;
                }

                nothingToBuild = false;
                PluginBuilderBase builder = PluginBuilderBase.GetBuilderForTarget(options.BuildPlatform);

                builder.PreBuild(this, options);

                BackgroundProcess buildProcess = builder.Build(this, options);

                buildProcess.Exited += (exitCode, outputData, errorData) => {
                    if (!string.IsNullOrEmpty(outputData))
                    {
                        string log = string.Format("{0}:\n{1}", buildProcess.Name, outputData);
                        File.WriteAllText(PluginBuilderBase.CombineFullPath(options.OutputDirectory, "Build_StdOut.log"), log);
                        Debug.Log(log);
                    }

                    if (!string.IsNullOrEmpty(errorData))
                    {
                        string log = string.Format("{0}:\n{1}", buildProcess.Name, errorData);
                        File.WriteAllText(PluginBuilderBase.CombineFullPath(options.OutputDirectory, "Build_StdErr.log"), log);
                        if (exitCode == 0)
                        {
                            Debug.LogWarning(log);
                        }
                        else
                        {
                            Debug.LogError(log);
                        }
                    }
                };

                BackgroundProcess installProcess = builder.Install(this, options);

                installProcess.StartAfter(buildProcess);

                installProcess.Exited += (exitCode, outputData, errorData) => {
                    if (!string.IsNullOrEmpty(outputData))
                    {
                        string log = string.Format("{0}:\n{1}", installProcess.Name, outputData);
                        File.WriteAllText(PluginBuilderBase.CombineFullPath(options.OutputDirectory, "Install_StdOut.log"), log);
                        Debug.Log(log);
                    }

                    if (!string.IsNullOrEmpty(errorData))
                    {
                        string log = string.Format("{0}:\n{1}", installProcess.Name, errorData);
                        File.WriteAllText(PluginBuilderBase.CombineFullPath(options.OutputDirectory, "Install_StdErr.log"), log);
                        if (exitCode == 0)
                        {
                            Debug.LogWarning(log);
                        }
                        else
                        {
                            Debug.LogError(log);
                        }
                    }

                    if (exitCode == 0)
                    {
                        builder.PostBuild(this, options);
                    }
                };

                buildProcess.Start();
            }

            if (nothingToBuild)
            {
                Debug.Log(string.Format("{0}: Nothing to build.", Name));
            }
        }