mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-09-10 12:03:16 +02:00
Fix to the custom build steps mechanism
This commit is contained in:
parent
c19ba7a148
commit
198887fab2
5 changed files with 65 additions and 42 deletions
|
@ -29,7 +29,8 @@
|
|||
point="org.eclipse.core.resources.builders">
|
||||
<builder
|
||||
hasNature="true"
|
||||
callOnEmptyDelta="true">
|
||||
callOnEmptyDelta="true"
|
||||
isConfigurable="true">
|
||||
<!--run
|
||||
class="org.eclipse.cdt.managedbuilder.internal.core.GeneratedMakefileBuilder">
|
||||
</run-->
|
||||
|
|
|
@ -84,6 +84,10 @@ public interface IBuilder extends IBuildObject, IMakeBuilderInfo {
|
|||
|
||||
static final String OUTPUT_ENTRIES = "outputEntries"; //$NON-NLS-1$
|
||||
|
||||
static final String DEFAULT_TARGET_INCREMENTAL = "all";
|
||||
static final String DEFAULT_TARGET_CLEAN = "clean";
|
||||
static final String DEFAULT_TARGET_AUTO = "all";
|
||||
|
||||
/**
|
||||
* Returns the command line arguments to pass to the build/make utility used
|
||||
* to build a configuration.
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
package org.eclipse.cdt.managedbuilder.internal.core;
|
||||
|
||||
import org.eclipse.cdt.core.settings.model.ICStorageElement;
|
||||
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
|
||||
import org.eclipse.cdt.managedbuilder.core.IAdditionalInput;
|
||||
import org.eclipse.cdt.managedbuilder.core.IInputType;
|
||||
import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
|
||||
|
@ -216,7 +217,7 @@ public class AdditionalInput implements IAdditionalInput {
|
|||
if (paths == null) {
|
||||
return null;
|
||||
}
|
||||
String[] nameTokens = paths.split(";"); //$NON-NLS-1$
|
||||
String[] nameTokens = CDataUtil.stringToArray(paths, ";"); //$NON-NLS-1$
|
||||
return nameTokens;
|
||||
}
|
||||
|
||||
|
|
|
@ -387,29 +387,14 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider
|
|||
setCommand(builder.getCommand());
|
||||
if(!getArgumentsAttribute().equals(builder.getArgumentsAttribute()))
|
||||
setArgumentsAttribute(builder.getArgumentsAttribute());
|
||||
if(!getAutoBuildTarget().equals(builder.getAutoBuildTarget())){
|
||||
try {
|
||||
setAutoBuildTarget(builder.getAutoBuildTarget());
|
||||
} catch (CoreException e) {
|
||||
}
|
||||
if(!CDataUtil.objectsEqual(getAutoBuildTargetAttribute(), builder.getAutoBuildTargetAttribute())){
|
||||
autoBuildTarget = builder.getAutoBuildTargetAttribute();
|
||||
}
|
||||
if(!getIncrementalBuildTarget().equals(builder.getIncrementalBuildTarget())){
|
||||
try {
|
||||
setIncrementalBuildTarget(builder.getIncrementalBuildTarget());
|
||||
} catch (CoreException e) {
|
||||
}
|
||||
if(!CDataUtil.objectsEqual(getIncrementalBuildTargetAttribute(), builder.getIncrementalBuildTargetAttribute())){
|
||||
incrementalBuildTarget = builder.getIncrementalBuildTargetAttribute();
|
||||
}
|
||||
if(!getFullBuildTarget().equals(builder.getFullBuildTarget())){
|
||||
try {
|
||||
setFullBuildTarget(builder.getFullBuildTarget());
|
||||
} catch (CoreException e) {
|
||||
}
|
||||
}
|
||||
if(!getCleanBuildTarget().equals(builder.getCleanBuildTarget())){
|
||||
try {
|
||||
setCleanBuildTarget(builder.getCleanBuildTarget());
|
||||
} catch (CoreException e) {
|
||||
}
|
||||
if(!CDataUtil.objectsEqual(getCleanBuildTargetAttribute(), builder.getCleanBuildTargetAttribute())){
|
||||
cleanBuildTarget = builder.getCleanBuildTargetAttribute();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1746,11 +1731,16 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider
|
|||
public String getAutoBuildTarget() {
|
||||
String attr = getAutoBuildTargetAttribute();
|
||||
|
||||
IBuildMacroProvider provider = ManagedBuildManager.getBuildMacroProvider();
|
||||
|
||||
try {
|
||||
attr = provider.resolveValue(attr, "", " ", IBuildMacroProvider.CONTEXT_CONFIGURATION, getMacroContextData()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
} catch (BuildMacroException e) {
|
||||
if(attr != null){
|
||||
IBuildMacroProvider provider = ManagedBuildManager.getBuildMacroProvider();
|
||||
|
||||
try {
|
||||
attr = provider.resolveValue(attr, "", " ", IBuildMacroProvider.CONTEXT_CONFIGURATION, getMacroContextData()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
} catch (BuildMacroException e) {
|
||||
}
|
||||
}
|
||||
if(attr == null){
|
||||
attr = DEFAULT_TARGET_AUTO;
|
||||
}
|
||||
|
||||
return attr;
|
||||
|
@ -1769,11 +1759,16 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider
|
|||
public String getCleanBuildTarget() {
|
||||
String attr = getCleanBuildTargetAttribute();
|
||||
|
||||
IBuildMacroProvider provider = ManagedBuildManager.getBuildMacroProvider();
|
||||
|
||||
try {
|
||||
attr = provider.resolveValue(attr, "", " ", IBuildMacroProvider.CONTEXT_CONFIGURATION, getMacroContextData()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
} catch (BuildMacroException e) {
|
||||
if(attr != null){
|
||||
IBuildMacroProvider provider = ManagedBuildManager.getBuildMacroProvider();
|
||||
|
||||
try {
|
||||
attr = provider.resolveValue(attr, "", " ", IBuildMacroProvider.CONTEXT_CONFIGURATION, getMacroContextData()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
} catch (BuildMacroException e) {
|
||||
}
|
||||
}
|
||||
if(attr == null){
|
||||
attr = DEFAULT_TARGET_CLEAN;
|
||||
}
|
||||
|
||||
return attr;
|
||||
|
@ -1796,11 +1791,16 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider
|
|||
public String getIncrementalBuildTarget() {
|
||||
String attr = getIncrementalBuildTargetAttribute();
|
||||
|
||||
IBuildMacroProvider provider = ManagedBuildManager.getBuildMacroProvider();
|
||||
|
||||
try {
|
||||
attr = provider.resolveValue(attr, "", " ", IBuildMacroProvider.CONTEXT_CONFIGURATION, getMacroContextData()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
} catch (BuildMacroException e) {
|
||||
if(attr != null){
|
||||
IBuildMacroProvider provider = ManagedBuildManager.getBuildMacroProvider();
|
||||
|
||||
try {
|
||||
attr = provider.resolveValue(attr, "", " ", IBuildMacroProvider.CONTEXT_CONFIGURATION, getMacroContextData()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
} catch (BuildMacroException e) {
|
||||
}
|
||||
}
|
||||
if(attr == null){
|
||||
attr = DEFAULT_TARGET_INCREMENTAL;
|
||||
}
|
||||
|
||||
return attr;
|
||||
|
|
|
@ -1065,6 +1065,8 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator2 {
|
|||
HashSet handledInputExtensions = new HashSet();
|
||||
String buildMacro;
|
||||
for (int i=0; i<buildTools.length; i++) {
|
||||
if(buildTools[i].getCustomBuildStep())
|
||||
continue;
|
||||
// Add the known sources macros
|
||||
String[] extensionsList = buildTools[i].getAllInputExtensions();
|
||||
for (int j=0; j<extensionsList.length; j++) {
|
||||
|
@ -2039,7 +2041,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator2 {
|
|||
ITool[] tools = fi.getToolsToInvoke();
|
||||
if (tools != null && tools.length > 0) {
|
||||
tool = tools[0];
|
||||
if(!tool.getCustomBuildStep())
|
||||
// if(!tool.getCustomBuildStep())
|
||||
addToBuildVar(buildVarToRuleStringMap, ext, varName, relativePath, sourceLocation, generatedSource);
|
||||
}
|
||||
}
|
||||
|
@ -2098,9 +2100,11 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator2 {
|
|||
if (generatedOutputs.size() > 0) {
|
||||
IPath firstOutput = (IPath)generatedOutputs.get(0);
|
||||
String firstExt = firstOutput.getFileExtension();
|
||||
for (int j=0; j<buildTools.length; j++) {
|
||||
if (buildTools[j].buildsFileType(firstExt)) {
|
||||
String bV = buildTools[j].getPrimaryInputType().getBuildVariable();
|
||||
ToolInfoHolder tmpH = getFolderToolInfo(rcInfo.getPath());
|
||||
ITool[] tmpBuildTools = tmpH.buildTools;
|
||||
for (int j=0; j<tmpBuildTools.length; j++) {
|
||||
if (tmpBuildTools[j].buildsFileType(firstExt)) {
|
||||
String bV = tmpBuildTools[j].getPrimaryInputType().getBuildVariable();
|
||||
if (bV.length() > 0) {
|
||||
buildVariable = bV;
|
||||
break;
|
||||
|
@ -3941,6 +3945,10 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator2 {
|
|||
// }
|
||||
|
||||
// Initialize the tool info array and the done state
|
||||
|
||||
if(buildTools.length != 0 && buildTools[0].getCustomBuildStep())
|
||||
return true;
|
||||
|
||||
for (int i=0; i<buildTools.length; i++) {
|
||||
if ((buildTools[i] == targetTool)) {
|
||||
String ext = config.getArtifactExtension();
|
||||
|
@ -4707,6 +4715,15 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator2 {
|
|||
return getToolInfo(path, false);
|
||||
}
|
||||
|
||||
private ToolInfoHolder getFolderToolInfo(IPath path){
|
||||
IResourceInfo rcInfo = config.getResourceInfo(path, false);
|
||||
while(rcInfo instanceof IFileInfo){
|
||||
path = path.removeLastSegments(1);
|
||||
rcInfo = config.getResourceInfo(path, false);
|
||||
}
|
||||
return getToolInfo(path, false);
|
||||
}
|
||||
|
||||
private ToolInfoHolder getToolInfo(IPath path, boolean create){
|
||||
PathSettingsContainer child = toolInfos.getChildContainer(path, create, create);
|
||||
ToolInfoHolder h = null;
|
||||
|
|
Loading…
Add table
Reference in a new issue