diff options
3 files changed, 63 insertions, 31 deletions
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 f41a3f5c6fd..0582ae28aba 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 @@ -19,6 +19,7 @@ import java.util.Map; import org.eclipse.cdt.core.CommandLauncher; import org.eclipse.cdt.managedbuilder.buildmodel.IBuildCommand; +import org.eclipse.cdt.managedbuilder.internal.core.ManagedMakeMessages; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; @@ -36,6 +37,8 @@ public class CommandBuilder implements IBuildModelBuilder { private IBuildCommand fCmd; private Process fProcess; private String fErrMsg; + private static final String BUILDER_MSG_HEADER = "InternalBuilder.msg.header"; //$NON-NLS-1$ + private static final String LINE_SEPARATOR = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$ protected class OutputStreamWrapper extends OutputStream { private OutputStream fOut; @@ -92,31 +95,35 @@ public class CommandBuilder implements IBuildModelBuilder { fProcess.getOutputStream().close(); } catch (IOException e) { } - //wrapping out and err streams to avoid their closure - int st = launcher.waitAndRead(wrap(out), wrap(err), - new SubProgressMonitor(monitor, - IProgressMonitor.UNKNOWN)); - switch(st){ - case CommandLauncher.OK: - if(fProcess.exitValue() != 0) - status = STATUS_ERROR_BUILD; - break; - case CommandLauncher.COMMAND_CANCELED: - status = STATUS_CANCELLED; - break; - default: - status = STATUS_ERROR_LAUNCH; - fErrMsg = launcher.getErrorMessage(); - break; - } - } else { + } + + //wrapping out and err streams to avoid their closure + int st = launcher.waitAndRead(wrap(out), wrap(err), + new SubProgressMonitor(monitor, + IProgressMonitor.UNKNOWN)); + switch(st){ + case CommandLauncher.OK: + if(fProcess.exitValue() != 0) + status = STATUS_ERROR_BUILD; + break; + case CommandLauncher.COMMAND_CANCELED: + status = STATUS_CANCELLED; fErrMsg = launcher.getErrorMessage(); if(DbgUtil.DEBUG) - DbgUtil.trace("error launching the command: " + fErrMsg); //$NON-NLS-1$ - + DbgUtil.trace("command cancelled: " + fErrMsg); //$NON-NLS-1$ + + printMessage(fErrMsg, out); + break; + case CommandLauncher.ILLEGAL_COMMAND: + default: status = STATUS_ERROR_LAUNCH; + fErrMsg = launcher.getErrorMessage(); + if(DbgUtil.DEBUG) + DbgUtil.trace("error launching the command: " + fErrMsg); //$NON-NLS-1$ + + printMessage(fErrMsg, out); + break; } - return status; } @@ -137,4 +144,18 @@ public class CommandBuilder implements IBuildModelBuilder { return (String[])list.toArray(new String[list.size()]); } + + protected void printMessage(String msg, OutputStream os){ + if (os != null) { + msg = ManagedMakeMessages.getFormattedString(BUILDER_MSG_HEADER, msg) + LINE_SEPARATOR; + try { + os.write(msg.getBytes()); + os.flush(); + } catch (IOException e) { + // ignore; + } + } + + } + } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/GenDirInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/GenDirInfo.java index a4475267ef7..cc6f7768976 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/GenDirInfo.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/GenDirInfo.java @@ -47,18 +47,26 @@ public class GenDirInfo { if(path != null && fProjPath.isPrefixOf(path)){ path = path.removeLastSegments(1).removeFirstSegments(1); - if(path.segmentCount() > 0 && fDirPathSet.add(path)){ - IFolder folder = fProject.getFolder(path); - if(!folder.exists()){ - try { - folder.create(true, true, monitor); - folder.setDerived(true); - } catch (CoreException e) { - //TODO: log the error - } + createDir(path, monitor); + } + } + + protected void createDir(IPath path, IProgressMonitor monitor){ + if(path.segmentCount() > 0 && fDirPathSet.add(path)){ + IFolder folder = fProject.getFolder(path); + if(!folder.exists()){ + createDir(path.removeLastSegments(1), monitor); + try { + folder.create(true, true, monitor); + folder.setDerived(true); + } catch (CoreException e) { + if(DbgUtil.DEBUG) + DbgUtil.trace("GenDirInfo: failed to create dir: " + e.getLocalizedMessage()); //$NON-NLS-1$ + //TODO: log the error } } } + } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/PluginResources.properties b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/PluginResources.properties index 7ad3ff47398..5527f49ed2a 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/PluginResources.properties +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/PluginResources.properties @@ -115,4 +115,7 @@ BuildMacroStatus.value.undefined= ResourceChangeHandler.buildInfoSerializationJob=Build Info Serialization #ManagedBuilderCorePlugin messages -ManagedBuilderCorePlugin.resourceChangeHandlingInitializationJob=Initializing Resource Change Handling
\ No newline at end of file +ManagedBuilderCorePlugin.resourceChangeHandlingInitializationJob=Initializing Resource Change Handling + +#Internal Builder messages +InternalBuilder.msg.header=Internal Builder: {0}
\ No newline at end of file |