Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikhail Sennikovsky2005-11-25 17:26:03 +0000
committerMikhail Sennikovsky2005-11-25 17:26:03 +0000
commitd85b246991863e77bb86234f423dbb1eed88e72b (patch)
tree5ba13feed733d8d9699a423d8a0d99dc7e564cb5
parent41b99d2fe0a6b5d32a2b629a9d86a2f4dfd5d9c5 (diff)
downloadorg.eclipse.cdt-d85b246991863e77bb86234f423dbb1eed88e72b.tar.gz
org.eclipse.cdt-d85b246991863e77bb86234f423dbb1eed88e72b.tar.xz
org.eclipse.cdt-d85b246991863e77bb86234f423dbb1eed88e72b.zip
1.File context macro support implemented
2.New MBS pre-defined macros added that represent tool/tool-chain/builder version 3.Some fixes for the option specific macros functionslity
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedBuildMacrosTests.java20
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java10
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java8
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckStringExpression.java4
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/DefaultMacroContextInfo.java39
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/MbsMacroSupplier.java131
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/OptionContextData.java47
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IBuildMacroProvider.java1
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IOptionContextData.java7
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/DefaultGCCDependencyCalculator.java22
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java22
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/ManagedBuildGnuToolInfo.java6
12 files changed, 186 insertions, 131 deletions
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedBuildMacrosTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedBuildMacrosTests.java
index 144c6f66f55..18e55c80e4e 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedBuildMacrosTests.java
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedBuildMacrosTests.java
@@ -206,7 +206,7 @@ public class ManagedBuildMacrosTests extends TestCase {
assertNotNull(opt);
// standard check of suppliers # and attempt to add macro (should fail)
- ms = mp.getSuppliers(IBuildMacroProvider.CONTEXT_OPTION, new OptionContextData(opt,tc));
+ ms = mp.getSuppliers(IBuildMacroProvider.CONTEXT_OPTION, new OptionContextData(opt,t));
assertNotNull(ms);
assertEquals(ms.length, 1);
assertFalse(addMacro(TEST, IBuildMacro.VALUE_TEXT, TST[IBuildMacroProvider.CONTEXT_OPTION], IBuildMacroProvider.CONTEXT_OPTION, new OptionContextData(opt,t)));
@@ -214,7 +214,7 @@ public class ManagedBuildMacrosTests extends TestCase {
// modify value and check that macros is resolved
try {
opt = cfgs[0].setOption(t, opt, "222 " + INC_DEF); //$NON-NLS-1$
- String a = mp.resolveValue(opt.getStringValue(), UNKNOWN, LISTSEP, IBuildMacroProvider.CONTEXT_OPTION, new OptionContextData(opt,tc));
+ String a = mp.resolveValue(opt.getStringValue(), UNKNOWN, LISTSEP, IBuildMacroProvider.CONTEXT_OPTION, new OptionContextData(opt,t));
assertEquals(a, "222 111"); //$NON-NLS-1$
} catch (BuildMacroException e) { fail(e.getLocalizedMessage()); }
catch (BuildException e) { fail(e.getLocalizedMessage()); }
@@ -225,7 +225,7 @@ public class ManagedBuildMacrosTests extends TestCase {
IOption ropt = rc.getTools()[0].getOptionById(OPT_IDS);
try {
ropt = rc.setOption(rc.getTools()[0], ropt, "333 " + INC_DEF); //$NON-NLS-1$
- String a = mp.resolveValue(ropt.getStringValue(), UNKNOWN, LISTSEP, IBuildMacroProvider.CONTEXT_OPTION, new OptionContextData(opt,tc));
+ String a = mp.resolveValue(ropt.getStringValue(), UNKNOWN, LISTSEP, IBuildMacroProvider.CONTEXT_OPTION, new OptionContextData(opt,t));
assertEquals(a, "333 111"); //$NON-NLS-1$
} catch (Exception e) { fail(e.getLocalizedMessage()); }
}
@@ -236,7 +236,7 @@ public class ManagedBuildMacrosTests extends TestCase {
IToolChain tc = cfgs[0].getToolChain();
ITool t = cfgs[0].getTools()[0];
IOption opt = t.getOptionById(OPT_IDL);
- OptionContextData ocd = new OptionContextData(opt,tc);
+ OptionContextData ocd = new OptionContextData(opt,t);
assertNotNull(opt);
ms = mp.getSuppliers(IBuildMacroProvider.CONTEXT_OPTION, ocd);
assertNotNull(ms);
@@ -259,7 +259,7 @@ public class ManagedBuildMacrosTests extends TestCase {
ArrayList ar = new ArrayList(1);
for (int i=0; i<set1.length; i++) {
try {
- String[] aus = mp.resolveStringListValue(set1[i], UNKNOWN, LISTSEP, IBuildMacroProvider.CONTEXT_OPTION, new OptionContextData(opt,tc));
+ String[] aus = mp.resolveStringListValue(set1[i], UNKNOWN, LISTSEP, IBuildMacroProvider.CONTEXT_OPTION, new OptionContextData(opt,t));
if (aus == null) continue;
for (int j=0; j<aus.length; j++) ar.add(aus[j]);
} catch (BuildMacroException e) { fail(e.getLocalizedMessage()); }
@@ -326,14 +326,14 @@ public class ManagedBuildMacrosTests extends TestCase {
values0wAbs[8] = dev1 + values0wAbs[8];
values0wAbs[9] = dev1 + values0wAbs[9];
- fd = new FileContextData(new Path(values0wAbs[3]), new Path(values0wAbs[8]),opt,cfgs[0].getToolChain());
+ fd = new FileContextData(new Path(values0wAbs[3]), new Path(values0wAbs[8]),opt,t);
for (int i=0; i<names.length; i++)
try {
assertEquals(values0wAbs[i], mp.getMacro(names[i], IBuildMacroProvider.CONTEXT_FILE, fd, flag).getStringValue());
} catch (BuildMacroException e) { fail(e.getLocalizedMessage()); }
// check that relative path are reported OK
- fd = new FileContextData(p.append(EIN), p.append(AUS),opt,cfgs[0].getToolChain());
+ fd = new FileContextData(p.append(EIN), p.append(AUS),opt,t);
for (int i=0; i<names.length; i++)
try {
assertEquals(values0wRel[i], mp.getMacro(names[i], IBuildMacroProvider.CONTEXT_FILE, fd, flag).getStringValue());
@@ -368,7 +368,7 @@ public class ManagedBuildMacrosTests extends TestCase {
} else {
// check relative path only
- fd = new FileContextData(p.append(EIN), p.append(AUS),opt,cfgs[0].getToolChain());
+ fd = new FileContextData(p.append(EIN), p.append(AUS),opt,t);
for (int i=0; i<names.length; i++)
try {
assertEquals(values0u[i], mp.getMacro(names[i], IBuildMacroProvider.CONTEXT_FILE, fd, flag).getStringValue());
@@ -384,8 +384,8 @@ public class ManagedBuildMacrosTests extends TestCase {
TST[IBuildMacroProvider.CONTEXT_FILE], IBuildMacroProvider.CONTEXT_FILE, fd));
// For config #3, macros should contain lines specified in plugin.xml
- opt = cfgs[3].getTools()[0].getOptions()[0];
- fd = new FileContextData(p.append(EIN), p.append(AUS),opt,cfgs[1].getToolChain());
+ opt = cfgs[1].getTools()[0].getOptions()[0];
+ fd = new FileContextData(p.append(EIN), p.append(AUS),opt,cfgs[1].getTools()[0]);
for (int i=0; i<names.length; i++)
try {
assertEquals(values1[i], mp.getMacro(names[i], IBuildMacroProvider.CONTEXT_FILE, fd, flag).getStringValue());
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java
index cb97f812614..c20f797ea98 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java
@@ -434,7 +434,7 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo {
"", //$NON-NLS-1$
" ", //$NON-NLS-1$
IBuildMacroProvider.CONTEXT_OPTION,
- new OptionContextData(option, getDefaultConfiguration().getToolChain()));
+ new OptionContextData(option, tool));
if(resolved != null && resolved.length > 0){
for(int k = 0; k < resolved.length; k++){
String string = resolved[k];
@@ -724,7 +724,7 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo {
"", //$NON-NLS-1$
" ", //$NON-NLS-1$
IBuildMacroProvider.CONTEXT_FILE,
- new FileContextData(inputLocation,outputLocation,null,getDefaultConfiguration().getToolChain()));
+ new FileContextData(inputLocation,outputLocation,null,tool));
if((resolvedCommand = resolvedCommand.trim()).length() > 0)
cmd = resolvedCommand;
@@ -765,7 +765,7 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo {
"", //$NON-NLS-1$
" ", //$NON-NLS-1$
IBuildMacroProvider.CONTEXT_OPTION,
- new OptionContextData(option, getDefaultConfiguration().getToolChain()));
+ new OptionContextData(option, tool));
if(resolved != null && resolved.length > 0)
objs.addAll(Arrays.asList(resolved));
} catch (BuildMacroException e) {
@@ -1317,12 +1317,12 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo {
if (entryType == IPathEntry.CDT_INCLUDE_FILE &&
op[j].getValueType() == IOption.INCLUDE_PATH)
{
- OptionContextData ocd = new OptionContextData(op[j], obj);
+ OptionContextData ocd = new OptionContextData(op[j], t[i]);
addIncludes(entries, builtIns ? op[j].getBuiltIns() : op[j].getIncludePaths(), resPath, ocd);
} else if (entryType == IPathEntry.CDT_LIBRARY &&
op[j].getValueType() == IOption.LIBRARIES)
{
- OptionContextData ocd = new OptionContextData(op[j], obj);
+ OptionContextData ocd = new OptionContextData(op[j], t[i]);
addLibraries(entries, builtIns ? op[j].getBuiltIns() : op[j].getLibraries(), resPath, ocd);
} else if (entryType == IPathEntry.CDT_MACRO &&
op[j].getValueType() == IOption.PREPROCESSOR_SYMBOLS)
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
index 3a8fd208984..0cbd59f582f 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
@@ -2107,7 +2107,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
String strCmd = option.getCommand();
String val = option.getStringValue();
macroSubstitutor.setMacroContextInfo(IBuildMacroProvider.CONTEXT_FILE,
- new FileContextData(inputFileLocation, outputFileLocation, option, getParent()));
+ new FileContextData(inputFileLocation, outputFileLocation, option, this));
if (val.length() > 0
&& (val = MacroResolver.resolveToString(val, macroSubstitutor)).length() > 0) {
sb.append( evaluateCommand( strCmd, val ) );
@@ -2117,7 +2117,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
case IOption.STRING_LIST :
String listCmd = option.getCommand();
macroSubstitutor.setMacroContextInfo(IBuildMacroProvider.CONTEXT_FILE,
- new FileContextData(inputFileLocation, outputFileLocation, option, getParent()));
+ new FileContextData(inputFileLocation, outputFileLocation, option, this));
String[] list = MacroResolver.resolveStringListValues(option.getStringListValue(), macroSubstitutor, true);
if(list != null){
for (int j = 0; j < list.length; j++) {
@@ -2131,7 +2131,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
case IOption.INCLUDE_PATH :
String incCmd = option.getCommand();
macroSubstitutor.setMacroContextInfo(IBuildMacroProvider.CONTEXT_FILE,
- new FileContextData(inputFileLocation, outputFileLocation, option, getParent()));
+ new FileContextData(inputFileLocation, outputFileLocation, option, this));
String[] paths = MacroResolver.resolveStringListValues(option.getIncludePaths(), macroSubstitutor, true);
if(paths != null){
for (int j = 0; j < paths.length; j++) {
@@ -2145,7 +2145,7 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
case IOption.PREPROCESSOR_SYMBOLS :
String defCmd = option.getCommand();
macroSubstitutor.setMacroContextInfo(IBuildMacroProvider.CONTEXT_FILE,
- new FileContextData(inputFileLocation, outputFileLocation, option, getParent()));
+ new FileContextData(inputFileLocation, outputFileLocation, option, this));
String[] symbols = MacroResolver.resolveStringListValues(option.getDefinedSymbols(), macroSubstitutor, true);
if(symbols != null){
for (int j = 0; j < symbols.length; j++) {
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckStringExpression.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckStringExpression.java
index cddf3fd81f6..8d7d8859fbb 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckStringExpression.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/enablement/CheckStringExpression.java
@@ -69,14 +69,14 @@ public class CheckStringExpression implements IBooleanExpression {
" ", //$NON-NLS-1$
delimiter,
IBuildMacroProvider.CONTEXT_OPTION,
- new OptionContextData(option,configuration)
+ new OptionContextData(option,holder)
);
String resolvedValue = provider.resolveValue(fValue,
" ", //$NON-NLS-1$
delimiter,
IBuildMacroProvider.CONTEXT_OPTION,
- new OptionContextData(option,configuration)
+ new OptionContextData(option,holder)
);
if(fIsRegex){
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/DefaultMacroContextInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/DefaultMacroContextInfo.java
index 9633381be11..d898183a086 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/DefaultMacroContextInfo.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/DefaultMacroContextInfo.java
@@ -12,6 +12,7 @@ package org.eclipse.cdt.managedbuilder.internal.macros;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IHoldsOptions;
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
import org.eclipse.cdt.managedbuilder.core.ITool;
@@ -60,6 +61,13 @@ public class DefaultMacroContextInfo implements IMacroContextInfo {
};
}
break;
+ case IBuildMacroProvider.CONTEXT_TOOL:
+ if(data instanceof ITool){
+ return new IBuildMacroSupplier[]{
+ BuildMacroProvider.fMbsMacroSupplier
+ };
+ }
+ break;
case IBuildMacroProvider.CONTEXT_CONFIGURATION:
if(data instanceof IConfiguration){
return new IBuildMacroSupplier[]{
@@ -150,22 +158,30 @@ public class DefaultMacroContextInfo implements IMacroContextInfo {
case IBuildMacroProvider.CONTEXT_OPTION:
if(fData instanceof IOptionContextData){
IOptionContextData optionContext = (IOptionContextData)fData;
- IBuildObject buildObj = optionContext.getParent();
+ IHoldsOptions ho = OptionContextData.getHolder(optionContext);
+ if(ho instanceof ITool)
+ return new DefaultMacroContextInfo(
+ IBuildMacroProvider.CONTEXT_TOOL,
+ ho);
+ else if(ho instanceof IToolChain)
+ return new DefaultMacroContextInfo(
+ IBuildMacroProvider.CONTEXT_CONFIGURATION,
+ ((IToolChain)ho).getParent());
+ }
+ break;
+ case IBuildMacroProvider.CONTEXT_TOOL:
+ if(fData instanceof ITool){
+ IBuildObject parent = ((ITool)fData).getParent();
IConfiguration cfg = null;
- if(buildObj instanceof ITool)
- buildObj = ((ITool)buildObj).getParent();
- if(buildObj instanceof IToolChain)
- cfg = ((IToolChain)buildObj).getParent();
- else if(buildObj instanceof IResourceConfiguration)
- cfg = ((IResourceConfiguration)buildObj).getParent();
- else if(buildObj instanceof IConfiguration)
- cfg = (IConfiguration)buildObj;
+ if(parent instanceof IToolChain)
+ cfg = ((IToolChain)parent).getParent();
+ else if(parent instanceof IResourceConfiguration)
+ cfg = ((IResourceConfiguration)parent).getParent();
- if(cfg != null){
+ if(cfg != null)
return new DefaultMacroContextInfo(
IBuildMacroProvider.CONTEXT_CONFIGURATION,
cfg);
- }
}
break;
case IBuildMacroProvider.CONTEXT_CONFIGURATION:
@@ -209,5 +225,4 @@ public class DefaultMacroContextInfo implements IMacroContextInfo {
}
return null;
}
-
}
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 545d13d813a..2408ef1e72a 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
@@ -15,6 +15,7 @@ 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.IHoldsOptions;
import org.eclipse.cdt.managedbuilder.core.IInputType;
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
@@ -38,6 +39,7 @@ import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.PluginVersionIdentifier;
import org.osgi.framework.Bundle;
/**
@@ -66,6 +68,11 @@ public class MbsMacroSupplier implements IBuildMacroSupplier {
private static final String fOptionMacros[] = new String[]{
"IncludeDefaults", //$NON-NLS-1$
+ "ParentVersion", //$NON-NLS-1$
+ };
+
+ private static final String fToolMacros[] = new String[]{
+ "ToolVersion", //$NON-NLS-1$
};
private static final String fConfigurationMacros[] = new String[]{
@@ -77,6 +84,8 @@ public class MbsMacroSupplier implements IBuildMacroSupplier {
"BuildArtifactFilePrefix", //$NON-NLS-1$
"TargetOsList", //$NON-NLS-1$
"TargetArchList", //$NON-NLS-1$
+ "ToolChainVersion", //$NON-NLS-1$
+ "BuilderVersion", //$NON-NLS-1$
};
private static final String fProjectMacros[] = new String[]{
@@ -271,6 +280,9 @@ public class MbsMacroSupplier implements IBuildMacroSupplier {
case IBuildMacroProvider.CONTEXT_OPTION:
names = fOptionMacros;
break;
+ case IBuildMacroProvider.CONTEXT_TOOL:
+ names = fToolMacros;
+ break;
case IBuildMacroProvider.CONTEXT_CONFIGURATION:
names = fConfigurationMacros;
break;
@@ -311,8 +323,10 @@ public class MbsMacroSupplier implements IBuildMacroSupplier {
case IBuildMacroProvider.CONTEXT_FILE:
if(contextData instanceof IFileContextData){
for(int i = 0; i < fFileMacros.length; i++){
- if(macroName.equals(fFileMacros[i]))
+ if(macroName.equals(fFileMacros[i])){
macro = new FileContextMacro(macroName,(IFileContextData)contextData);
+ break;
+ }
}
}
break;
@@ -321,6 +335,11 @@ public class MbsMacroSupplier implements IBuildMacroSupplier {
macro = getMacro(macroName, (IOptionContextData)contextData);
}
break;
+ case IBuildMacroProvider.CONTEXT_TOOL:
+ if(contextData instanceof ITool){
+ macro = getMacro(macroName, (ITool)contextData);
+ }
+ break;
case IBuildMacroProvider.CONTEXT_CONFIGURATION:
if(contextData instanceof IConfiguration){
macro = getMacro(macroName, (IConfiguration)contextData);
@@ -354,6 +373,18 @@ public class MbsMacroSupplier implements IBuildMacroSupplier {
if(!canHandle(optionContext))
optionContext = null;
macro = new OptionMacro(macroName,optionContext);
+ } else if("ParentVersion".equals(macroName)){
+ IHoldsOptions holder = OptionContextData.getHolder(optionContext);
+ if(holder != null && holder.getVersion() != null)
+ macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,holder.getVersion().toString());
+ }
+ return macro;
+ }
+
+ public IBuildMacro getMacro(String macroName, ITool tool){
+ IBuildMacro macro = null;
+ if("ToolVersion".equals(macroName) && tool.getVersion() != null){ //$NON-NLS-1$
+ macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,tool.getVersion().toString());
}
return macro;
}
@@ -513,6 +544,15 @@ public class MbsMacroSupplier implements IBuildMacroSupplier {
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT_LIST,archList);
}
+ else if("ToolChainVersion".equals(macroName)){ //$NON-NLS-1$
+ if(cfg.getToolChain().getVersion() != null)
+ macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,cfg.getToolChain().getVersion().toString());
+ }
+ else if("BuilderVersion".equals(macroName)){ //$NON-NLS-1$
+ PluginVersionIdentifier version = cfg.getToolChain().getBuilder().getVersion();
+ if(version != null)
+ macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,version.toString());
+ }
return macro;
}
@@ -897,83 +937,30 @@ public class MbsMacroSupplier implements IBuildMacroSupplier {
if (parent instanceof ITool) {
tool = (ITool)parent;
}
- IBuildObject bo = (optionContext instanceof OptionData) ?
+ IBuildObject bObj = (optionContext instanceof OptionData) ?
((OptionData)optionContext).getOptionContainer() : optionContext.getParent();
- IBuildObject parentObject = null;
- if(bo instanceof ITool)
- bo = ((ITool)bo).getParent();
- else if(bo instanceof IConfiguration)
- bo = ((IConfiguration)bo).getToolChain();
-
- if(tool != null && bo instanceof IResourceConfiguration){
-
- IToolChain toolChain = null;
- IConfiguration cfg = null;
-
- IResourceConfiguration rc = (IResourceConfiguration)bo;
- cfg = rc.getParent();
- toolChain = cfg.getToolChain();
- parentObject = toolChain;
- if(rc.getTool(tool.getId()) != null){
- //get the configuration tool
- tool = tool.getSuperClass();
- IOption opts[] = tool.getOptions();
- IOption superClass = option;
- do{
- for(int i = 0; i < opts.length; i++){
- if(superClass.equals(opts[i]) || superClass.equals(opts[i].getSuperClass())){
- parentOption = opts[i];
- break;
- }
- }
- if(parentOption != null)
- break;
- }while((superClass = superClass.getSuperClass()) != null);
- } else if(toolChain.getTool(tool.getId()) != null){
- parentOption = option.getSuperClass();
- } else {
- ITool tools[] = toolChain.getTools();
- ITool superClasses[] = new ITool[tools.length];
- int i = 0;
- for(i = 0; i < tools.length; i++){
- superClasses[i] = tools[i];
- }
- for(i = 0; i < tools.length; i++){
- if(tool.equals(superClasses[i]))
- break;
- superClasses[i] = tools[i].getSuperClass();
- }
- if(i < tools.length){
- tool = tools[i];
- IOption opts[] = tool.getOptions();
- IOption superClassOpts[] = new IOption[opts.length];
- for(i = 0; i < opts.length; i++){
- superClassOpts[i] = opts[i];
- }
- for(i = 0; i < opts.length; i++){
- if(superClassOpts[i] != null){
- if(option.equals(superClassOpts[i]))
- break;
- superClassOpts[i] = superClassOpts[i].getSuperClass();
- }
- }
- if(i < opts.length)
- parentOption = opts[i];
- }
- }
+
+ IResourceConfiguration rcCfg = null;
+ ITool holderTool = null;
+ if(bObj instanceof ITool){
+ holderTool = (ITool)bObj;
+ IBuildObject p = holderTool.getParent();
+ if(p instanceof IResourceConfiguration)
+ rcCfg = (IResourceConfiguration)p;
+ } else if(bObj instanceof IResourceConfiguration)
+ rcCfg = (IResourceConfiguration)bObj;
+
+ IBuildObject parentObject = rcCfg == null ? bObj : rcCfg.getParent();
+
+ if(rcCfg != null && rcCfg.getTool(tool.getId()) != null){
+ tool = tool.getSuperClass();
+ parentOption = tool.getOptionBySuperClassId(option.getSuperClass().getId());
} else {
parentOption = option.getSuperClass();
- if(parentOption != null){
- IBuildObject parentParent = parentOption.getParent();
- if (parentParent instanceof ITool)
- parentObject = ((ITool)parentParent).getParent();
- else if (parentParent instanceof IToolChain)
- parentObject = parentParent;
- }
}
if(parentOption != null)
- return new OptionData(parentOption,bo,parentObject);
+ return new OptionData(parentOption,bObj,parentObject);
return null;
}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/OptionContextData.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/OptionContextData.java
index 3e3f03d9d1a..e7c10cc7e11 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/OptionContextData.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/macros/OptionContextData.java
@@ -11,7 +11,12 @@
package org.eclipse.cdt.managedbuilder.internal.macros;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
+import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IHoldsOptions;
import org.eclipse.cdt.managedbuilder.core.IOption;
+import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
+import org.eclipse.cdt.managedbuilder.core.ITool;
+import org.eclipse.cdt.managedbuilder.core.IToolChain;
import org.eclipse.cdt.managedbuilder.macros.IOptionContextData;
/**
@@ -41,4 +46,46 @@ public class OptionContextData implements IOptionContextData {
return fParent;
}
+ public static IHoldsOptions getHolder(IOptionContextData data){
+ IOption option = data.getOption();
+ if(option == null)
+ return null;
+
+ IBuildObject buildObj = data.getParent();
+ IToolChain tCh = null;
+ IHoldsOptions ho = null;
+ IResourceConfiguration rcCfg = null;
+ if(buildObj instanceof ITool)
+ ho = (ITool)buildObj;
+ if(buildObj instanceof IToolChain)
+ tCh = (IToolChain)buildObj;
+ else if(buildObj instanceof IResourceConfiguration)
+ rcCfg = (IResourceConfiguration)buildObj;
+ else if(buildObj instanceof IConfiguration)
+ tCh = ((IConfiguration)buildObj).getToolChain();
+
+ if(ho == null){
+ ho = option.getOptionHolder();
+ ITool tools[] = null;
+ if(tCh != null){
+ for(IToolChain cur = tCh; cur != null; cur = cur.getSuperClass()){
+ if(cur == ho)
+ return tCh;
+ }
+ tools = tCh.getTools();
+ } else if(rcCfg != null){
+ tools = rcCfg.getTools();
+ }
+
+ if(tools != null){
+ for(int i = 0; i < tools.length; i++){
+ for(ITool cur = tools[i]; cur != null; cur = cur.getSuperClass()){
+ if(cur == ho)
+ return tools[i];
+ }
+ }
+ }
+ }
+ return ho;
+ }
}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IBuildMacroProvider.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IBuildMacroProvider.java
index bdfa99678c4..dc4958c3fa3 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IBuildMacroProvider.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IBuildMacroProvider.java
@@ -22,6 +22,7 @@ public interface IBuildMacroProvider{
public final static int CONTEXT_WORKSPACE = 5;
public final static int CONTEXT_INSTALLATIONS = 6;
public final static int CONTEXT_ECLIPSEENV = 7;
+ public final static int CONTEXT_TOOL = 8;
/**
*
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IOptionContextData.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IOptionContextData.java
index 12015220789..9df26fa51a4 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IOptionContextData.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/macros/IOptionContextData.java
@@ -27,7 +27,12 @@ public interface IOptionContextData {
public IOption getOption();
/**
- * Returns IBuildObject that could be either an IToolChain or an IResourceConfiguration reference
+ * Returns IBuildObject that represents the option holder.
+ * For the backward compatibility MBS will also support the cases
+ * when this method returns either an IToolChain or IResourceConfiguration.
+ * In this case MBS will try to obtain the option holder automatically,
+ * but it might fail in case the tool-chain/resource configuration contains
+ * more than one tools with the same super-class
*
* @return IBuildObject
*/
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/DefaultGCCDependencyCalculator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/DefaultGCCDependencyCalculator.java
index 8bb37d4370f..4868de5f4a3 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/DefaultGCCDependencyCalculator.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/DefaultGCCDependencyCalculator.java
@@ -127,7 +127,7 @@ public class DefaultGCCDependencyCalculator implements IManagedDependencyGenerat
"", //$NON-NLS-1$
" ", //$NON-NLS-1$
IBuildMacroProvider.CONTEXT_FILE,
- new FileContextData(resource.getLocation(),null,null,info.getDefaultConfiguration().getToolChain()));
+ new FileContextData(resource.getLocation(),null,null,tool));
if((resolvedCommand = resolvedCommand.trim()).length() > 0)
cmd = resolvedCommand;
@@ -160,7 +160,7 @@ public class DefaultGCCDependencyCalculator implements IManagedDependencyGenerat
EMPTY_STRING,
WHITESPACE,
IBuildMacroProvider.CONTEXT_FILE,
- new FileContextData(resource.getLocation(), null, null, info.getDefaultConfiguration().getToolChain()));
+ new FileContextData(resource.getLocation(), null, null, tool));
if((resolvedCommand = resolvedCommand.trim()).length() > 0)
buildCmd = resolvedCommand;
@@ -169,14 +169,24 @@ public class DefaultGCCDependencyCalculator implements IManagedDependencyGenerat
} else {
- String cmd = info.getToolForSource(inputExtension);
+ ITool tool = null;
+ tools = config.getFilteredTools();
+ for (int index = 0; index < tools.length; index++) {
+ ITool tmp = tools[index];
+ if (tmp.buildsFileType(inputExtension)) {
+ tool = tmp;
+ break;
+ }
+ }
+ String cmd = tool != null ? tool.getToolCommand() : null;
+
//try to resolve the build macros in the tool command
try{
String resolvedCommand = ManagedBuildManager.getBuildMacroProvider().resolveValueToMakefileFormat(cmd,
"", //$NON-NLS-1$
" ", //$NON-NLS-1$
IBuildMacroProvider.CONTEXT_FILE,
- new FileContextData(resource.getLocation(),null,null,info.getDefaultConfiguration().getToolChain()));
+ new FileContextData(resource.getLocation(),null,null,tool));
if((resolvedCommand = resolvedCommand.trim()).length() > 0)
cmd = resolvedCommand;
@@ -209,9 +219,7 @@ public class DefaultGCCDependencyCalculator implements IManagedDependencyGenerat
WHITESPACE,
IBuildMacroProvider.CONTEXT_FILE,
new FileContextData(resource.getLocation(),
- null, null, info
- .getDefaultConfiguration()
- .getToolChain()));
+ null, null, tool));
if ((resolvedCommand = resolvedCommand.trim()).length() > 0)
buildCmd = resolvedCommand;
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java
index 631f1229090..6901fc85bb3 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java
@@ -1532,7 +1532,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
EMPTY_STRING,
WHITESPACE,
IBuildMacroProvider.CONTEXT_FILE,
- new FileContextData(null,null,null,info.getDefaultConfiguration().getToolChain()));
+ new FileContextData(null,null,null,tool));
if((resolvedCommand = resolvedCommand.trim()).length() > 0)
command = resolvedCommand;
@@ -1566,9 +1566,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
EMPTY_STRING,
WHITESPACE,
IBuildMacroProvider.CONTEXT_FILE,
- new FileContextData(null, null, null, info
- .getDefaultConfiguration()
- .getToolChain()));
+ new FileContextData(null, null, null, tool));
if ((resolvedCommand = resolvedCommand.trim()).length() > 0)
buildCmd = resolvedCommand;
@@ -2127,7 +2125,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
// are referenced
boolean fileExplicitMacrosReferenced = MacroResolver.getReferencedExplitFileMacros(tool).length > 0 ||
MacroResolver.getReferencedExplitFileMacros(tool.getToolCommand(),IBuildMacroProvider.CONTEXT_FILE,
- new FileContextData(sourceLocation, outputLocation, null, config.getToolChain())).length > 0;
+ new FileContextData(sourceLocation, outputLocation, null, tool)).length > 0;
//get and resolve command
String cmd = tool.getToolCommand();
try{
@@ -2135,7 +2133,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
EMPTY_STRING,
WHITESPACE,
IBuildMacroProvider.CONTEXT_FILE,
- new FileContextData(sourceLocation, outputLocation, null, info.getDefaultConfiguration().getToolChain()));
+ new FileContextData(sourceLocation, outputLocation, null, tool));
if((resolvedCommand = resolvedCommand.trim()).length() > 0)
cmd = resolvedCommand;
@@ -2298,9 +2296,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
WHITESPACE,
IBuildMacroProvider.CONTEXT_FILE,
new FileContextData(sourceLocation,
- outputLocation, null, info
- .getDefaultConfiguration()
- .getToolChain()));
+ outputLocation, null, tool));
if ((resolvedCommand = resolvedCommand.trim()).length() > 0)
buildCmd = resolvedCommand;
@@ -2358,9 +2354,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
WHITESPACE,
IBuildMacroProvider.CONTEXT_FILE,
new FileContextData(sourceLocation,
- outputLocation, null, info
- .getDefaultConfiguration()
- .getToolChain()));
+ outputLocation, null, tool));
if ((resolvedCommand = resolvedCommand.trim()).length() > 0)
buildCmd = resolvedCommand;
@@ -2392,9 +2386,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
WHITESPACE,
IBuildMacroProvider.CONTEXT_FILE,
new FileContextData(sourceLocation,
- outputLocation, null, info
- .getDefaultConfiguration()
- .getToolChain()));
+ outputLocation, null, tool));
} catch (BuildMacroException e) {
}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/ManagedBuildGnuToolInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/ManagedBuildGnuToolInfo.java
index 15e77c02c42..9a5d3d66e91 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/ManagedBuildGnuToolInfo.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/ManagedBuildGnuToolInfo.java
@@ -200,7 +200,7 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
"", //$NON-NLS-1$
" ", //$NON-NLS-1$
IBuildMacroProvider.CONTEXT_OPTION,
- new OptionContextData(option, config.getToolChain()));
+ new OptionContextData(option, tool));
if((resolved = resolved.trim()).length() > 0)
inputName = resolved;
} catch (BuildMacroException e){
@@ -507,7 +507,7 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
"", //$NON-NLS-1$
" ", //$NON-NLS-1$
IBuildMacroProvider.CONTEXT_OPTION,
- new OptionContextData(option, config.getToolChain()));
+ new OptionContextData(option, tool));
if((resolved = resolved.trim()).length() > 0)
outputs.set(j, resolved);
} catch (BuildMacroException e){
@@ -592,7 +592,7 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
"", //$NON-NLS-1$
" ", //$NON-NLS-1$
IBuildMacroProvider.CONTEXT_OPTION,
- new OptionContextData(option, config.getToolChain()));
+ new OptionContextData(option, tool));
if((resolved = resolved.trim()).length() > 0)
outputNames[j] = resolved;
} catch (BuildMacroException e){

Back to the top