From: Timo Mueller <timo.muel...@bmw-carit.de>

The error reported by CMake was logged to the console but not used in
any error dialog shown to the user so far.

By capturing the error in a separate stream we can use it when reproting
the error to the user.

Signed-off-by: Timo Mueller <timo.muel...@bmw-carit.de>
---
 .../cmake/managedbuilder/util/SystemProcess.java   | 24 +++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git 
a/plugins/org.yocto.cmake.managedbuilder/src/org/yocto/cmake/managedbuilder/util/SystemProcess.java
 
b/plugins/org.yocto.cmake.managedbuilder/src/org/yocto/cmake/managedbuilder/util/SystemProcess.java
index 764a1f6..9fe0ce1 100644
--- 
a/plugins/org.yocto.cmake.managedbuilder/src/org/yocto/cmake/managedbuilder/util/SystemProcess.java
+++ 
b/plugins/org.yocto.cmake.managedbuilder/src/org/yocto/cmake/managedbuilder/util/SystemProcess.java
@@ -24,6 +24,7 @@ public class SystemProcess {
        private ProcessBuilder builder;
        private Process process;
        private StreamPipe outputRedirector;
+       private StreamPipe errorRedirector;
 
        public SystemProcess(LinkedList<String> command) {
                this(command, null);
@@ -47,7 +48,6 @@ public class SystemProcess {
                if (workingDirectory != null) {
                        builder.directory(workingDirectory);
                }
-               builder.redirectErrorStream(true);
 
                if(additionalEnvironmentVariables != null && 
!additionalEnvironmentVariables.isEmpty()) {
                        
builder.environment().putAll(additionalEnvironmentVariables);
@@ -56,11 +56,21 @@ public class SystemProcess {
 
        public void start(OutputStream out) throws IOException {
                if (builder != null) {
+                       builder.redirectErrorStream(true);
                        process = builder.start();
                        outputRedirector = redirectOutput(process, out);
                }
        }
 
+       public void start(OutputStream out, OutputStream err) throws 
IOException {
+               if (builder != null) {
+                       builder.redirectErrorStream(false);
+                       process = builder.start();
+                       outputRedirector = redirectOutput(process, out);
+                       errorRedirector = redirectError(process, err, out);
+               }
+       }
+
        public int waitForResultAndStop() throws InterruptedException {
                if (process == null) {
                        return -1;
@@ -69,6 +79,10 @@ public class SystemProcess {
                process.waitFor();
                outputRedirector.interrupt();
 
+               if (!builder.redirectErrorStream()) {
+                       errorRedirector.interrupt();
+               }
+
                return process.exitValue();
        }
 
@@ -76,6 +90,14 @@ public class SystemProcess {
                process.destroy();
        }
 
+       private StreamPipe redirectError(Process process, OutputStream errOut, 
OutputStream out) {
+               InputStream err = process.getErrorStream();
+               StreamPipe stderrPipe = new StreamPipe(err, errOut, out);
+               stderrPipe.start();
+
+               return stderrPipe;
+       }
+
        private StreamPipe redirectOutput(Process process, OutputStream out) {
                InputStream in = process.getInputStream();
                StreamPipe stdoutPipe = new StreamPipe(in, out);
-- 
1.9.0

-- 
_______________________________________________
yocto mailing list
yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/yocto

Reply via email to