From ac83768385eb4641e4e2b295ebc9c1d472a7a35b Mon Sep 17 00:00:00 2001 From: Mikhail Sennikovsky Date: Fri, 10 Aug 2007 11:04:48 +0000 Subject: [PATCH] Fix for [Bug 197973] Internal builder does not use outputPrefix --- .../internal/buildmodel/BuildDescription.java | 11 +++++++ .../internal/buildmodel/BuildResource.java | 12 ++++++++ .../internal/buildmodel/BuildStep.java | 29 +++++++++++++++---- 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildDescription.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildDescription.java index d5b955a49f1..826a842829f 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildDescription.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildDescription.java @@ -1083,6 +1083,17 @@ public class BuildDescription implements IBuildDescription { } catch (BuildMacroException e) { } + String artifactPrefix = tool.getOutputPrefix(); + if(artifactPrefix != null && artifactPrefix.length() != 0){ + try { + String tmp = ManagedBuildManager.getBuildMacroProvider().resolveValue(artifactPrefix, "", " ", IBuildMacroProvider.CONTEXT_CONFIGURATION, fCfg); //$NON-NLS-1$ //$NON-NLS-2$ + if((tmp = tmp.trim()).length() > 0) + artifactPrefix = tmp; + } catch (BuildMacroException e){ + } + artifactName = artifactPrefix + artifactName; + } + IPath path = new Path(artifactName); if(artifactExt != null && artifactExt.length() != 0) path = path.addFileExtension(artifactExt); diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildResource.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildResource.java index 82631f3861f..7e6cf8bd635 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildResource.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildResource.java @@ -196,4 +196,16 @@ public class BuildResource implements IBuildResource { return null; } + public String toString() { + StringBuffer buf = new StringBuffer(); + buf.append("BR "); + IPath fullPath = getFullPath(); + if(fullPath != null) + buf.append("WSP|").append(fullPath); + else + buf.append("FS|").append(getLocation()); + + return buf.toString(); + } + } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildStep.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildStep.java index a00fcd1018e..388679f6992 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildStep.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/BuildStep.java @@ -288,21 +288,35 @@ public class BuildStep implements IBuildStep { IManagedCommandLineGenerator gen = fTool.getCommandLineGenerator(); FileContextData data = new FileContextData(inRcPath, outRcPath, null, fTool); - + String outPrefix = fTool.getOutputPrefix(); + outPrefix = resolveMacros(outPrefix, data, true); + outRcPath = rmNamePrefix(outRcPath, outPrefix); + IManagedCommandLineInfo info = gen.generateCommandLineInfo(fTool, fTool.getToolCommand(), getCommandFlags(inRcPath, outRcPath, resolveAll), fTool.getOutputFlag(), - fTool.getOutputPrefix(), - listToString(resourcesToStrings(cwd, getPrimaryResources(false)), " "), //$NON-NLS-1$ + outPrefix, + listToString(resourcesToStrings(cwd, getPrimaryResources(false), outPrefix), " "), //$NON-NLS-1$ getInputResources(cwd, getPrimaryResources(true)), fTool.getCommandLinePattern()); return createCommandsFromString(resolveMacros(info.getCommandLine(), data, true), cwd, getEnvironment()); } + private IPath rmNamePrefix(IPath path, String prefix){ + if(prefix != null && prefix.length() != 0){ + String name = path.lastSegment(); + if(name.startsWith(prefix)){ + name = name.substring(prefix.length()); + path = path.removeLastSegments(1).append(name); + } + } + return path; + } + private String[] getInputResources(IPath cwd, BuildResource[] rcs) { - String[] resources = resourcesToStrings(cwd, rcs); + String[] resources = resourcesToStrings(cwd, rcs, null); // also need to get libraries String[] libs = null; @@ -417,14 +431,17 @@ public class BuildStep implements IBuildStep { return (BuildResource[])list.toArray(new BuildResource[list.size()]); } - private String[] resourcesToStrings(IPath cwd, BuildResource rcs[]){ + private String[] resourcesToStrings(IPath cwd, BuildResource rcs[], String prefixToRm){ List list = new ArrayList(rcs.length); for(int i = 0; i < rcs.length; i++){ - list.add(BuildDescriptionManager.getRelPath(cwd, rcs[i].getLocation()).toOSString()); + IPath path = BuildDescriptionManager.getRelPath(cwd, rcs[i].getLocation()); + path = rmNamePrefix(path, prefixToRm); + list.add(path.toOSString()); } return (String[])list.toArray(new String[list.size()]); } + private String resolveMacros(String str, IFileContextData fileData, boolean resolveAll){ String result = str; try {