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 e891c15f955..93cbcaf60c0 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 @@ -11,7 +11,6 @@ package org.eclipse.cdt.managedbuilder.internal.buildmodel; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -27,6 +26,7 @@ import org.eclipse.cdt.managedbuilder.buildmodel.IBuildResource; import org.eclipse.cdt.managedbuilder.buildmodel.IBuildStep; import org.eclipse.cdt.managedbuilder.core.BuildException; import org.eclipse.cdt.managedbuilder.core.IBuildObject; +import org.eclipse.cdt.managedbuilder.core.IBuilder; import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IInputType; import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineGenerator; @@ -422,7 +422,9 @@ public class BuildStep implements IBuildStep { String result = str; try { if(resolveAll){ - SupplierBasedCdtVariableSubstitutor sub = createSubstitutor(fileData); + IConfiguration cfg = getBuildDescription().getConfiguration(); + IBuilder builder = cfg.getBuilder(); + SupplierBasedCdtVariableSubstitutor sub = createSubstitutor(cfg, builder, fileData); result = CdtVariableResolver.resolveToString(str, sub); } else { result = ManagedBuildManager.getBuildMacroProvider().resolveValueToMakefileFormat(str, "", " ", IBuildMacroProvider.CONTEXT_FILE, fileData); //$NON-NLS-1$ //$NON-NLS-2$ @@ -433,11 +435,13 @@ public class BuildStep implements IBuildStep { return result; } - private SupplierBasedCdtVariableSubstitutor createSubstitutor(IFileContextData fileData){ + private SupplierBasedCdtVariableSubstitutor createSubstitutor(IConfiguration cfg, IBuilder builder, IFileContextData fileData){ BuildMacroProvider prov = (BuildMacroProvider)ManagedBuildManager.getBuildMacroProvider(); IMacroContextInfo info = prov.getMacroContextInfo(IBuildMacroProvider.CONTEXT_FILE, fileData); FileMacroExplicitSubstitutor sub = new FileMacroExplicitSubstitutor( info, + cfg, + builder, "", " "); //$NON-NLS-1$ //$NON-NLS-2$ return sub; @@ -445,12 +449,15 @@ public class BuildStep implements IBuildStep { private String[] getCommandFlags(IPath inRcPath, IPath outRcPath, boolean resolveAll){ try { - return resolveAll ? - ((Tool)fTool).getToolCommandFlags(inRcPath, outRcPath, - createSubstitutor(new FileContextData(inRcPath, outRcPath, null, fTool)), - BuildMacroProvider.getDefault()) - : - fTool.getToolCommandFlags(inRcPath, outRcPath); + if(resolveAll) { + IConfiguration cfg = getBuildDescription().getConfiguration(); + IBuilder builder = cfg.getBuilder(); + return ((Tool)fTool).getToolCommandFlags(inRcPath, outRcPath, + createSubstitutor(cfg, builder, + new FileContextData(inRcPath, outRcPath, null, fTool)), + BuildMacroProvider.getDefault()); + } + return fTool.getToolCommandFlags(inRcPath, outRcPath); } catch (BuildException e) { } return new String[0]; diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/FileMacroExplicitSubstitutor.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/FileMacroExplicitSubstitutor.java index dd2a2e29720..9e856ccfe56 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/FileMacroExplicitSubstitutor.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/buildmodel/FileMacroExplicitSubstitutor.java @@ -13,18 +13,26 @@ package org.eclipse.cdt.managedbuilder.internal.buildmodel; import org.eclipse.cdt.core.cdtvariables.CdtVariableException; import org.eclipse.cdt.core.cdtvariables.ICdtVariable; +import org.eclipse.cdt.managedbuilder.core.IBuilder; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.internal.macros.IMacroContextInfo; import org.eclipse.cdt.managedbuilder.internal.macros.MbsMacroSupplier; import org.eclipse.cdt.utils.cdtvariables.SupplierBasedCdtVariableSubstitutor; public class FileMacroExplicitSubstitutor extends SupplierBasedCdtVariableSubstitutor { - + private IConfiguration fCfg; + private IBuilder fBuilder; // public FileMacroExplicitSubstitutor(int contextType, Object contextData, String inexistentMacroValue, String listDelimiter){ // super(contextType, contextData, inexistentMacroValue, listDelimiter); // } - public FileMacroExplicitSubstitutor(IMacroContextInfo contextInfo, String inexistentMacroValue, String listDelimiter){ + public FileMacroExplicitSubstitutor(IMacroContextInfo contextInfo, + IConfiguration cfg, + IBuilder builder, + String inexistentMacroValue, String listDelimiter){ super(contextInfo, inexistentMacroValue, listDelimiter); + fCfg = cfg; + fBuilder = builder; } /* (non-Javadoc) @@ -33,7 +41,7 @@ public class FileMacroExplicitSubstitutor extends SupplierBasedCdtVariableSubsti protected ResolvedMacro resolveMacro(ICdtVariable macro) throws CdtVariableException{ if(macro instanceof MbsMacroSupplier.FileContextMacro){ MbsMacroSupplier.FileContextMacro fileMacro = (MbsMacroSupplier.FileContextMacro)macro; - String val = fileMacro.getExplicitMacroValue(); + String val = fileMacro.getExplicitMacroValue(fCfg, fBuilder); return new ResolvedMacro(macro.getName(), val); } return super.resolveMacro(macro); diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/MbsMacroSupplier.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/MbsMacroSupplier.java index 02b0191a5cc..77e7e111dc0 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/MbsMacroSupplier.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/MbsMacroSupplier.java @@ -22,6 +22,7 @@ import org.eclipse.cdt.managedbuilder.core.IManagedProject; import org.eclipse.cdt.managedbuilder.core.IOption; import org.eclipse.cdt.managedbuilder.core.IOutputType; import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration; +import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; @@ -125,25 +126,32 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase { } public class FileContextMacro extends BuildMacro{ - private IFileContextData fContextData; - private IConfiguration fConfiguration; +// private IFileContextData fContextData; +// private IConfiguration fConfiguration; //TODO: initialize builder - private IBuilder fBuilder; +// private IBuilder fBuilder; private boolean fIsExplicit = true; private boolean fIsInitialized; private String fExplicitValue; private boolean fIsExplicitResolved; + private IPath fInputFileLocation; + private IPath fOutputFileLocation; + private FileContextMacro(String name, IFileContextData contextData){ fName = name; fType = VALUE_TEXT; - fContextData = contextData; + + loadValue(contextData); + +// fContextData = contextData; } - private void loadValue(){ + private void loadValue(IFileContextData contextData){ if(fIsInitialized) return; IBuilder builder = null; - IOptionContextData optionContext = fContextData.getOptionContextData(); + IConfiguration configuration = null; + IOptionContextData optionContext = contextData.getOptionContextData(); if(optionContext != null){ IBuildObject buildObject = optionContext.getParent(); if(buildObject instanceof ITool){ @@ -154,11 +162,11 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase { if(buildObject instanceof IToolChain){ IToolChain toolChain = (IToolChain)buildObject; builder = toolChain.getBuilder(); - fConfiguration = toolChain.getParent(); - } else if (buildObject instanceof IResourceConfiguration){ - fConfiguration = ((IResourceConfiguration)buildObject).getParent(); - if(fConfiguration != null){ - IToolChain toolChain = fConfiguration.getToolChain(); + configuration = toolChain.getParent(); + } else if (buildObject instanceof IResourceInfo){ + configuration = ((IResourceInfo)buildObject).getParent(); + if(configuration != null){ + IToolChain toolChain = configuration.getToolChain(); if(toolChain != null) builder = toolChain.getBuilder(); } @@ -176,25 +184,27 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase { if(fStringValue == null){ fIsExplicit = true; - fStringValue = getExplicitFileMacroValue(fName, fContextData.getInputFileLocation(), fContextData.getOutputFileLocation(), fBuilder, fConfiguration); + fStringValue = getExplicitFileMacroValue(fName, contextData.getInputFileLocation(), contextData.getOutputFileLocation(), builder, configuration); fExplicitValue = fStringValue; fIsExplicitResolved = true; } + fInputFileLocation = contextData.getInputFileLocation(); + fOutputFileLocation = contextData.getOutputFileLocation(); fIsInitialized = true; } - public String getExplicitMacroValue(){ - loadValue(); + public String getExplicitMacroValue(IConfiguration configuration, IBuilder builder){ +// loadValue(); if(!fIsExplicitResolved){ - fExplicitValue = getExplicitFileMacroValue(fName, fContextData.getInputFileLocation(), fContextData.getOutputFileLocation(), fBuilder, fConfiguration); + fExplicitValue = getExplicitFileMacroValue(fName, fInputFileLocation, fOutputFileLocation, builder, configuration); fIsExplicitResolved = true; } return fExplicitValue; } public boolean isExplicit(){ - loadValue(); +// loadValue(); return fIsExplicit; } @@ -202,7 +212,7 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase { * @see org.eclipse.cdt.managedbuilder.macros.IBuildMacro#getStringValue() */ public String getStringValue(){ - loadValue(); +// loadValue(); return fStringValue; } } @@ -861,22 +871,22 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase { } public class OptionMacro extends BuildMacro{ - private IOptionContextData fOptionContextData; - private IOptionContextData fParentOptionContextData; +// private IOptionContextData fOptionContextData; +// private IOptionContextData fParentOptionContextData; // private IOption fParentOption; private OptionMacro(String name, IOptionContextData optionContextData){ fName = name; - fOptionContextData = optionContextData; - fParentOptionContextData = getParent(fOptionContextData); - load(); +// fOptionContextData = optionContextData; + IOptionContextData parentOptionContextData = getParent(optionContextData); + load(optionContextData, parentOptionContextData); } - private boolean load(){ + private boolean load(IOptionContextData optionContextData, IOptionContextData parentOptionContextData){ fStringValue = null; fStringListValue = null; fType = 0; - if(fParentOptionContextData != null){ - IOption option = fParentOptionContextData.getOption(); + if(parentOptionContextData != null){ + IOption option = parentOptionContextData.getOption(); try{ switch (option.getValueType()) { case IOption.BOOLEAN: @@ -949,9 +959,9 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase { break; } if(fStringValue != null) - fStringValue = CdtVariableResolver.resolveToString(fStringValue,new IncludeDefaultsSubstitutor(fParentOptionContextData)); + fStringValue = CdtVariableResolver.resolveToString(fStringValue,new IncludeDefaultsSubstitutor(parentOptionContextData)); else if(fStringListValue != null) - fStringListValue = CdtVariableResolver.resolveStringListValues(fStringListValue,new IncludeDefaultsSubstitutor(fParentOptionContextData), true); + fStringListValue = CdtVariableResolver.resolveStringListValues(fStringListValue,new IncludeDefaultsSubstitutor(parentOptionContextData), true); }catch(Exception e){ fType = 0; } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/DefaultGCCDependencyCalculatorPreBuildCommands.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/DefaultGCCDependencyCalculatorPreBuildCommands.java index 3e36a81e1d9..747291ae491 100755 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/DefaultGCCDependencyCalculatorPreBuildCommands.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/DefaultGCCDependencyCalculatorPreBuildCommands.java @@ -19,6 +19,7 @@ import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineGenerator; import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineInfo; import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration; +import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.internal.macros.BuildMacroProvider; @@ -83,9 +84,9 @@ public class DefaultGCCDependencyCalculatorPreBuildCommands implements IManagedD if (buildContext instanceof IConfiguration) { IConfiguration config = (IConfiguration)buildContext; project = (IProject)config.getOwner(); - } else if (buildContext instanceof IResourceConfiguration) { - IResourceConfiguration resConfig = (IResourceConfiguration)buildContext; - project = (IProject)resConfig.getOwner(); + } else if (buildContext instanceof IResourceInfo) { + IResourceInfo resInfo = (IResourceInfo)buildContext; + project = (IProject)resInfo.getParent().getOwner(); } sourceLocation = (source.isAbsolute() ? source : project.getLocation().append(source));