From 570df24c333747a505d2da92fb057c277ce7df2f Mon Sep 17 00:00:00 2001 From: Andrew Gvozdev Date: Thu, 30 Sep 2010 04:09:57 +0000 Subject: [PATCH] bug 308042: Spawner messages are too cryptic to be useful to a user --- .../core/ExternalBuildRunner.java | 9 +++-- .../internal/buildmodel/CommandBuilder.java | 38 +++++++++++++++++-- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java index db2cfc76dc9..780a5cc6944 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ExternalBuildRunner.java @@ -200,14 +200,15 @@ public class ExternalBuildRunner implements IBuildRunner { // Launching failed, trying to figure out possible cause String errorPrefix = ManagedMakeMessages.getResourceString("ManagedMakeBuilder.error.prefix"); //$NON-NLS-1$ String buildCommandStr = buildCommand.toString(); - if (PathUtil.findProgramLocation(buildCommandStr)==null) { + String envPath = envMap.get(PATH); + if (envPath==null) { + envPath = System.getenv(PATH); + } + if (PathUtil.findProgramLocation(buildCommandStr, envPath)==null) { buf.append(errMsg).append(NEWLINE); errMsg = ManagedMakeMessages.getFormattedString("ManagedMakeBuilder.message.program.not.in.path", buildCommandStr); //$NON-NLS-1$ buf.append(errorPrefix).append(errMsg).append(NEWLINE); buf.append(NEWLINE); - String envPath = envMap.get(PATH); - if (envPath==null) - envPath = System.getenv(PATH); buf.append(PATH+"=["+envPath+"]").append(NEWLINE); //$NON-NLS-1$//$NON-NLS-2$ } else { buf.append(errorPrefix).append(errMsg).append(NEWLINE); diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/CommandBuilder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/CommandBuilder.java index ff5c85801fd..179fda31624 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/CommandBuilder.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/CommandBuilder.java @@ -23,6 +23,7 @@ import org.eclipse.cdt.core.CommandLauncher; import org.eclipse.cdt.core.ICommandLauncher; import org.eclipse.cdt.managedbuilder.buildmodel.IBuildCommand; import org.eclipse.cdt.managedbuilder.internal.core.ManagedMakeMessages; +import org.eclipse.cdt.utils.PathUtil; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; @@ -210,7 +211,19 @@ public class CommandBuilder implements IBuildModelBuilder { if(DbgUtil.DEBUG) DbgUtil.trace("error launching the command: " + fErrMsg); //$NON-NLS-1$ - printMessage(fErrMsg, out); + String program = fCmd.getCommand().toOSString(); + String envPath = fCmd.getEnvironment().get(PATH_ENV); + if (envPath==null) { + envPath = System.getenv(PATH_ENV); + } + if (PathUtil.findProgramLocation(program, envPath)==null) { + printMessage(fErrMsg, out); + String errMsg = ManagedMakeMessages.getFormattedString("ManagedMakeBuilder.message.program.not.in.path", program); //$NON-NLS-1$ + printErrorMessage(errMsg + LINE_SEPARATOR, out); + printMessage(null, PATH_ENV+"=["+envPath+"]", out); //$NON-NLS-1$//$NON-NLS-2$ + } else { + printErrorMessage(fErrMsg, out); + } break; } @@ -242,9 +255,12 @@ public class CommandBuilder implements IBuildModelBuilder { return list.toArray(new String[list.size()]); } - protected void printMessage(String msg, OutputStream os){ + private void printMessage(String prefix, String msg, OutputStream os){ if (os != null) { - msg = ManagedMakeMessages.getFormattedString(BUILDER_MSG_HEADER, msg) + LINE_SEPARATOR; + if (prefix==null) { + prefix=""; //$NON-NLS-1$ + } + msg = prefix + msg + LINE_SEPARATOR; try { os.write(msg.getBytes()); os.flush(); @@ -255,6 +271,22 @@ public class CommandBuilder implements IBuildModelBuilder { } + protected void printMessage(String msg, OutputStream os){ + if (os != null) { + msg = ManagedMakeMessages.getFormattedString(BUILDER_MSG_HEADER, msg); + printMessage(null, msg, os); + } + + } + + private void printErrorMessage(String msg, OutputStream os){ + if (os != null) { + String errorPrefix = ManagedMakeMessages.getResourceString("ManagedMakeBuilder.error.prefix"); //$NON-NLS-1$ + printMessage(errorPrefix, msg, os); + } + + } + public int getNumCommands() { return 1; }