1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-08 00:35:49 +02:00

Commit for Leo Treggiari:

Code to handle the case where a manifest file or project file contains a higher version number than the Managed Build System.
New JUnit tests for the new model.
Updates to some external strings.
This commit is contained in:
Sean Evoy 2004-11-15 19:33:09 +00:00
parent 757c7b4860
commit ee27feda67
10 changed files with 701 additions and 60 deletions

View file

@ -355,6 +355,7 @@
<option
name="Test Forward Option"
category="test.forward.child.category"
valueType="boolean"
id="test.forward.option">
</option>
<optionCategory

View file

@ -12,61 +12,625 @@ package org.eclipse.cdt.managedbuild.core.tests;
import org.eclipse.cdt.managedbuilder.core.IProjectType;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IToolChain;
import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.cdt.managedbuilder.core.IOption;
import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
import org.eclipse.cdt.managedbuilder.core.ITargetPlatform;
import org.eclipse.cdt.managedbuilder.core.IBuilder;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import junit.framework.Assert;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.core.runtime.IConfigurationElement;
public class ManagedBuildCoreTests extends TestCase {
private static final boolean boolVal = true;
private static IProjectType exeType;
private static IProjectType libType;
private static IProjectType dllType;
public ManagedBuildCoreTests(String name) {
super(name);
}
public static Test suite() {
TestSuite suite = new TestSuite(ManagedBuildCoreTests.class.getName());
TestSuite suite = new TestSuite(ManagedBuildCoreTests.class.getName());
suite.addTest(new ManagedBuildCoreTests("testLoadManifest"));
suite.addTest(new ManagedBuildCoreTests("cleanup"));
return suite;
}
/**
* Navigates through the CDT 2.1 manifest file and verifies that the
* Navigates through a CDT 2.1 manifest file and verifies that the
* definitions are loaded correctly.
*/
public void testLoadManifest() throws Exception {
IProjectType exeType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.exe");
assertNotNull(exeType);
IProjectType libType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.lib");
assertNotNull(libType);
IProjectType dllType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.so");
assertNotNull(dllType);
IProjectType[] projTypes = ManagedBuildManager.getDefinedProjectTypes();
exeType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.exe");
checkExeProjectType(exeType);
dllType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.so");
checkSoProjectType(dllType);
libType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.lib");
checkLibProjectType(libType);
}
/**
* Remove all the project information associated with the project used during test.
/*
* Do a sanity check on the testgnu exe project type.
*/
public void cleanup() {
//removeProject(projectName);
}
}
private void checkExeProjectType(IProjectType ptype) throws BuildException {
int i;
int expecectedNumConfigs = 2;
String[] expectedConfigName = {"Dbg", "Rel"};
String expectedCleanCmd = "rm -rf";
String expectedParserId = "org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser";
String expectedOSList = "solaris,linux,hpux,aix,qnx";
int expectedSizeOSList = 5;
String[] expectedArchList = {"all"};
String expectedBinaryParser = "org.eclipse.cdt.core.ELF";
String[] expectedPlatformName = {"Dbg Platform",
"Rel Platform"};
String expectedCommand = "make";
String expectedArguments = "-k";
String[] expectedBuilderName = {"Dbg Builder",
"Rel Builder"};
String expectedBuilderInfo = "org.eclipse.cdt.managedbuilder.makegen.gnu.GnuMakefileGenerator";
String[] expectedToolId1 = {"cdt.managedbuild.tool.testgnu.c.compiler.exe.debug",
"cdt.managedbuild.tool.testgnu.c.compiler.exe.release"};
String expectedSuperToolId1 = "cdt.managedbuild.tool.testgnu.c.compiler";
String expectedSuperOutputFlag1 = "-o";
String expectedSuperGetToolCommand1 = "gcc";
String expectedSuperInputExt1 = "c";
String expectedSuperToolInterfaceExt1 = "h";
String[] expectedSuperToolOutputExt1 = {"o"};
String expectedOptionCategory1 = "testgnu.c.compiler.category.preprocessor";
String[] OptionId1 = {"testgnu.c.compiler.exe.debug.option.optimization.level",
"testgnu.c.compiler.exe.release.option.optimization.level"};
String[] expectedOptionIdValue1 = {"testgnu.c.optimization.level.none",
"testgnu.c.optimization.level.most"};
String expectedEnumList1 = "Posix.Optimize.None, Posix.Optimize.Optimize, Posix.Optimize.More, Posix.Optimize.Most";
int expectedSizeEnumList1 = 4;
String[] expectedOptionEnumCmd1arr = {"-O0", "-O3"};
String OptionId2 = "testgnu.c.compiler.option.debugging.other";
String expectedOptionIdName2 = "Posix.Debug.Other";
String OptionId3 = "testgnu.c.compiler.option.debugging.gprof";
String expectedOptionIdName3 = "Posix.Debug.gprof";
String expectedOptionIdCmd3 = "-pg";
boolean expectedOptionIdValue3 = false;
int expecectedNumTools = 5;
int numOrderCCompilerTool = 0;
int expecectedCNature = ITool.FILTER_C;
int expecectedCCNature = ITool.FILTER_CC;
// Check project attributes
//
assertNotNull(ptype);
assertTrue(ptype.isTestProjectType());
assertFalse(ptype.isAbstract());
// Check project configurations
//
IConfiguration[] configs = ptype.getConfigurations();
assertNotNull(configs);
assertEquals(expecectedNumConfigs, configs.length);
// Loop over configurations
//
for (int iconfig=0; iconfig < configs.length; iconfig++) {
// Verify configuration attributes
//
assertEquals(configs[iconfig].getName(), (expectedConfigName[iconfig]));
assertEquals(expectedCleanCmd, configs[iconfig].getCleanCommand());
assertEquals(expectedParserId, configs[iconfig].getErrorParserIds());
// Fetch toolchain
//
IToolChain toolChain = configs[iconfig].getToolChain();
// Fetch and check platform
//
ITargetPlatform platform = toolChain.getTargetPlatform();
List expectedOSListarr = new ArrayList();
String[] expectedOSListTokens = expectedOSList.split(","); //$NON-NLS-1$
for (i = 0; i < expectedOSListTokens.length; ++i) {
expectedOSListarr.add(expectedOSListTokens[i].trim());
}
assertTrue(Arrays.equals(platform.getOSList(), (String[]) expectedOSListarr.toArray(new String[expectedSizeOSList])));
assertTrue(Arrays.equals(platform.getArchList(), expectedArchList));
assertEquals(platform.getBinaryParserId(), expectedBinaryParser);
assertEquals(platform.getName(), expectedPlatformName[iconfig]);
// Fetch and check builder
//
IBuilder builder = toolChain.getBuilder();
assertEquals(builder.getCommand(), expectedCommand);
assertEquals(builder.getArguments(), expectedArguments);
assertEquals(builder.getName(), expectedBuilderName[iconfig]);
IConfigurationElement element = builder.getBuildFileGeneratorElement();
if (element != null) {
assertEquals(element.getAttribute(IBuilder.BUILDFILEGEN_ID), expectedBuilderInfo);
}
// Fetch and check tools list
//
ITool[] tools = toolChain.getTools();
assertEquals(tools.length, expecectedNumTools);
// Fetch and check the gnu C compiler tool
//
ITool tool;
ITool superTool;
tool = tools[numOrderCCompilerTool];
superTool = tool.getSuperClass();
assertEquals(tool.getId(), expectedToolId1[iconfig]);
assertEquals(superTool.getId(), expectedSuperToolId1);
assertEquals(tool.getNatureFilter(), expecectedCNature);
List expectedSuperInputExt1List = new ArrayList();
String[] expectedSuperInputExt1Tokens = expectedSuperInputExt1.split(","); //$NON-NLS-1$
for (i = 0; i < expectedSuperInputExt1Tokens.length; ++i) {
expectedSuperInputExt1List.add(expectedSuperInputExt1Tokens[i].trim());
}
assertEquals(superTool.getInputExtensions(), expectedSuperInputExt1List);
assertEquals(superTool.getOutputFlag(), expectedSuperOutputFlag1);
assertEquals(superTool.getToolCommand(), expectedSuperGetToolCommand1);
assertTrue(Arrays.equals(superTool.getOutputExtensions(), expectedSuperToolOutputExt1));
List expectedSuperInterfaceExt1List = new ArrayList();
String[] expectedSuperInterfaceExt1Tokens = expectedSuperToolInterfaceExt1.split(","); //$NON-NLS-1$
for (i = 0; i < expectedSuperInterfaceExt1Tokens.length; ++i) {
expectedSuperInterfaceExt1List.add(expectedSuperInterfaceExt1Tokens[i].trim());
}
assertEquals(superTool.getInterfaceExtensions(), expectedSuperInterfaceExt1List);
assertTrue(superTool.isAbstract());
// Fetch and check an option category
//
IOptionCategory[] optionCats = superTool.getChildCategories();
assertEquals(optionCats[0].getId(), (expectedOptionCategory1));
// Fetch and check options customized for this tool
//
IOption option;
// Fetch the optimization level option and verify that it has the proper
// default value, which should overwrite the value set in the abstract
// project that its containing project is derived from
//
option = tool.getOptionById(OptionId1[iconfig]);
assertTrue(option.isExtensionElement());
String optionDefaultValue = (String)option.getDefaultValue();
assertEquals(option.getValueType(), (IOption.ENUMERATED));
assertEquals(optionDefaultValue, (expectedOptionIdValue1[iconfig]));
String optionEnumCmd1 = option.getEnumCommand(optionDefaultValue);
assertEquals(optionEnumCmd1, (expectedOptionEnumCmd1arr[iconfig]));
List expectedEnumList1arr = new ArrayList();
String enumValues[] = option.getApplicableValues();
String[] expectedEnumList1Tokens = expectedEnumList1.split(","); //$NON-NLS-1$
for (i = 0; i < expectedEnumList1Tokens.length; ++i) {
expectedEnumList1arr.add(expectedEnumList1Tokens[i].trim());
}
assertTrue(Arrays.equals(option.getApplicableValues(), (String[]) expectedEnumList1arr.toArray(new String[expectedSizeEnumList1])));
// Fetch the debug other option and verify
//
option = tool.getOptionById(OptionId2);
assertTrue(option.isExtensionElement());
assertEquals(option.getValueType(), (IOption.STRING));
assertEquals(option.getName(), (expectedOptionIdName2));
// Fetch the debug gprof option and verify
//
option = tool.getOptionById(OptionId3);
assertTrue(option.isExtensionElement());
assertEquals(option.getValueType(), (IOption.BOOLEAN));
boolean optionDefaultValueb = option.getBooleanValue();
assertEquals(optionDefaultValueb, (expectedOptionIdValue3));
assertEquals(option.getName(), (expectedOptionIdName3));
assertEquals(option.getCommand(), (expectedOptionIdCmd3));
} // end for
} // end routine
/*
* Do a sanity check on the testgnu so project type.
*/
private void checkSoProjectType(IProjectType ptype) throws BuildException {
int i;
int expecectedNumConfigs = 2;
String[] expectedConfigName = {"Debug", "Release"};
String expectedCleanCmd = "rm -rf";
String expectedParserId = "org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser";
String expectedArtifactExtension = "so";
String expectedOSList = "solaris,linux,hpux,aix,qnx";
int expectedSizeOSList = 5;
String[] expectedArchList = {"all"};
String expectedBinaryParser = "org.eclipse.cdt.core.ELF";
String[] expectedPlatformName = {"so Debug Platform",
"so Release Platform"};
String expectedCommand = "make";
String expectedArguments = "-k";
String[] expectedBuilderName = {"so Debug Builder",
"so Release Builder"};
String expectedScannerInfo = "org.eclipse.cdt.managedbuilder.internal.scannerconfig.DefaultGCCScannerInfoCollector";
String[] expectedToolChainName = {"so Debug ToolChain",
"so Release ToolChain"};
String[] expectedToolId1 = {"cdt.managedbuild.tool.testgnu.c.linker.so.debug",
"cdt.managedbuild.tool.testgnu.c.linker.so.release"};
String expectedSuperToolId1 = "cdt.managedbuild.tool.testgnu.c.linker";
String expectedToolOutputPrefix = "lib";
String[] expectedToolOutput = {""};
String expectedSuperOutputFlag1 = "-o";
String expectedSuperGetToolCommand1 = "gcc";
String expectedSuperInputExt1 = "o";
String[] expectedSuperToolOutputExt1 = {""};
String expectedOptionCategory1 = "testgnu.c.link.category.general";
String OptionId1A = "testgnu.c.link.option.libs";
String OptionId1B = "testgnu.c.link.option.paths";
String OptionId1C = "testgnu.c.link.option.userobjs";
String expectedOptionCmd1Aarr = "-l";
String expectedOptionCmd1Barr = "-L";
String OptionId2 = "testgnu.c.link.option.defname";
String expectedOptionIdName2 = "Posix.Linker.Defname";
String expectedOptionIdCmd2 = "-Wl,--output-def=";
String OptionId3 = "testgnu.c.link.option.nostart";
String expectedOptionIdName3 = "Posix.Linker.NoStartFiles";
String expectedOptionIdCmd3 = "-nostartfiles";
boolean expectedOptionIdValue3 = false;
String OptionId4 = "testgnu.c.link.option.shared";
String expectedOptionIdName4 = "Posix.Linker.Shared";
String expectedOptionIdCmd4 = "-shared";
boolean expectedOptionIdValue4 = false;
int expecectedNumTools = 5;
int numOrderCLinkerTool = 2;
int expecectedCNature = ITool.FILTER_C;
int expecectedCCNature = ITool.FILTER_CC;
// Check project attributes
//
assertNotNull(ptype);
assertTrue(ptype.isTestProjectType());
assertFalse(ptype.isAbstract());
// Check project configurations
//
IConfiguration[] configs = ptype.getConfigurations();
assertNotNull(configs);
assertEquals(expecectedNumConfigs, configs.length);
// Loop over configurations
//
for (int iconfig=0; iconfig < configs.length; iconfig++) {
// Verify configuration attributes
//
assertEquals(configs[iconfig].getName(), (expectedConfigName[iconfig]));
assertEquals(expectedCleanCmd, configs[iconfig].getCleanCommand());
assertEquals(expectedParserId, configs[iconfig].getErrorParserIds());
assertEquals(configs[iconfig].getArtifactExtension(), (expectedArtifactExtension));
// Fetch toolchain and verify
//
IToolChain toolChain = configs[iconfig].getToolChain();
assertEquals(toolChain.getName(), (expectedToolChainName[iconfig]));
List expectedOSListarr = new ArrayList();
String[] expectedOSListTokens = expectedOSList.split(","); //$NON-NLS-1$
for (i = 0; i < expectedOSListTokens.length; ++i) {
expectedOSListarr.add(expectedOSListTokens[i].trim());
}
assertEquals(expectedParserId, configs[iconfig].getErrorParserIds());
assertTrue(Arrays.equals(toolChain.getOSList(), (String[]) expectedOSListarr.toArray(new String[expectedSizeOSList])));
assertTrue(Arrays.equals(toolChain.getArchList(), expectedArchList));
IConfigurationElement element = toolChain.getScannerInfoCollectorElement();
if (element != null) {
assertEquals(element.getAttribute(IToolChain.SCANNER_INFO_ID), expectedScannerInfo);
}
// Fetch and check platform
//
ITargetPlatform platform = toolChain.getTargetPlatform();
assertTrue(Arrays.equals(platform.getOSList(), (String[]) expectedOSListarr.toArray(new String[expectedSizeOSList])));
assertTrue(Arrays.equals(platform.getArchList(), expectedArchList));
assertEquals(platform.getBinaryParserId(), expectedBinaryParser);
assertEquals(platform.getName(), expectedPlatformName[iconfig]);
// Fetch and check builder
//
IBuilder builder = toolChain.getBuilder();
assertEquals(builder.getCommand(), expectedCommand);
assertEquals(builder.getArguments(), expectedArguments);
assertEquals(builder.getName(), expectedBuilderName[iconfig]);
// Fetch and check tools list
//
ITool[] tools = toolChain.getTools();
assertEquals(tools.length, expecectedNumTools);
// Fetch and check the gnu C linker tool
//
ITool tool;
ITool superTool;
tool = tools[numOrderCLinkerTool];
superTool = tool.getSuperClass();
assertEquals(tool.getId(), expectedToolId1[iconfig]);
assertEquals(superTool.getId(), expectedSuperToolId1);
assertEquals(tool.getNatureFilter(), expecectedCNature);
assertEquals(tool.getOutputPrefix(), expectedToolOutputPrefix);
assertTrue(Arrays.equals(superTool.getOutputExtensions(), expectedToolOutput));
List expectedSuperInputExt1List = new ArrayList();
String[] expectedSuperInputExt1Tokens = expectedSuperInputExt1.split(","); //$NON-NLS-1$
for (i = 0; i < expectedSuperInputExt1Tokens.length; ++i) {
expectedSuperInputExt1List.add(expectedSuperInputExt1Tokens[i].trim());
}
assertEquals(superTool.getInputExtensions(), expectedSuperInputExt1List);
assertEquals(superTool.getOutputFlag(), expectedSuperOutputFlag1);
assertEquals(superTool.getToolCommand(), expectedSuperGetToolCommand1);
assertTrue(Arrays.equals(superTool.getOutputExtensions(), expectedSuperToolOutputExt1));
// Fetch and check an option category
//
IOptionCategory[] optionCats = superTool.getChildCategories();
assertEquals(optionCats[0].getId(), (expectedOptionCategory1));
// Fetch and check options customized for this tool
//
IOption option;
// Fetch the libs option and verify
//
option = tool.getOptionById(OptionId1A);
assertTrue(option.isExtensionElement());
String optionDefaultValue = (String)option.getDefaultValue();
assertEquals(option.getValueType(), (IOption.LIBRARIES));
assertEquals(option.getCommand(), (expectedOptionCmd1Aarr));
assertEquals(option.getBrowseType(), (IOption.BROWSE_FILE));
// Fetch the libsearch option and verify
//
option = tool.getOptionById(OptionId1B);
assertTrue(option.isExtensionElement());
optionDefaultValue = (String)option.getDefaultValue();
assertEquals(option.getValueType(), (IOption.STRING_LIST));
assertEquals(option.getCommand(), (expectedOptionCmd1Barr));
assertEquals(option.getBrowseType(), (IOption.BROWSE_DIR));
// Fetch the user objs option and verify
//
option = tool.getOptionById(OptionId1C);
assertTrue(option.isExtensionElement());
optionDefaultValue = (String)option.getDefaultValue();
assertEquals(option.getValueType(), (IOption.OBJECTS));
assertEquals(option.getBrowseType(), (IOption.BROWSE_FILE));
// Fetch the defname option and verify
//
option = tool.getOptionById(OptionId2);
assertTrue(option.isExtensionElement());
assertEquals(option.getValueType(), (IOption.STRING));
assertEquals(option.getName(), (expectedOptionIdName2));
assertEquals(option.getCommand(), (expectedOptionIdCmd2));
// Fetch the nostartfiles option and verify
//
option = tool.getOptionById(OptionId3);
assertTrue(option.isExtensionElement());
assertEquals(option.getValueType(), (IOption.BOOLEAN));
boolean optionDefaultValueb1 = option.getBooleanValue();
assertEquals(optionDefaultValueb1, (expectedOptionIdValue3));
assertEquals(option.getName(), (expectedOptionIdName3));
assertEquals(option.getCommand(), (expectedOptionIdCmd3));
// Fetch the shared option and verify that it has the proper
// default value, which should overwrite the value set in the abstract
// project that its containing project is derived from
//
option = tool.getOptionById(OptionId4);
assertTrue(option.isExtensionElement());
assertEquals(option.getValueType(), (IOption.BOOLEAN));
boolean optionDefaultValueb2 = option.getBooleanValue();
assertEquals(optionDefaultValueb2, (expectedOptionIdValue4));
assertEquals(option.getName(), (expectedOptionIdName4));
assertEquals(option.getCommand(), (expectedOptionIdCmd4));
} // end for
} //end routine
/*
* Do a sanity check on the testgnu lib project type.
*/
private void checkLibProjectType(IProjectType ptype) throws BuildException {
int i;
int expecectedNumConfigs = 2;
String[] expectedConfigName = {"Dbg", "Rel"};
String expectedCleanCmd = "rm -rf";
String expectedParserId = "org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser";
String expectedArtifactExtension = "a";
String expectedOSList = "solaris,linux,hpux,aix,qnx";
int expectedSizeOSList = 5;
String[] expectedArchList = {"all"};
String expectedBinaryParser = "org.eclipse.cdt.core.ELF";
String[] expectedPlatformName = {"Dbg P",
"Rel P"};
String expectedCommand = "make";
String expectedArguments = "-k";
String[] expectedBuilderName = {"Dbg B",
"Rel B"};
String expectedScannerInfo = "org.eclipse.cdt.managedbuilder.internal.scannerconfig.DefaultGCCScannerInfoCollector";
String[] expectedToolId1 = {"cdt.managedbuild.tool.testgnu.cpp.compiler.lib.debug",
"cdt.managedbuild.tool.testgnu.cpp.compiler.lib.release"};
String expectedSuperToolId1 = "cdt.managedbuild.tool.testgnu.cpp.compiler";
String expectedSuperOutputFlag1 = "-o";
String expectedSuperGetToolCommand1 = "g++";
String expectedSuperInputExt1 = "c,C,cc,cxx,cpp";
String expectedSuperToolInterfaceExt1 = "h,H,hpp";
String[] expectedSuperToolOutputExt1 = {"o"};
String expectedOptionCategory1 = "testgnu.cpp.compiler.category.preprocessor";
String[] OptionId1 = {"testgnu.cpp.compiler.lib.debug.option.optimization.level",
"testgnu.cpp.compiler.lib.release.option.optimization.level"};
String[] expectedOptionIdValue1 = {"testgnu.cpp.compiler.optimization.level.none",
"testgnu.cpp.compiler.optimization.level.most"};
String expectedEnumList1 = "Posix.Optimize.None, Posix.Optimize.Optimize, Posix.Optimize.More, Posix.Optimize.Most";
int expectedSizeEnumList1 = 4;
String[] expectedOptionEnumCmd1arr = {"-O0", "-O3"};
String OptionId2 = "testgnu.cpp.compiler.option.other.other";
String expectedOptionIdName2 = "OtherFlags";
String OptionId3 = "testgnu.cpp.compiler.option.other.verbose";
String expectedOptionIdName3 = "Posix.Verbose";
String expectedOptionIdCmd3 = "-v";
boolean expectedOptionIdValue3 = false;
int expecectedNumTools = 4;
int numOrderCppCompilerTool = 1;
int expecectedCNature = ITool.FILTER_C;
int expecectedCCNature = ITool.FILTER_CC;
// Check project attributes
//
assertNotNull(ptype);
assertTrue(ptype.isTestProjectType());
assertFalse(ptype.isAbstract());
// Check project configurations
//
IConfiguration[] configs = ptype.getConfigurations();
assertNotNull(configs);
assertEquals(expecectedNumConfigs, configs.length);
// Loop over configurations
//
for (int iconfig=0; iconfig < configs.length; iconfig++) {
// Verify configuration attributes
//
assertEquals(configs[iconfig].getName(), (expectedConfigName[iconfig]));
assertEquals(expectedCleanCmd, configs[iconfig].getCleanCommand());
assertEquals(expectedParserId, configs[iconfig].getErrorParserIds());
assertEquals(configs[iconfig].getArtifactExtension(), (expectedArtifactExtension));
// Fetch toolchain and verify
//
IToolChain toolChain = configs[iconfig].getToolChain();
List expectedOSListarr = new ArrayList();
String[] expectedOSListTokens = expectedOSList.split(","); //$NON-NLS-1$
for (i = 0; i < expectedOSListTokens.length; ++i) {
expectedOSListarr.add(expectedOSListTokens[i].trim());
}
assertEquals(expectedParserId, configs[iconfig].getErrorParserIds());
assertTrue(Arrays.equals(toolChain.getOSList(), (String[]) expectedOSListarr.toArray(new String[expectedSizeOSList])));
assertTrue(Arrays.equals(toolChain.getArchList(), expectedArchList));
IConfigurationElement element = toolChain.getScannerInfoCollectorElement();
if (element != null) {
assertEquals(element.getAttribute(IToolChain.SCANNER_INFO_ID), expectedScannerInfo);
}
// Fetch and check platform
//
ITargetPlatform platform = toolChain.getTargetPlatform();
assertTrue(Arrays.equals(platform.getOSList(), (String[]) expectedOSListarr.toArray(new String[expectedSizeOSList])));
assertTrue(Arrays.equals(platform.getArchList(), expectedArchList));
assertEquals(platform.getBinaryParserId(), expectedBinaryParser);
assertEquals(platform.getName(), expectedPlatformName[iconfig]);
// Fetch and check builder
//
IBuilder builder = toolChain.getBuilder();
assertEquals(builder.getCommand(), expectedCommand);
assertEquals(builder.getArguments(), expectedArguments);
assertEquals(builder.getName(), expectedBuilderName[iconfig]);
// Fetch and check tools list
//
ITool[] tools = toolChain.getTools();
assertEquals(tools.length, expecectedNumTools);
// Fetch and check the gnu Cpp compiler tool
//
ITool tool;
ITool superTool;
tool = tools[numOrderCppCompilerTool];
superTool = tool.getSuperClass();
assertEquals(tool.getId(), expectedToolId1[iconfig]);
assertEquals(superTool.getId(), expectedSuperToolId1);
assertEquals(tool.getNatureFilter(), expecectedCCNature);
List expectedSuperInputExt1List = new ArrayList();
String[] expectedSuperInputExt1Tokens = expectedSuperInputExt1.split(","); //$NON-NLS-1$
for (i = 0; i < expectedSuperInputExt1Tokens.length; ++i) {
expectedSuperInputExt1List.add(expectedSuperInputExt1Tokens[i].trim());
}
assertEquals(superTool.getInputExtensions(), expectedSuperInputExt1List);
assertEquals(superTool.getOutputFlag(), expectedSuperOutputFlag1);
assertEquals(superTool.getToolCommand(), expectedSuperGetToolCommand1);
List expectedSuperInterfaceExt1List = new ArrayList();
String[] expectedSuperInterfaceExt1Tokens = expectedSuperToolInterfaceExt1.split(","); //$NON-NLS-1$
for (i = 0; i < expectedSuperInterfaceExt1Tokens.length; ++i) {
expectedSuperInterfaceExt1List.add(expectedSuperInterfaceExt1Tokens[i].trim());
}
assertEquals(superTool.getInterfaceExtensions(), expectedSuperInterfaceExt1List);
assertTrue(Arrays.equals(superTool.getOutputExtensions(), expectedSuperToolOutputExt1));
// Fetch and check an option category
//
IOptionCategory[] optionCats = superTool.getChildCategories();
assertEquals(optionCats[0].getId(), (expectedOptionCategory1));
// Fetch and check options customized for this tool
//
IOption option;
// Fetch the optimization level option and verify that it has the proper
// default value, which should overwrite the value set in the abstract
// project that its containing project is derived from
//
option = tool.getOptionById(OptionId1[iconfig]);
assertTrue(option.isExtensionElement());
String optionDefaultValue = (String)option.getDefaultValue();
assertEquals(option.getValueType(), (IOption.ENUMERATED));
assertEquals(optionDefaultValue, (expectedOptionIdValue1[iconfig]));
String optionEnumCmd1 = option.getEnumCommand(optionDefaultValue);
assertEquals(optionEnumCmd1, (expectedOptionEnumCmd1arr[iconfig]));
List expectedEnumList1arr = new ArrayList();
String enumValues[] = option.getApplicableValues();
String[] expectedEnumList1Tokens = expectedEnumList1.split(","); //$NON-NLS-1$
for (i = 0; i < expectedEnumList1Tokens.length; ++i) {
expectedEnumList1arr.add(expectedEnumList1Tokens[i].trim());
}
assertTrue(Arrays.equals(option.getApplicableValues(), (String[]) expectedEnumList1arr.toArray(new String[expectedSizeEnumList1])));
// Fetch the other flags option and verify
//
option = tool.getOptionById(OptionId2);
assertTrue(option.isExtensionElement());
assertEquals(option.getValueType(), (IOption.STRING));
assertEquals(option.getName(), (expectedOptionIdName2));
// Fetch the verbose option and verify
//
option = tool.getOptionById(OptionId3);
assertTrue(option.isExtensionElement());
assertEquals(option.getValueType(), (IOption.BOOLEAN));
boolean optionDefaultValueb = option.getBooleanValue();
assertEquals(optionDefaultValueb, (expectedOptionIdValue3));
assertEquals(option.getName(), (expectedOptionIdName3));
assertEquals(option.getCommand(), (expectedOptionIdCmd3));
} // end for
} // end routine
} // end class

View file

@ -153,6 +153,13 @@
</documentation>
</annotation>
</attribute>
<attribute name="parent" type="string">
<annotation>
<documentation>
The configuration that this configuration was cloned from.
</documentation>
</annotation>
</attribute>
<attribute name="artifactName" type="string">
<annotation>
<documentation>

View file

@ -130,6 +130,21 @@ public interface IManagedProject extends IBuildObject {
*/
public void setDirty(boolean isDirty);
/**
* Returns <code>true</code> if this project is valid
* else <code>false</code>.
*
* @return boolean
*/
public boolean isValid();
/**
* Sets the element's "Valid" flag.
*
* @param isValid
*/
public void setValid(boolean isValid);
/**
* Persist the managed project to the project file (.cdtbuild).
*

View file

@ -1135,6 +1135,10 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
// This is a 1.2 manifest and we are compatible for now
return true;
} else {
// isCompatibleWith will return FALSE, if:
// o The major versions are not equal
// o The major versions are equal, but the remainder of the manifest version # is
// greater than the MBS version #
return(buildInfoVersion.isCompatibleWith(version));
}
}
@ -1184,8 +1188,12 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
// Make sure that the version is compatible with the manager
fileVersion = rootElement.getNodeValue();
PluginVersionIdentifier version = new PluginVersionIdentifier(fileVersion);
// isCompatibleWith will return FALSE, if:
// o The major versions are not equal
// o The major versions are equal, but the remainder of the .cdtbuild version # is
// greater than the MBS version #
if (!buildInfoVersion.isCompatibleWith(version)) {
throw new BuildException(ManagedMakeMessages.getResourceString(PROJECT_VERSION_ERROR));
throw new BuildException(ManagedMakeMessages.getFormattedString(PROJECT_VERSION_ERROR, project.getName()));
}
if (buildInfoVersion.isGreaterThan(version)) {
// TODO Upgrade the project
@ -1207,6 +1215,11 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
throw e;
}
}
if (buildInfo.getManagedProject() == null ||
(!buildInfo.getManagedProject().isValid())) {
// The load failed
throw new Exception(ManagedMakeMessages.getFormattedString("ManagedBuildManager.error.id.nomatch", project.getName()));
}
project.setSessionProperty(buildInfoProperty, buildInfo);
}
} catch (Exception e) {
@ -1245,18 +1258,34 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
IExtension extension = extensions[i];
// Can we read this manifest
if (!isVersionCompatible(extension)) {
//The version of the Plug-in is greater than what the manager thinks it understands
throw new BuildException(ManagedMakeMessages.getResourceString(MANIFEST_VERSION_ERROR));
}
// Get the "configuraton elements" defined in the plugin.xml file.
// Note that these "configuration elements" are not related to the
// managed build system "configurations".
// From the PDE Guide:
// A configuration element, with its attributes and children, directly
// reflects the content and structure of the extension section within the
// declaring plug-in's manifest (plugin.xml) file.
IConfigurationElement[] elements = extension.getConfigurationElements();
loadConfigElements(DefaultManagedConfigElement.convertArray(elements));
// The version of the Plug-in is greater than what the manager thinks it understands
// Display error message
IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if(window == null){
IWorkbenchWindow windows[] = PlatformUI.getWorkbench().getWorkbenchWindows();
window = windows[0];
}
final Shell shell = window.getShell();
final String errMsg = ManagedMakeMessages.getFormattedString(MANIFEST_VERSION_ERROR, extension.getUniqueIdentifier());
shell.getDisplay().syncExec( new Runnable() {
public void run() {
MessageDialog.openError(shell,
ManagedMakeMessages.getResourceString("ManagedBuildManager.error.manifest_load_failed_title"), //$NON-NLS-1$
errMsg);
}
} );
} else {
// Get the "configuraton elements" defined in the plugin.xml file.
// Note that these "configuration elements" are not related to the
// managed build system "configurations".
// From the PDE Guide:
// A configuration element, with its attributes and children, directly
// reflects the content and structure of the extension section within the
// declaring plug-in's manifest (plugin.xml) file.
IConfigurationElement[] elements = extension.getConfigurationElements();
loadConfigElements(DefaultManagedConfigElement.convertArray(elements));
}
}
// Then call resolve.
//
@ -1834,5 +1863,4 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
public static IManagedConfigElement getConfigElement(IBuildObject buildObj) {
return (IManagedConfigElement)getConfigElementMap().get(buildObj);
}
}

View file

@ -111,7 +111,7 @@ public class Configuration extends BuildObject implements IConfiguration {
* Create a new extension configuration based on one already defined.
*
* @param projectType The <code>ProjectType</code> the configuration will be added to.
* @param parentConfig The <code>IConfiguration</code> to copy the settings from.
* @param parentConfig The <code>IConfiguration</code> that is the parent configuration of this configuration
* @param id A unique ID for the new configuration.
*/
public Configuration(ProjectType projectType, IConfiguration parentConfig, String id) {
@ -144,6 +144,7 @@ public class Configuration extends BuildObject implements IConfiguration {
* Create a new extension configuration and fill in the attributes and childen later.
*
* @param projectType The <code>ProjectType</code> the configuration will be added to.
* @param parentConfig The <code>IConfiguration</code> that is the parent configuration of this configuration
* @param id A unique ID for the new configuration.
* @param name A name for the new configuration.
*/
@ -196,8 +197,9 @@ public class Configuration extends BuildObject implements IConfiguration {
* Create a new project, non-extension, configuration based on one already defined.
*
* @param managedProject The <code>ManagedProject</code> the configuration will be added to.
* @param parentConfig The <code>IConfiguration</code> to copy the settings from.
* @param cloneConfig The <code>IConfiguration</code> to copy the settings from.
* @param id A unique ID for the new configuration.
* @param cloneTools If <code>true</code>, the configuration's tools are cloned
*/
public Configuration(ManagedProject managedProject, Configuration cloneConfig, String id, boolean cloneTools) {
setId(id);

View file

@ -123,7 +123,8 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo {
// TODO: There should only be 1?
for (int projIndex = projNodes.getLength() - 1; projIndex >= 0; --projIndex) {
ManagedProject proj = new ManagedProject(this, (Element)projNodes.item(projIndex));
proj.resolveReferences();
if (!proj.resolveReferences())
proj.setValid(false);
}
// Switch the rebuild off since this is an existing project

View file

@ -47,6 +47,7 @@ public class ManagedProject extends BuildObject implements IManagedProject {
private Map configMap;
// Miscellaneous
private boolean isDirty = false;
private boolean isValid = true;
private boolean resolved = true;
/*
@ -95,15 +96,17 @@ public class ManagedProject extends BuildObject implements IManagedProject {
this(buildInfo.getOwner());
// Initialize from the XML attributes
loadFromProject(element);
// Load children
NodeList configElements = element.getChildNodes();
for (int i = 0; i < configElements.getLength(); ++i) {
Node configElement = configElements.item(i);
if (configElement.getNodeName().equals(IConfiguration.CONFIGURATION_ELEMENT_NAME)) {
Configuration config = new Configuration(this, (Element)configElement);
if (loadFromProject(element)) {
// Load children
NodeList configElements = element.getChildNodes();
for (int i = 0; i < configElements.getLength(); ++i) {
Node configElement = configElements.item(i);
if (configElement.getNodeName().equals(IConfiguration.CONFIGURATION_ELEMENT_NAME)) {
Configuration config = new Configuration(this, (Element)configElement);
}
}
} else {
setValid(false);
}
// hook me up
@ -120,7 +123,7 @@ public class ManagedProject extends BuildObject implements IManagedProject {
*
* @param element An XML element containing the project information
*/
protected void loadFromProject(Element element) {
protected boolean loadFromProject(Element element) {
// id
setId(element.getAttribute(IBuildObject.ID));
@ -135,9 +138,10 @@ public class ManagedProject extends BuildObject implements IManagedProject {
if (projectTypeId != null && projectTypeId.length() > 0) {
projectType = ManagedBuildManager.getExtensionProjectType(projectTypeId);
if (projectType == null) {
// TODO: Report error
return false;
}
}
return true;
}
/* (non-Javadoc)
@ -348,14 +352,14 @@ public class ManagedProject extends BuildObject implements IManagedProject {
/* (non-Javadoc)
* Resolve the element IDs to interface references
*/
public void resolveReferences() {
public boolean resolveReferences() {
if (!resolved) {
resolved = true;
// Resolve project-type
if (projectTypeId != null && projectTypeId.length() > 0) {
projectType = ManagedBuildManager.getExtensionProjectType(projectTypeId);
if (projectType == null) {
// TODO: Report error
return false;
}
}
@ -366,6 +370,7 @@ public class ManagedProject extends BuildObject implements IManagedProject {
current.resolveReferences();
}
}
return true;
}
/* (non-Javadoc)
@ -400,4 +405,20 @@ public class ManagedProject extends BuildObject implements IManagedProject {
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IManagedProject#isValid()
*/
public boolean isValid() {
// TODO: In the future, children could also have a "valid" state that should be checked
return isValid;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IManagedProject#setValid(boolean)
*/
public void setValid(boolean isValid) {
// TODO: In the future, children could also have a "valid" state...
this.isValid = isValid;
}
}

View file

@ -37,10 +37,12 @@ Option.error.bad_value_type=Bad value for type
ManagedBuildManager.error.owner_not_null=addTarget: owner not null
ManagedBuildManager.error.null_owner=addTarget: null owner
ManagedBuildManager.error.owner_not_project=addTarget: owner not project
ManagedBuildManager.error.manifest.version.error=The version of plugin file is higher than version of the build system
ManagedBuildManager.error.project.version.error=The version of the project is higher than the build system
ManagedBuildManager.error.manifest_load_failed_title=Managed Build System Version Error
ManagedBuildManager.error.manifest.version.error=The version number defined in the plugin manifest file\n{0}\nis greater than the version of the Managed Build System.\nThe definitions in the manifest file will not be loaded.
ManagedBuildManager.error.open_failed_title=Managed Make Project File Error
ManagedBuildManager.error.open_failed=The Managed Make project file could not be read because of the following error.\n\n{0}\n\nManaged Make functionality will not be available for this project.
ManagedBuildManager.error.project.version.error=The version number of the project {0} is greater than the Managed Build System version number.
ManagedBuildManager.error.id.nomatch=Error loading Managed Make project information for project {0}. The tool definitions used to create the project are not available.
# Makefile Generator Messages
MakefileGenerator.message.start.file=Building file:

View file

@ -54,7 +54,7 @@ BuildPropertyPage.tip.addconf=Add configurations for the platform
BuildPropertyPage.tip.remconf=Remove configurations for the platform
BuildPropertyPage.manage.title=Manage
BuildPropertyPage.error.Unknown_tree_element=Unknown type of element in tree of type {0}
BuildPropertyPage.error.version_low=The project settings are stored in an earlier format.\nYou must upgrade the project before the settings can be displayed.
BuildPropertyPage.error.version_low=The Managed Make project settings for this project are not available.
BuildPropertyPage.defaults.title=Reset Configuration Tools
BuildPropertyPage.defaults.message=This action will reset all of the tools in the selected configuration to their default settings.\n\nDo you want to proceed?
BuildPropertyPage.changes.save.title=Apply Configuration Changes
@ -72,7 +72,7 @@ ToolsSettingsBlock.label.ToolOptions=Options
# ----------- Build Settings Block -----------
BuildSettingsBlock.label.Settings=Build Settings
BuildSettingsBlock.label.makecmdgroup=Make command
BuildSettingsBlock.label.makecmdgroup=Build command
BuildSettingsBlock.label.makecmddef=Use default command
BuildSettingsBlock.label.output.group=Build output
BuildSettingsBlock.label.output.name=Artifact name:
@ -87,7 +87,7 @@ ResourceBuildPropertyPage.selection.configuration.all=All configurations
ResourceBuildPropertyPage.label.ToolTree=Tools
ResourceBuildPropertyPage.label.ToolOptions=Options
ResourceBuildPropertyPage.label.NotMBSFile=The project is closed or the file is not contained within a Managed Make project.
ResourceBuildPropertyPage.error.version_low=The project settings are stored in an earlier format.\nYou must upgrade the project before the settings can be displayed.
ResourceBuildPropertyPage.error.version_low=The Managed Make project settings for this project are not available.
# ----------- Entry Dialog -----------
BrowseEntryDialog.error.Folder_name_invalid = Folder name invalid