Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Resend - Fix for bugs 43490 (trivial), 44020 (partial) and 43980

I must be getting tired....

Anyway, here's the patch. There shouldn't be any conflicts. 44020 is still 
happening with C++ projects, so I will have to stay until I figure it out. 
There may 1 more patch tonight.

Sean Evoy
Rational Software - IBM Software Group
Ottawa, Ontario, Canada

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/ChangeLog,v
retrieving revision 1.131
diff -u -r1.131 ChangeLog
--- ChangeLog	1 Oct 2003 21:15:45 -0000	1.131
+++ ChangeLog	1 Oct 2003 23:36:16 -0000
@@ -1,3 +1,9 @@
+2003-10-01 Sean Evoy
+	Fix for bug 43980.
+	Updated the test and test plugin to check for nature filter.
+	* plugin.xml
+	* build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java
+
 2003-10-01 Andrew Niefer
 	added testBug43951 to CompleteParseASTTest
 
Index: plugin.xml
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/plugin.xml,v
retrieving revision 1.16
diff -u -r1.16 plugin.xml
--- plugin.xml	1 Oct 2003 20:21:43 -0000	1.16
+++ plugin.xml	1 Oct 2003 23:36:16 -0000
@@ -40,6 +40,7 @@
             makeFlags="-k"
             osList="win32">
          <tool
+               natureFilter="cnature"
                sources="foo,bar"
                name="Root Tool"
                headerExtensions="baz"
@@ -159,6 +160,7 @@
                id="sub.config">
          </configuration>
          <tool
+               natureFilter="both"
                sources="yarf"
                name="Sub Tool"
                headerExtensions="arf,barf"
@@ -202,7 +204,7 @@
                </listOptionValue>
                <listOptionValue
 		             value="&quot;../includes&quot;"
-                     builIn="false">
+                     builtIn="false">
                </listOptionValue>
             </option>
             <option
Index: build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java,v
retrieving revision 1.13
diff -u -r1.13 ManagedBuildTests.java
--- build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java	1 Oct 2003 17:10:20 -0000	1.13
+++ build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java	1 Oct 2003 23:36:16 -0000
@@ -286,11 +286,8 @@
 	 * 
 	 */
 	public void testConfigurations() throws CoreException, BuildException {
-		String rootConfigId = "test.root.1.0";
 		String rootName = "Root Config";
-		String overrideConfigId = "test.root.1.1";
 		String overrideName = "Root Override Config";
-		String completeOverrideConfigId = "test.root.1.2";
 		String completeOverrideName = "Complete Override Config";
 		
 		// Open the test project
@@ -303,11 +300,8 @@
 		IConfiguration[] definedConfigs = rootTarget.getConfigurations(); 		
 		assertEquals(3, definedConfigs.length);
 		IConfiguration baseConfig = definedConfigs[0];
-		assertEquals(definedConfigs[0].getId(), rootConfigId);
 		assertEquals(definedConfigs[0].getName(), rootName);
-		assertEquals(definedConfigs[1].getId(), overrideConfigId);
 		assertEquals(definedConfigs[1].getName(), overrideName);
-		assertEquals(definedConfigs[2].getId(), completeOverrideConfigId);
 		assertEquals(definedConfigs[2].getName(), completeOverrideName);
 		
 		// Create a new configuration and test the rename function
@@ -355,9 +349,7 @@
 		rootTarget.removeConfiguration(testConfigId);
 		definedConfigs = rootTarget.getConfigurations(); 		
 		assertEquals(3, definedConfigs.length);
-		assertEquals(definedConfigs[0].getId(), rootConfigId);
 		assertEquals(definedConfigs[0].getName(), rootName);
-		assertEquals(definedConfigs[1].getId(), overrideConfigId);
 		assertEquals(definedConfigs[1].getName(), overrideName);
 	}
 	
@@ -522,10 +514,8 @@
 		// There should be a default configuration defined for the project
 		ITarget buildTarget = info.getDefaultTarget();
 		assertNotNull(buildTarget);
-		assertEquals(buildTarget.getId(), "test.root.1");
 		IConfiguration buildConfig = info.getDefaultConfiguration(buildTarget);
 		assertNotNull(buildConfig);
-		assertEquals(buildConfig.getId(), "test.root.1.0");
 				
 		// The default target should be the same as the one-and-only target in the project
 		List targets = info.getTargets();
@@ -705,7 +695,8 @@
 		// The root tool defines one valid header file extension
 		assertTrue(rootTool.isHeaderFile("baz"));
 		assertTrue(tools[0].isHeaderFile("baz"));
-
+		assertEquals(ITool.FILTER_C, rootTool.getNatureFilter());
+		
 		// Partially Overriden Configuration
 		assertEquals("Root Override Config", configs[1].getName());
 		tools = configs[1].getTools();
@@ -834,7 +825,8 @@
 		assertEquals("lib", subTool.getOutputPrefix());
 		assertTrue(subTool.isHeaderFile("arf"));
 		assertTrue(subTool.isHeaderFile("barf"));
-
+		assertEquals(ITool.FILTER_BOTH, subTool.getNatureFilter());
+		
 		// Do a sanity check on the options 
 		assertEquals("Include Paths", subOpts[0].getName());
 		assertEquals(IOption.INCLUDE_PATH, subOpts[0].getValueType());
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/ChangeLog,v
retrieving revision 1.11
diff -u -r1.11 ChangeLog
--- ChangeLog	1 Oct 2003 14:25:35 -0000	1.11
+++ ChangeLog	1 Oct 2003 23:36:37 -0000
@@ -1,3 +1,30 @@
+2003-10-01 Sean Evoy
+	Fix for bugs 43490 (trivial), 44020, and 43980.
+	Added a new field to the schema for a tool. The attribute manages a list of 
+	project natures that the tool should be filtered against in the build model 
+	and UI.
+	* schema/ManagedBuildTools.exsd
+	
+	Updated the ITool interface and its mplementors to pay attention to this new 
+	attribute when loading from a plugin file. Clients can querry for a numeric 
+	constant indicating the filter.
+	* src/org/eclipse/cdt/managedbuilder/core/ITool.java
+	* src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
+	* src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java
+	
+	All the methods in managed build manager that access information stored in a tool 
+	first check that the tool is valid for the project nature.
+	*  src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java
+	
+	Put a safety check in the option reference constructor when reading one in from 
+	a project file. I the option reference is to an option not managed by the build 
+	model, the constructor does not add itself to the runtime representation of the 
+	model.
+	* src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java
+
+	In preparation for 44020, each new target created is assigned a truly random ID.
+	* src/org/eclipse/cdt/managedbuilder/internal/core/Target.java
+
 2003-09-30 Sean Evoy
 	Fix for bug 41826.
 	
Index: schema/ManagedBuildTools.exsd
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd,v
retrieving revision 1.5
diff -u -r1.5 ManagedBuildTools.exsd
--- schema/ManagedBuildTools.exsd	1 Oct 2003 14:25:35 -0000	1.5
+++ schema/ManagedBuildTools.exsd	1 Oct 2003 23:36:37 -0000
@@ -118,6 +118,23 @@
                </documentation>
             </annotation>
          </attribute>
+         <attribute name="natureFilter" use="required">
+            <annotation>
+               <documentation>
+                  Filter the display (and use) of the tool by the nature of the project. Selecting a value of &apos;cnature&apos; insures that the tool will be displayed IFF there is a cnature associated with the project. A ccnature will filter this tool out. If &apos;ccnature&apos; is selected, the tool will only be available for C++ projects. If &apos;both&apos; is selected, the tool will be displayed when either nature is present.
+               </documentation>
+            </annotation>
+            <simpleType>
+               <restriction base="string">
+                  <enumeration value="cnature">
+                  </enumeration>
+                  <enumeration value="ccnature">
+                  </enumeration>
+                  <enumeration value="both">
+                  </enumeration>
+               </restriction>
+            </simpleType>
+         </attribute>
       </complexType>
    </element>
 
Index: src/org/eclipse/cdt/managedbuilder/core/ITool.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITool.java,v
retrieving revision 1.2
diff -u -r1.2 ITool.java
--- src/org/eclipse/cdt/managedbuilder/core/ITool.java	1 Oct 2003 14:25:35 -0000	1.2
+++ src/org/eclipse/cdt/managedbuilder/core/ITool.java	1 Oct 2003 23:36:37 -0000
@@ -15,8 +15,9 @@
  */
 public interface ITool extends IBuildObject {
 	// Schema element names
-	public static final String TOOL_ELEMENT_NAME = "tool";	//$NON-NLS-1$
 	public static final String COMMAND = "command";	//$NON-NLS-1$
+	public static final String INTERFACE_EXTS = "headerExtensions";	//$NON-NLS-1$
+	public static final String NATURE =	"natureFilter";	//$NON-NLS-1$
 	public static final String OPTION = "option";	//$NON-NLS-1$
 	public static final String OPTION_CAT = "optionCategory";	//$NON-NLS-1$
 	public static final String OPTION_REF = "optionReference";	//$NON-NLS-1$
@@ -24,8 +25,12 @@
 	public static final String OUTPUT_PREFIX = "outputPrefix";	//$NON-NLS-1$
 	public static final String OUTPUTS = "outputs";	//$NON-NLS-1$
 	public static final String SOURCES = "sources";	//$NON-NLS-1$
-	public static final String INTERFACE_EXTS = "headerExtensions";	//$NON-NLS-1$
+	public static final String TOOL_ELEMENT_NAME = "tool";	//$NON-NLS-1$
 	public static final String WHITE_SPACE = " ";	//$NON-NLS-1$
+	
+	public static final int FILTER_C = 0;
+	public static final int FILTER_CC = 1;
+	public static final int FILTER_BOTH = 2;
 
 	/**
 	 * Return <code>true</code> if the receiver builds files with the
@@ -35,6 +40,25 @@
 	 * @return boolean
 	 */
 	public boolean buildsFileType(String extension);
+	
+	/**
+	 * Answers a constant corresponding to the project nature the tool should be used 
+	 * for. Possible answers are:
+	 *  
+	 * <dl>
+	 * <dt>ITool.FILTER_C
+	 * <dd>The tool should only be displayed for C projects. <i>Notes:</i> even 
+	 * though a C++ project has a C nature, this flag will mask the tool for C++ 
+	 * projects. 
+	 * <dt>ITool.FILTER_CC
+	 * <dd>The tool should only be displayed for C++ projects.
+	 * <dt>ITool.FILTER_BOTH
+	 * <dd>The tool should be displayed for projects with both natures.
+	 * </dl>
+	 * 
+	 * @return int
+	 */
+	public int getNatureFilter();
 
 	/**
 	 * Get a particular option.
Index: src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java,v
retrieving revision 1.3
diff -u -r1.3 Configuration.java
--- src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java	29 Sep 2003 01:42:26 -0000	1.3
+++ src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java	1 Oct 2003 23:36:37 -0000
@@ -15,12 +15,16 @@
 import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.cdt.core.CCProjectNature;
+import org.eclipse.cdt.core.CProjectNature;
 import org.eclipse.cdt.managedbuilder.core.BuildException;
 import org.eclipse.cdt.managedbuilder.core.IConfiguration;
 import org.eclipse.cdt.managedbuilder.core.IOption;
 import org.eclipse.cdt.managedbuilder.core.ITarget;
 import org.eclipse.cdt.managedbuilder.core.ITool;
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -189,8 +193,50 @@
 			? parent.getTools()
 			: target.getTools();
 		
+		// Validate that the tools correspond to the nature
+		IProject project = (IProject)target.getOwner();
+		if (project != null) {
+			List validTools = new ArrayList();
+			
+			// The target is associated with a real project
+			for (int i = 0; i < tools.length; ++i) {
+				ITool tool = tools[i];
+				// Make sure the tool filter and project nature agree
+				switch (tool.getNatureFilter()) {
+					case ITool.FILTER_C:
+						try {
+							if (project.hasNature(CProjectNature.C_NATURE_ID) && !project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+								validTools.add(tool);
+							}
+						} catch (CoreException e) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_CC:
+						try {
+							if (project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+								validTools.add(tool);
+							}
+						} catch (CoreException e) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_BOTH:
+						validTools.add(tool);
+						break;
+				} 
+			}
+			// Now put the valid tools back into the array
+			tools = (ITool[]) validTools.toArray(new ITool[validTools.size()]);			
+		}
+		
 		// Replace tools with local overrides
 		for (int i = 0; i < tools.length; ++i) {
+			ITool tool = tools[i];
+			if (tool == null) {
+				// May have been filtered out
+				continue;
+			}
 			ToolReference ref = getToolReference(tools[i]);
 			if (ref != null)
 				tools[i] = ref;
Index: src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java,v
retrieving revision 1.6
diff -u -r1.6 ManagedBuildInfo.java
--- src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java	1 Oct 2003 14:25:35 -0000	1.6
+++ src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java	1 Oct 2003 23:36:37 -0000
@@ -25,8 +25,12 @@
 import org.eclipse.cdt.managedbuilder.core.IOption;
 import org.eclipse.cdt.managedbuilder.core.ITarget;
 import org.eclipse.cdt.managedbuilder.core.ITool;
+import org.eclipse.cdt.core.CCProjectNature;
+import org.eclipse.cdt.core.CProjectNature;
 import org.eclipse.cdt.core.parser.IScannerInfo;
+import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.w3c.dom.Document;
@@ -34,7 +38,8 @@
 import org.w3c.dom.Node;
 
 public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo {
-
+	
+	// Local variables
 	private boolean isDirty;
 	private IResource owner;
 	private Map targetMap;
@@ -97,13 +102,32 @@
 	 * @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#buildsFileType(java.lang.String)
 	 */
 	public boolean buildsFileType(String srcExt) {
+		// Make sure the owner is treated as a project for the duration
+		IProject project = (IProject)owner;
+
 		// Check to see if there is a rule to build a file with this extension
 		IConfiguration config = getDefaultConfiguration(getDefaultTarget());
 		ITool[] tools = config.getTools();
 		for (int index = 0; index < tools.length; index++) {
 			ITool tool = tools[index];
-			if (tool.buildsFileType(srcExt)) {
-				return true;
+			try {
+				// Make sure the tool is right for the project
+				switch (tool.getNatureFilter()) {
+					case ITool.FILTER_C:
+						if (project.hasNature(CProjectNature.C_NATURE_ID) && !project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							return tool.buildsFileType(srcExt);
+						}
+						break;
+					case ITool.FILTER_CC:
+						if (project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							return tool.buildsFileType(srcExt);
+						}
+						break;
+					case ITool.FILTER_BOTH:
+						return tool.buildsFileType(srcExt);
+				}
+			} catch (CoreException e) {
+				continue;
 			}
 		}
 		return false;
@@ -183,12 +207,33 @@
 	 * @see org.eclipse.cdt.core.build.managed.IScannerInfo#getDefinedSymbols()
 	 */
 	public Map getDefinedSymbols() {
+		IProject project = (IProject)owner;
 		// Return the defined symbols for the default configuration
 		HashMap symbols = new HashMap();
 		IConfiguration config = getDefaultConfiguration(getDefaultTarget());
 		ITool[] tools = config.getTools();
 		for (int i = 0; i < tools.length; i++) {
 			ITool tool = tools[i];
+			try {
+				// Make sure the tool is right for the project
+				switch (tool.getNatureFilter()) {
+					case ITool.FILTER_C:
+						if (!project.hasNature(CProjectNature.C_NATURE_ID) || project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_CC:
+						if (!project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_BOTH:
+						break;
+				}
+			} catch (CoreException e) {
+				continue;
+			}
+			// Now extract the valid tool's options
 			IOption[] opts = tool.getOptions();
 			for (int j = 0; j < opts.length; j++) {
 				IOption option = opts[j];
@@ -229,20 +274,36 @@
 	 * @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#getFlagsForSource(java.lang.String)
 	 */
 	public String getFlagsForSource(String extension) {
+		IProject project = (IProject)owner;
+
 		// Get all the tools for the current config
 		IConfiguration config = getDefaultConfiguration(getDefaultTarget());
 		ITool[] tools = config.getTools();
 		for (int index = 0; index < tools.length; index++) {
 			ITool tool = tools[index];
 			if (tool.buildsFileType(extension)) {
-				String flags = new String();
 				try {
-					flags = tool.getToolFlags();
+					// Make sure the tool is right for the project
+					switch (tool.getNatureFilter()) {
+						case ITool.FILTER_C:
+							if (project.hasNature(CProjectNature.C_NATURE_ID) && !project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+								return tool.getToolFlags();
+							}
+							break;
+						case ITool.FILTER_CC:
+							if (project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+								return tool.getToolFlags();
+							}
+							break;
+						case ITool.FILTER_BOTH:
+							return tool.getToolFlags();
+					}
+				} catch (CoreException e) {
+					continue;
 				} catch (BuildException e) {
 					// Give it your best shot with the next tool
 					continue;
 				}
-				return flags;
 			}
 		}
 		return null;
@@ -252,8 +313,9 @@
 	 * @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#getToolFlags(java.lang.String)
 	 */
 	public String getFlagsForTarget(String extension) {
+		IProject project = (IProject)owner;
 		// Treat null extensions as an empty string
-		String ext = extension == null ? new String()  :  extension;
+		String ext = extension == null ? new String() : extension;
 		
 		// Get all the tools for the current config
 		IConfiguration config = getDefaultConfiguration(getDefaultTarget());
@@ -261,14 +323,28 @@
 		for (int index = 0; index < tools.length; index++) {
 			ITool tool = tools[index];
 			if (tool.producesFileType(ext)) {
-				String flags = new String();
 				try {
-					flags = tool.getToolFlags();
+					// Make sure the tool is right for the project
+					switch (tool.getNatureFilter()) {
+						case ITool.FILTER_C:
+							if (project.hasNature(CProjectNature.C_NATURE_ID) && !project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+								return tool.getToolFlags();
+							}
+							break;
+						case ITool.FILTER_CC:
+							if (project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+								return tool.getToolFlags();
+							}
+							break;
+						case ITool.FILTER_BOTH:
+							return tool.getToolFlags();
+					}
+				} catch (CoreException e) {
+					continue;
 				} catch (BuildException e) {
-					// Somehow the model is out of sync for this item. Keep iterating
+					// Give it your best shot with the next tool
 					continue;
 				}
-				return flags;
 			}
 		}
 		return null;
@@ -278,6 +354,8 @@
 	 * @see org.eclipse.cdt.core.build.managed.IScannerInfo#getIncludePaths()
 	 */
 	public String[] getIncludePaths() {
+		IProject project = (IProject)owner;
+		
 		// Return the include paths for the default configuration
 		ArrayList paths = new ArrayList();
 		IConfiguration config = getDefaultConfiguration(getDefaultTarget());
@@ -285,6 +363,26 @@
 		ITool[] tools = config.getTools();
 		for (int i = 0; i < tools.length; i++) {
 			ITool tool = tools[i];
+			try {
+				// Make sure the tool is right for the project
+				switch (tool.getNatureFilter()) {
+					case ITool.FILTER_C:
+						if (!project.hasNature(CProjectNature.C_NATURE_ID) || project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_CC:
+						if (!project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_BOTH:
+						break;
+				}
+			} catch (CoreException e) {
+				continue;
+			}
+			// The tool checks out for this project, get its options
 			IOption[] opts = tool.getOptions();
 			for (int j = 0; j < opts.length; j++) {
 				IOption option = opts[j];
@@ -318,12 +416,34 @@
 	 * @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#getLibsForTarget(java.lang.String)
 	 */
 	public String[] getLibsForTarget(String extension) {
+		IProject project = (IProject)owner;
+		
 		ArrayList libs = new ArrayList();
 		// Get all the tools for the current config
 		IConfiguration config = getDefaultConfiguration(getDefaultTarget());
 		ITool[] tools = config.getTools();
 		for (int index = 0; index < tools.length; index++) {
 			ITool tool = tools[index];
+			try {
+				// Make sure the tool is right for the project
+				switch (tool.getNatureFilter()) {
+					case ITool.FILTER_C:
+						if (!project.hasNature(CProjectNature.C_NATURE_ID) || project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_CC:
+						if (!project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_BOTH:
+						break;
+				}
+			} catch (CoreException e) {
+				continue;
+			}
+			// The tool is OK for this project nature
 			if (tool.producesFileType(extension)) {
 				IOption[] opts = tool.getOptions();
 				// Look for the lib option type
@@ -398,14 +518,30 @@
 	 * @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#getOutputExtension(java.lang.String)
 	 */
 	public String getOutputExtension(String resourceExtension) {
+		IProject project = (IProject)owner;
 		// Get all the tools for the current config
 		IConfiguration config = getDefaultConfiguration(getDefaultTarget());
 		ITool[] tools = config.getTools();
 		for (int index = 0; index < tools.length; index++) {
 			ITool tool = tools[index];
-			String output = tool.getOutputExtension(resourceExtension);
-			if (output != null) {
-				return output;
+			try {
+				// Make sure the tool is right for the project
+				switch (tool.getNatureFilter()) {
+					case ITool.FILTER_C:
+						if (project.hasNature(CProjectNature.C_NATURE_ID) && !project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							return tool.getOutputExtension(resourceExtension);
+						}
+						break;
+					case ITool.FILTER_CC:
+						if (project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							return tool.getOutputExtension(resourceExtension);
+						}
+						break;
+					case ITool.FILTER_BOTH:
+						return tool.getOutputExtension(resourceExtension);
+				}
+			} catch (CoreException e) {
+				continue;
 			}
 		}
 		return null;
@@ -415,6 +551,7 @@
 	 * @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#getOutputFlag()
 	 */
 	public String getOutputFlag(String outputExt) {
+		IProject project = (IProject)owner;
 		// Treat null extension as an empty string
 		String ext = outputExt == null ? new String() : outputExt;
 		
@@ -424,6 +561,26 @@
 		ITool[] tools = config.getTools();
 		for (int index = 0; index < tools.length; index++) {
 			ITool tool = tools[index];
+			try {
+				// Make sure the tool is right for the project
+				switch (tool.getNatureFilter()) {
+					case ITool.FILTER_C:
+						if (!project.hasNature(CProjectNature.C_NATURE_ID) || project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_CC:
+						if (!project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_BOTH:
+						break;
+				}
+			} catch (CoreException e) {
+				continue;
+			}
+			// It's OK
 			if (tool.producesFileType(ext)) {
 				flags = tool.getOutputFlag();
 			}
@@ -435,6 +592,7 @@
 	 * @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#getOutputPrefix(java.lang.String)
 	 */
 	public String getOutputPrefix(String outputExtension) {
+		IProject project = (IProject)owner;
 		// Treat null extensions as empty string
 		String ext = outputExtension == null ? new String() : outputExtension;
 		
@@ -444,6 +602,25 @@
 		ITool[] tools = config.getTools();
 		for (int index = 0; index < tools.length; index++) {
 			ITool tool = tools[index];
+			try {
+				// Make sure the tool is right for the project
+				switch (tool.getNatureFilter()) {
+					case ITool.FILTER_C:
+						if (!project.hasNature(CProjectNature.C_NATURE_ID) || project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_CC:
+						if (!project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_BOTH:
+						break;
+				}
+			} catch (CoreException e) {
+				continue;
+			}
 			if (tool.producesFileType(ext)) {
 				flags = tool.getOutputPrefix();
 			}
@@ -473,13 +650,33 @@
 	 * @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#getToolForSource(java.lang.String)
 	 */
 	public String getToolForSource(String extension) {
+		IProject project = (IProject)owner;
+
 		// Get all the tools for the current config
 		IConfiguration config = getDefaultConfiguration(getDefaultTarget());
 		ITool[] tools = config.getTools();
 		for (int index = 0; index < tools.length; index++) {
 			ITool tool = tools[index];
 			if (tool.buildsFileType(extension)) {
-				return tool.getToolCommand();
+				try {
+					// Make sure the tool is right for the project
+					switch (tool.getNatureFilter()) {
+						case ITool.FILTER_C:
+							if (project.hasNature(CProjectNature.C_NATURE_ID) && !project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+								return tool.getToolCommand();
+							}
+							break;
+						case ITool.FILTER_CC:
+							if (project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+								return tool.getToolCommand();
+							}
+							break;
+						case ITool.FILTER_BOTH:
+							return tool.getToolCommand();
+					}
+				} catch (CoreException e) {
+					continue;
+				}
 			}
 		}
 		return null;
@@ -489,6 +686,8 @@
 	 * @see org.eclipse.cdt.core.build.managed.IManagedBuildInfo#getToolInvocation(java.lang.String)
 	 */
 	public String getToolForTarget(String extension) {
+		IProject project = (IProject)owner;
+
 		// Treat a null argument as an empty string
 		String ext = extension == null ? new String() : extension;
 		// Get all the tools for the current config
@@ -497,7 +696,25 @@
 		for (int index = 0; index < tools.length; index++) {
 			ITool tool = tools[index];
 			if (tool.producesFileType(ext)) {
-				return tool.getToolCommand();
+				try {
+					// Make sure the tool is right for the project
+					switch (tool.getNatureFilter()) {
+						case ITool.FILTER_C:
+							if (project.hasNature(CProjectNature.C_NATURE_ID) && !project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+								return tool.getToolCommand();
+							}
+							break;
+						case ITool.FILTER_CC:
+							if (project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+								return tool.getToolCommand();
+							}
+							break;
+						case ITool.FILTER_BOTH:
+							return tool.getToolCommand();
+					}
+				} catch (CoreException e) {
+					continue;
+				}
 			}
 		}
 		return null;
@@ -507,12 +724,33 @@
 	 * @see org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo#getUserObjectsForTarget(java.lang.String)
 	 */
 	public String[] getUserObjectsForTarget(String extension) {
+		IProject project = (IProject)owner;
 		ArrayList objs = new ArrayList();
 		// Get all the tools for the current config
 		IConfiguration config = getDefaultConfiguration(getDefaultTarget());
 		ITool[] tools = config.getTools();
 		for (int index = 0; index < tools.length; index++) {
 			ITool tool = tools[index];
+			try {
+				// Make sure the tool is right for the project
+				switch (tool.getNatureFilter()) {
+					case ITool.FILTER_C:
+						if (!project.hasNature(CProjectNature.C_NATURE_ID) || project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_CC:
+						if (!project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							continue;
+						}
+						break;
+					case ITool.FILTER_BOTH:
+						break;
+				}
+			} catch (CoreException e) {
+				continue;
+			}
+			// The tool is OK for this project nature
 			if (tool.producesFileType(extension)) {
 				IOption[] opts = tool.getOptions();
 				// Look for the user object option type
@@ -543,13 +781,31 @@
 	 * @see org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo#isHeaderFile(java.lang.String)
 	 */
 	public boolean isHeaderFile(String ext) {
+		IProject project = (IProject)owner;
+
 		// Check to see if there is a rule to build a file with this extension
 		IConfiguration config = getDefaultConfiguration(getDefaultTarget());
 		ITool[] tools = config.getTools();
 		for (int index = 0; index < tools.length; index++) {
 			ITool tool = tools[index];
-			if (tool.isHeaderFile(ext)) {
-				return true;
+			try {
+				// Make sure the tool is right for the project
+				switch (tool.getNatureFilter()) {
+					case ITool.FILTER_C:
+						if (project.hasNature(CProjectNature.C_NATURE_ID) && !project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							return tool.isHeaderFile(ext);
+						}
+						break;
+					case ITool.FILTER_CC:
+						if (project.hasNature(CCProjectNature.CC_NATURE_ID)) {
+							return tool.isHeaderFile(ext);
+						}
+						break;
+					case ITool.FILTER_BOTH:
+						return tool.isHeaderFile(ext);
+				}
+			} catch (CoreException e) {
+				continue;
 			}
 		}
 		return false;
Index: src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java,v
retrieving revision 1.3
diff -u -r1.3 OptionReference.java
--- src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java	26 Sep 2003 19:54:24 -0000	1.3
+++ src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java	1 Oct 2003 23:36:38 -0000
@@ -120,6 +120,12 @@
 		this.owner = owner;	
 		option = owner.getTool().getOption(element.getAttribute(ID));
 		
+		// Bail now if there's no option for the reference
+		if (option == null) {
+			return;
+		}
+		
+		// Hook the reference up		
 		owner.addOptionReference(this);
 
 		// value
Index: src/org/eclipse/cdt/managedbuilder/internal/core/Target.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java,v
retrieving revision 1.4
diff -u -r1.4 Target.java
--- src/org/eclipse/cdt/managedbuilder/internal/core/Target.java	26 Sep 2003 00:20:12 -0000	1.4
+++ src/org/eclipse/cdt/managedbuilder/internal/core/Target.java	1 Oct 2003 23:36:38 -0000
@@ -16,6 +16,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Random;
 import java.util.StringTokenizer;
 
 import org.eclipse.cdt.managedbuilder.core.IConfiguration;
@@ -66,7 +67,13 @@
 		
 		// Copy the parent's identity
 		this.parent = parent;
-		setId(parent.getId() + ".1");		
+		Random r = new Random();
+		r.setSeed(System.currentTimeMillis());
+		int id = r.nextInt();
+		if (id < 0) {
+			id *= -1;
+		}
+		setId(owner.getName() + "." + parent.getId() + "." + id);		
 		setName(parent.getName());
 		this.artifactName = parent.getArtifactName();
 		this.binaryParserId = parent.getBinaryParserId();
Index: src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java,v
retrieving revision 1.3
diff -u -r1.3 Tool.java
--- src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java	1 Oct 2003 14:25:35 -0000	1.3
+++ src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java	1 Oct 2003 23:36:38 -0000
@@ -41,6 +41,7 @@
 	private String command;
 	private List inputExtensions;
 	private List interfaceExtensions;
+	private int natureFilter;
 	private Map optionMap;
 	private List options;
 	private String outputExtension;
@@ -71,6 +72,18 @@
 		// name
 		setName(element.getAttribute(ITool.NAME));
 		
+		// Get the nature filter
+		String nature = element.getAttribute(NATURE);
+		if (nature == null || "both".equals(nature)) {
+			natureFilter = FILTER_BOTH;
+		} else if ("cnature".equals(nature)) {
+			natureFilter = FILTER_C;
+		} else if ("ccnature".equals(nature)) {
+			natureFilter = FILTER_CC;
+		} else {
+			natureFilter = FILTER_BOTH;
+		}
+		
 		// Get the supported input file extension
 		String inputs = element.getAttribute(ITool.SOURCES) == null ? 
 			new String() : 
@@ -348,6 +361,13 @@
 
 		myOptions.trimToSize();
 		return (IOption[])myOptions.toArray(new IOption[myOptions.size()]);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.managedbuilder.core.ITool#getNatureFilter()
+	 */
+	public int getNatureFilter() {
+		return natureFilter;
 	}
 
 	/* (non-Javadoc)
Index: src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java,v
retrieving revision 1.3
diff -u -r1.3 ToolReference.java
--- src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java	1 Oct 2003 14:25:35 -0000	1.3
+++ src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java	1 Oct 2003 23:36:38 -0000
@@ -232,6 +232,7 @@
 	 * @see org.eclipse.cdt.core.build.managed.ITool#getOutputFlag()
 	 */
 	public String getOutputFlag() {
+		// The tool reference does not override this value
 		return parent.getOutputFlag();
 	}
 
@@ -239,6 +240,7 @@
 	 * @see org.eclipse.cdt.core.build.managed.ITool#getOutputPrefix()
 	 */
 	public String getOutputPrefix() {
+		// The tool reference does not override this value
 		return parent.getOutputPrefix();
 	}
 
@@ -253,6 +255,7 @@
 	 * @see org.eclipse.cdt.core.build.managed.ITool#getTopOptionCategory()
 	 */
 	public IOptionCategory getTopOptionCategory() {
+		// The tool reference does not override this value
 		return parent.getTopOptionCategory();
 	}
 
@@ -260,6 +263,7 @@
 	 * @see org.eclipse.cdt.managedbuilder.core.ITool#isHeaderFile(java.lang.String)
 	 */
 	public boolean isHeaderFile(String ext) {
+		// The tool reference does not override this value
 		return parent.isHeaderFile(ext);
 	}
 
@@ -267,6 +271,7 @@
 	 * @see org.eclipse.cdt.core.build.managed.ITool#producesFileType(java.lang.String)
 	 */
 	public boolean producesFileType(String outputExtension) {
+		// The tool reference does not override this value
 		return parent.producesFileType(outputExtension);
 	}
 
@@ -279,6 +284,7 @@
 	 * @see org.eclipse.cdt.core.build.managed.IBuildObject#getId()
 	 */
 	public String getId() {
+		// The tool reference does not override this value
 		return parent.getId();
 	}
 
@@ -286,23 +292,17 @@
 	 * @see org.eclipse.cdt.core.build.managed.IBuildObject#getName()
 	 */
 	public String getName() {
+		// The tool reference does not override this value
 		return parent.getName();
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.core.build.managed.IBuildObject#setId(java.lang.String)
-	 */
-	public void setId(String id) {
-		// Not allowed
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.core.build.managed.IBuildObject#setName(java.lang.String)
+	/**
+	 * Answers <code>true</code> if the reference is a reference to the 
+	 * tool specified in the argument.
+	 * 
+	 * @param target the tool that should be tested
+	 * @return boolean
 	 */
-	public void setName(String name) {
-		// Not allowed
-	}
-
 	public boolean references(ITool target) {
 		if (equals(target)) {
 			// we are the target
@@ -367,10 +367,19 @@
 	 * @see org.eclipse.cdt.core.build.managed.ITool#handlesFileType(java.lang.String)
 	 */
 	public boolean buildsFileType(String extension) {
+		// The tool reference does not override this value
 		return parent.buildsFileType(extension);
 	}
 
 	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.managedbuilder.core.ITool#getNatureFilter()
+	 */
+	public int getNatureFilter() {
+		// The tool reference does not override this value
+		return parent.getNatureFilter();
+	}
+
+	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.core.build.managed.ITool#getOption(java.lang.String)
 	 */
 	public IOption getOption(String id) {
@@ -382,6 +391,7 @@
 	 * @see org.eclipse.cdt.core.build.managed.ITool#getOutput(java.lang.String)
 	 */
 	public String getOutputExtension(String inputExtension) {
+		// The tool reference does not override this value
 		return parent.getOutputExtension(inputExtension);
 	}
 
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.ui/ChangeLog,v
retrieving revision 1.7
diff -u -r1.7 ChangeLog
--- ChangeLog	1 Oct 2003 14:25:31 -0000	1.7
+++ ChangeLog	1 Oct 2003 23:36:58 -0000
@@ -1,3 +1,19 @@
+2003-10-01 Sean Evoy
+	Fix for bugs 43490 (trivial), 44020, and 43980.
+	A massive change has occurred in the plugin file. I added new C tools that apply 
+	only to projects with C natures. I also added option overrides in the default 
+	configurations for these new tools. The trivial fix for the new C project wizard 
+	involved changing the icon entry in the plugin file.
+	* plugin.xml
+
+	In preparation for 44020, each new configuration created is assigned a truly 
+	random ID.
+	* src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java
+	* src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java
+	
+	Removed a tooltip that was not being populated properly.
+	* src/org/eclipse/cdt/managedbuilder/ui/wizards/CProjectPlatformPage.java
+
 2003-09-30 Sean Evoy
 	Fix for bug 41826.
 
Index: plugin.properties
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.ui/plugin.properties,v
retrieving revision 1.4
diff -u -r1.4 plugin.properties
--- plugin.properties	26 Sep 2003 19:54:33 -0000	1.4
+++ plugin.properties	1 Oct 2003 23:36:58 -0000
@@ -11,9 +11,11 @@
 ConfigName.Rel=Release
 ConfigName.Dbg=Debug
 ToolName.preprocessor = Preprocessor
-ToolName.compiler = Compiler
+ToolName.compiler.c = C Compiler
+ToolName.compiler.cpp = C++ Compiler
 ToolName.archiver = Archiver
-ToolName.linker = Linker
+ToolName.linker.c = C Linker
+ToolName.linker.cpp = C++ Linker
 OptionCategory.Preproc = Preprocessor
 OptionCategory.Dirs = Directories
 OptionCategory.General = General
@@ -36,6 +38,7 @@
 
 Option.Posix.Verbose=Verbose (-v)
 Option.OtherFlags=Other flags
+Option.Posix.Ansi=Support ANSI programs (-ansi)
 
 Option.Posix.Linker.NoStartFiles=Do not use standard start files (-nostartfiles)
 Option.Posix.Linker.NoDefLibs=Do not use default libraries (-nodefaultlibs)
Index: plugin.xml
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.ui/plugin.xml,v
retrieving revision 1.9
diff -u -r1.9 plugin.xml
--- plugin.xml	1 Oct 2003 20:21:51 -0000	1.9
+++ plugin.xml	1 Oct 2003 23:36:59 -0000
@@ -37,7 +37,7 @@
       </wizard>
       <wizard
             name="%MngCWizard.name"
-            icon="icons/full/wizban/newmngcc_app.gif"
+            icon="icons/full/wizban/newmngc_app.gif"
             category="org.eclipse.cdt.ui.newCWizards"
             class="org.eclipse.cdt.managedbuilder.ui.wizards.NewManagedCProjectWizard"
             project="true"
@@ -77,52 +77,46 @@
             makeFlags="-k"
             osList="win32">
          <tool
-               sources="c,cc,cpp,cxx,C"
-               name="%ToolName.compiler"
-               headerExtensions="h,H,hpp"
+               natureFilter="cnature"
+               sources="c"
+               name="%ToolName.compiler.c"
+               headerExtensions="h"
                outputFlag="-o"
                outputs="o"
-               command="g++"
-               id="org.eclipse.cdt.build.tool.cygwin.compiler">
+               command="gcc"
+               id="cdt.build.tool.cygwin.gnu.c.compiler">
             <optionCategory
-                  owner="org.eclipse.cdt.build.tool.cygwin.compiler"
+                  owner="cdt.build.tool.cygwin.gnu.c.compiler"
                   name="%OptionCategory.Preproc"
-                  id="cygwin.compiler.category.preprocessor">
+                  id="cygwin.gnu.c.compiler.category.preprocessor">
             </optionCategory>
             <option
                   defaultValue="false"
                   name="%Option.Posix.Nostdinc"
-                  category="cygwin.compiler.category.preprocessor"
+                  category="cygwin.gnu.c.compiler.category.preprocessor"
                   command="-nostdinc"
                   valueType="boolean"
-                  id="cygwin.gnu.compiler.preprocessor.nostdinc">
+                  id="cygwin.gnu.c.compiler.preprocessor.nostdinc">
             </option>
             <option
                   defaultValue="false"
                   name="%Option.Posix.PreprocOnly"
-                  category="cygwin.compiler.category.preprocessor"
+                  category="cygwin.gnu.c.compiler.category.preprocessor"
                   command="-E"
                   valueType="boolean"
-                  id="cygwin.gnu.compiler.preprocessor.preprocess">
-            </option>
-            <option
-                  name="Answers (-A)"
-                  category="cygwin.compiler.category.preprocessor"
-                  command="-A"
-                  valueType="stringList"
-                  id="cygwin.gnu.preprocessor.answers">
+                  id="cygwin.gnu.c.compiler.preprocessor.preprocess">
             </option>
             <optionCategory
-                  owner="org.eclipse.cdt.build.tool.cygwin.compiler"
+                  owner="cdt.build.tool.cygwin.gnu.c.compiler"
                   name="Symbols"
-                  id="cygwin.gnu.compiler.category.symbols">
+                  id="cygwin.gnu.c.compiler.category.symbols">
             </optionCategory>
             <option
                   name="%Option.Posix.DefSym"
-                  category="cygwin.gnu.compiler.category.symbols"
+                  category="cygwin.gnu.c.compiler.category.symbols"
                   command="-D"
                   valueType="definedSymbols"
-                  id="cygwin.preprocessor.def.symbols">
+                  id="cygwin.gnu.c.preprocessor.def.symbols">
                <listOptionValue
                      value="_X86_=1"
                      builtIn="true">
@@ -214,380 +208,951 @@
             </option>
             <option
                   name="%Option.Posix.UndefSym"
-                  category="cygwin.gnu.compiler.category.symbols"
+                  category="cygwin.gnu.c.compiler.category.symbols"
                   command="-U"
                   valueType="stringList"
-                  id="cygwin.preprocessor.undef.symbol">
+                  id="cygwin.gnu.c.preprocessor.undef.symbol">
             </option>
             <optionCategory
-                  owner="org.eclipse.cdt.build.tool.cygwin.compiler"
+                  owner="cdt.build.tool.cygwin.gnu.c.compiler"
                   name="%OptionCategory.Dirs"
-                  id="cygwin.gnu.compiler.category.dirs">
+                  id="cygwin.gnu.c.compiler.category.dirs">
             </optionCategory>
             <option
                   name="Include Paths"
-                  category="cygwin.gnu.compiler.category.dirs"
+                  category="cygwin.gnu.c.compiler.category.dirs"
                   command="-I"
                   valueType="includePath"
-                  id="cygwin.compiler.general.include.paths">
+                  id="cygwin.gnu.c.compiler.general.include.paths">
                <listOptionValue
                      value="C:\cygwin\usr\include\w32api"
                      builtIn="true">
                </listOptionValue>
             </option>
             <optionCategory
-                  owner="org.eclipse.cdt.build.tool.cygwin.compiler"
+                  owner="cdt.build.tool.cygwin.gnu.c.compiler"
                   name="%OptionCategory.Optimize"
-                  id="cygwin.gnu.compiler.category.optimization">
+                  id="cygwin.gnu.c.compiler.category.optimization">
             </optionCategory>
             <option
                   name="Optimization Level"
-                  category="cygwin.gnu.compiler.category.optimization"
+                  category="cygwin.gnu.c.compiler.category.optimization"
                   valueType="enumerated"
-                  id="cygwin.compiler.general.optimization.level">
+                  id="cygwin.gnu.c.compiler.general.optimization.level">
                <enumeratedOptionValue
                      name="%Option.Posix.Optimize.None"
                      isDefault="false"
                      command="-O0"
-                     id="cygwin.optimization.level.none">
+                     id="cygwin.gnu.c.optimization.level.none">
                </enumeratedOptionValue>
                <enumeratedOptionValue
                      name="%Option.Posix.Optimize.Optimize"
                      command="-O1"
-                     id="cygwin.optimization.level.optimize">
+                     id="cygwin.gnu.c.optimization.level.optimize">
                </enumeratedOptionValue>
                <enumeratedOptionValue
                      name="%Option.Posix.Optimize.More"
                      isDefault="true"
                      command="-O2"
-                     id="cygwin.optimization.level.more">
+                     id="cygwin.gnu.c.optimization.level.more">
                </enumeratedOptionValue>
                <enumeratedOptionValue
                      name="%Option.Posix.Optimize.Most"
                      command="-O3"
-                     id="cygwin.optimization.level.most">
+                     id="cygwin.gnu.c.optimization.level.most">
                </enumeratedOptionValue>
             </option>
             <option
                   name="Other optimization flags"
-                  category="cygwin.gnu.compiler.category.optimization"
+                  category="cygwin.gnu.c.compiler.category.optimization"
                   valueType="string"
-                  id="cygwin.compiler.optimization.flags">
+                  id="cygwin.gnu.c.compiler.optimization.flags">
             </option>
             <optionCategory
-                  owner="org.eclipse.cdt.build.tool.cygwin.compiler"
+                  owner="cdt.build.tool.cygwin.gnu.c.compiler"
                   name="%OptionCategory.Debug"
-                  id="cygwin.gnu.compiler.category.debug">
+                  id="cygwin.gnu.c.compiler.category.debug">
             </optionCategory>
             <option
                   name="Debug Level"
-                  category="cygwin.gnu.compiler.category.debug"
+                  category="cygwin.gnu.c.compiler.category.debug"
                   valueType="enumerated"
-                  id="cygwin.compiler.debugging.level">
+                  id="cygwin.c.compiler.debugging.level">
                <enumeratedOptionValue
                      name="None"
                      isDefault="false"
-                     id="cygwin.debugging.level.none">
+                     id="cygwin.gnu.c.debugging.level.none">
                </enumeratedOptionValue>
                <enumeratedOptionValue
                      name="Minimal (-g1)"
                      command="-g1"
-                     id="cygwin.debugging.level.minimal">
+                     id="cygwin.gnu.c.debugging.level.minimal">
                </enumeratedOptionValue>
                <enumeratedOptionValue
                      name="Default (-g)"
                      isDefault="true"
                      command="-g"
-                     id="cygwin.debugging.level.default">
+                     id="cygwin.gnu.c.debugging.level.default">
                </enumeratedOptionValue>
                <enumeratedOptionValue
                      name="Maximum (-g3)"
                      isDefault="false"
                      command="-g3"
-                     id="cygwin.debugging.level.max">
+                     id="cygwin.gnu.c.debugging.level.max">
                </enumeratedOptionValue>
             </option>
             <option
+                  defaultValue="-gstabs"
                   name="Other debugging flags"
-                  category="cygwin.gnu.compiler.category.debug"
+                  category="cygwin.gnu.c.compiler.category.debug"
                   valueType="string"
-                  id="cygwin.gnu.compiler.debugging.other">
+                  id="cygwin.gnu.c.compiler.debugging.other">
             </option>
             <option
                   defaultValue="false"
-                  name="Generate prof information (-p)"
-                  category="cygwin.gnu.compiler.category.debug"
-                  command="-p"
+                  name="Generate gprof information (-pg)"
+                  category="cygwin.gnu.c.compiler.category.debug"
+                  command="-pg"
                   valueType="boolean"
-                  id="cygwin.gnu.compiler.debugging.prof">
+                  id="cygwin.gnu.c.compiler.debugging.gprof">
             </option>
             <option
                   defaultValue="false"
-                  name="Generate gprof information (-pg)"
-                  category="cygwin.gnu.compiler.category.debug"
-                  command="-pg"
+                  name="Generate prof information (-p)"
+                  category="cygwin.gnu.c.compiler.category.debug"
+                  command="-p"
                   valueType="boolean"
-                  id="cygwin.gnu.compiler.debugging.gprof">
+                  id="cygwin.gnu.c.compiler.debugging.prof">
             </option>
             <optionCategory
-                  owner="org.eclipse.cdt.build.tool.cygwin.compiler"
+                  owner="cdt.build.tool.cygwin.gnu.c.compiler"
                   name="%OptionCategory.Warn"
-                  id="cygwin.compiler.category.warnings">
+                  id="cygwin.c.compiler.category.warnings">
             </optionCategory>
             <option
                   defaultValue="false"
                   name="Check syntax only (-fsyntax-only)"
-                  category="cygwin.compiler.category.warnings"
+                  category="cygwin.c.compiler.category.warnings"
                   command="-fsyntax-only"
                   valueType="boolean"
-                  id="cygwin.gnu.compiler.warnings.syntax">
+                  id="cygwin.gnu.c.compiler.warnings.syntax">
             </option>
             <option
                   defaultValue="false"
                   name="Pedantic (-pedantic)"
-                  category="cygwin.compiler.category.warnings"
+                  category="cygwin.c.compiler.category.warnings"
                   command="-pedantic"
                   valueType="boolean"
-                  id="cygwin.gnu.compiler.warnings.pedantic">
+                  id="cygwin.gnu.c.compiler.warnings.pedantic">
             </option>
             <option
                   defaultValue="false"
                   name="Pedantic warnings as errors (-pedantic-errors)"
-                  category="cygwin.compiler.category.warnings"
+                  category="cygwin.c.compiler.category.warnings"
                   command="-pedantic-errors"
                   valueType="boolean"
-                  id="cygwin.gnu.compiler.warnings.pedantic.error">
+                  id="cygwin.gnu.c.compiler.warnings.pedantic.error">
             </option>
             <option
                   defaultValue="false"
                   name="Inhibit all warnings (-w)"
-                  category="cygwin.compiler.category.warnings"
+                  category="cygwin.c.compiler.category.warnings"
                   command="-w"
                   valueType="boolean"
-                  id="cygwin.gnu.compiler.warnings.nowarn">
+                  id="cygwin.gnu.c.compiler.warnings.nowarn">
             </option>
             <option
                   defaultValue="true"
                   name="All warnings (-Wall)"
-                  category="cygwin.compiler.category.warnings"
+                  category="cygwin.c.compiler.category.warnings"
                   command="-Wall"
                   valueType="boolean"
-                  id="cygwin.gnu.compiler.warnings.allwarn">
+                  id="cygwin.gnu.c.compiler.warnings.allwarn">
             </option>
             <option
                   defaultValue="false"
                   name="Warnings as errors (-werror)"
-                  category="cygwin.compiler.category.warnings"
+                  category="cygwin.c.compiler.category.warnings"
                   command="-werror"
                   valueType="boolean"
-                  id="cygwin.gnu.compiler.warnings.toerrors">
+                  id="cygwin.gnu.c.compiler.warnings.toerrors">
             </option>
             <optionCategory
-                  owner="cdt.build.tool.linux.gnu.compiler"
+                  owner="cdt.build.tool.cygwin.gnu.c.compiler"
                   name="%OptionCategory.Misc"
-                  id="cygwin.compiler.category.other">
+                  id="cygwin.c.compiler.category.other">
             </optionCategory>
             <option
                   defaultValue="-c"
                   name="%Option.OtherFlags"
-                  category="cygwin.compiler.category.other"
+                  category="cygwin.c.compiler.category.other"
                   valueType="string"
-                  id="cygwin.compiler.misc.other">
+                  id="cygwin.gnu.c.compiler.misc.other">
             </option>
             <option
                   defaultValue="false"
                   name="%Option.Posix.Verbose"
-                  category="cygwin.compiler.category.other"
+                  category="cygwin.c.compiler.category.other"
                   command="-v"
                   valueType="boolean"
-                  id="cygwin.compiler.misc.verbose">
+                  id="cygwin.gnu.c.compiler.misc.verbose">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Ansi"
+                  category="cygwin.c.compiler.category.other"
+                  command="-ansi"
+                  valueType="boolean"
+                  id="cygwin.gnu.c.compiler.misc.ansi">
             </option>
          </tool>
-      </target>
-      <target
-            isTest="false"
-            name="Cygwin Executable"
-            parent="cygwin"
-            binaryParser="org.eclipse.cdt.core.PE"
-            defaultExtension="exe"
-            isAbstract="false"
-            id="cygwin.exec">
-         <configuration
-               name="%ConfigName.Rel"
-               id="cygwin.exec.release">
-            <toolReference
-                  id="org.eclipse.cdt.build.tool.cygwin.compiler">
-               <optionReference
-                     defaultValue="Optimize most (-O3)"
-                     command="-O3"
-                     id="cygwin.compiler.general.optimization.level">
-               </optionReference>
-               <optionReference
-                     defaultValue="None"
-                     id="cygwin.compiler.debugging.level">
-               </optionReference>
-            </toolReference>
-         </configuration>
-         <configuration
-               name="%ConfigName.Dbg"
-               id="cygwin.exec.debug">
-            <toolReference
-                  id="org.eclipse.cdt.build.tool.cygwin.compiler">
-               <optionReference
-                     defaultValue="None (-O0)"
-                     command="-O0"
-                     id="cygwin.compiler.general.optimization.level">
-               </optionReference>
-               <optionReference
-                     defaultValue="Maximum (-g3)"
-                     command="-g3"
-                     id="cygwin.compiler.debugging.level">
-               </optionReference>
-            </toolReference>
-         </configuration>
          <tool
-               name="%ToolName.linker"
+               natureFilter="ccnature"
+               sources="c,cc,cpp,cxx,C"
+               name="%ToolName.compiler.cpp"
+               headerExtensions="h,H,hpp"
                outputFlag="-o"
-               outputs="exe"
+               outputs="o"
                command="g++"
-               id="org.eclipse.cdt.build.tool.cygwin.link">
+               id="org.eclipse.cdt.build.tool.cygwin.compiler">
             <optionCategory
-                  owner="org.eclipse.cdt.build.tool.cygwin.link"
-                  name="%OptionCategory.General"
-                  id="cygwin.linker.category.general">
+                  owner="org.eclipse.cdt.build.tool.cygwin.compiler"
+                  name="%OptionCategory.Preproc"
+                  id="cygwin.compiler.category.preprocessor">
             </optionCategory>
             <option
                   defaultValue="false"
-                  name="%Option.Posix.Linker.NoStartFiles"
-                  category="cygwin.linker.category.general"
-                  command="-nostartfiles"
-                  valueType="boolean"
-                  id="linux.gnu.linker.options.nostart">
-            </option>
-            <option
-                  defaultValue="false"
-                  name="%Option.Posix.Linker.NoDefLibs"
-                  category="cygwin.linker.category.general"
-                  command="-nodefaultlibs"
-                  valueType="boolean"
-                  id="cygwin.gnu.linker.options.nodeflibs">
-            </option>
-            <option
-                  defaultValue="false"
-                  name="%Option.Posix.Linker.NoStdLibs"
-                  category="cygwin.linker.category.general"
-                  command="-nostdlib"
-                  valueType="boolean"
-                  id="cygwin.gnu.linker.options.nostdlibs">
-            </option>
-            <option
-                  defaultValue="false"
-                  name="%Option.Posix.Linker.Strip"
-                  category="linux.gnu.linker.category.options"
-                  command="-s"
+                  name="%Option.Posix.Nostdinc"
+                  category="cygwin.compiler.category.preprocessor"
+                  command="-nostdinc"
                   valueType="boolean"
-                  id="cygwin.gnu.linker.options.strip">
+                  id="cygwin.gnu.compiler.preprocessor.nostdinc">
             </option>
             <option
                   defaultValue="false"
-                  name="%Option.Posix.Linker.Static"
-                  category="cygwin.linker.category.general"
-                  command="-static"
+                  name="%Option.Posix.PreprocOnly"
+                  category="cygwin.compiler.category.preprocessor"
+                  command="-E"
                   valueType="boolean"
-                  id="cygwin.gnu.linker.options.noshared">
-            </option>
-            <optionCategory
-                  owner="org.eclipse.cdt.build.tool.cygwin.link"
-                  name="%OptionCategory.Libs"
-                  id="cygwin.gnu.linker.category.libs">
-            </optionCategory>
-            <option
-                  name="%Option.Posix.Libs"
-                  category="cygwin.gnu.linker.category.libs"
-                  command="-l"
-                  valueType="libs"
-                  id="cygwin.link.libs">
-            </option>
-            <option
-                  name="%Option.Posix.Libsearch"
-                  category="cygwin.gnu.linker.category.libs"
-                  command="-L"
-                  valueType="stringList"
-                  id="cygwin.link.ld.paths">
+                  id="cygwin.gnu.compiler.preprocessor.preprocess">
             </option>
             <optionCategory
-                  owner="org.eclipse.cdt.build.tool.cygwin.link"
-                  name="%OptionCategory.Misc"
-                  id="cygwin.gnu.linker.category.other">
+                  owner="org.eclipse.cdt.build.tool.cygwin.compiler"
+                  name="Symbols"
+                  id="cygwin.gnu.compiler.category.symbols">
             </optionCategory>
             <option
-                  name="Linker Flags"
-                  category="cygwin.gnu.linker.category.other"
-                  valueType="string"
-                  id="cygwin.link.ld.flags">
-            </option>
-            <option
-                  name="%Option.Posix.Linker.XLinker"
-                  category="cygwin.gnu.linker.category.other"
-                  command="-Xlinker"
-                  valueType="stringList"
-                  id="cygwin.gnu.linker.options.other">
-            </option>
-            <option
-                  name="%Option.Posix.UserObjs"
-                  category="cygwin.gnu.linker.category.other"
-                  valueType="userObjs"
-                  id="cygwin.gnu.link.ld.userobjs">
-            </option>
-         </tool>
-      </target>
-      <target
-            isTest="false"
-            name="Cygwin Shared Library"
-            parent="cygwin"
-            binaryParser="org.eclipse.cdt.core.PE"
-            defaultExtension="dll"
-            isAbstract="false"
-            id="cygwin.so">
-         <configuration
-               name="%ConfigName.Rel"
-               id="cygwin.so.release">
-            <toolReference
-                  id="org.eclipse.cdt.build.tool.cygwin.compiler">
-               <optionReference
-                     defaultValue="Optimize most (-O3)"
-                     command="-O3"
-                     id="cygwin.compiler.general.optimization.level">
-               </optionReference>
-               <optionReference
-                     defaultValue="None"
-                     id="cygwin.compiler.debugging.level">
-               </optionReference>
-            </toolReference>
-         </configuration>
-         <configuration
-               name="%ConfigName.Dbg"
-               id="cygwin.so.debug">
-            <toolReference
-                  id="org.eclipse.cdt.build.tool.cygwin.compiler">
-               <optionReference
-                     defaultValue="None (-O0)"
-                     command="-O0"
-                     id="cygwin.compiler.general.optimization.level">
-               </optionReference>
-               <optionReference
-                     defaultValue="Maximum (-g3)"
-                     command="-g3"
+                  name="%Option.Posix.DefSym"
+                  category="cygwin.gnu.compiler.category.symbols"
+                  command="-D"
+                  valueType="definedSymbols"
+                  id="cygwin.preprocessor.def.symbols">
+               <listOptionValue
+                     value="_X86_=1"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__OPTIMIZE__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__STDC_HOSTED__=1"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="i386"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__i386"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__i386__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__tune_i686__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__tune_pentiumpro__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__tune_pentium2__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__tune_pentium3__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__stdcall=__attribute__((__stdcall__))"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__fastcall=__attribute__((__fastcall__))"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__cdecl=__attribute__((__cdecl__))"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="_stdcall=__attribute__((__stdcall__))"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="_fastcall=__attribute__((__fastcall__))"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="_cdecl=__attribute__((__cdecl__))"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__declspec(x)=__attribute__((x))"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__CYGWIN32__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__CYGWIN__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="unix"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__unix__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__unix"
+                     builtIn="true">
+               </listOptionValue>
+            </option>
+            <option
+                  name="%Option.Posix.UndefSym"
+                  category="cygwin.gnu.compiler.category.symbols"
+                  command="-U"
+                  valueType="stringList"
+                  id="cygwin.preprocessor.undef.symbol">
+            </option>
+            <optionCategory
+                  owner="org.eclipse.cdt.build.tool.cygwin.compiler"
+                  name="%OptionCategory.Dirs"
+                  id="cygwin.gnu.compiler.category.dirs">
+            </optionCategory>
+            <option
+                  name="Include Paths"
+                  category="cygwin.gnu.compiler.category.dirs"
+                  command="-I"
+                  valueType="includePath"
+                  id="cygwin.compiler.general.include.paths">
+               <listOptionValue
+                     value="C:\cygwin\usr\include\w32api"
+                     builtIn="true">
+               </listOptionValue>
+            </option>
+            <optionCategory
+                  owner="org.eclipse.cdt.build.tool.cygwin.compiler"
+                  name="%OptionCategory.Optimize"
+                  id="cygwin.gnu.compiler.category.optimization">
+            </optionCategory>
+            <option
+                  name="Optimization Level"
+                  category="cygwin.gnu.compiler.category.optimization"
+                  valueType="enumerated"
+                  id="cygwin.compiler.general.optimization.level">
+               <enumeratedOptionValue
+                     name="%Option.Posix.Optimize.None"
+                     isDefault="false"
+                     command="-O0"
+                     id="cygwin.optimization.level.none">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="%Option.Posix.Optimize.Optimize"
+                     command="-O1"
+                     id="cygwin.optimization.level.optimize">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="%Option.Posix.Optimize.More"
+                     isDefault="true"
+                     command="-O2"
+                     id="cygwin.optimization.level.more">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="%Option.Posix.Optimize.Most"
+                     command="-O3"
+                     id="cygwin.optimization.level.most">
+               </enumeratedOptionValue>
+            </option>
+            <option
+                  name="Other optimization flags"
+                  category="cygwin.gnu.compiler.category.optimization"
+                  valueType="string"
+                  id="cygwin.compiler.optimization.flags">
+            </option>
+            <optionCategory
+                  owner="org.eclipse.cdt.build.tool.cygwin.compiler"
+                  name="%OptionCategory.Debug"
+                  id="cygwin.gnu.compiler.category.debug">
+            </optionCategory>
+            <option
+                  name="Debug Level"
+                  category="cygwin.gnu.compiler.category.debug"
+                  valueType="enumerated"
+                  id="cygwin.compiler.debugging.level">
+               <enumeratedOptionValue
+                     name="None"
+                     isDefault="false"
+                     id="cygwin.debugging.level.none">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="Minimal (-g1)"
+                     command="-g1"
+                     id="cygwin.debugging.level.minimal">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="Default (-g)"
+                     isDefault="true"
+                     command="-g"
+                     id="cygwin.debugging.level.default">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="Maximum (-g3)"
+                     isDefault="false"
+                     command="-g3"
+                     id="cygwin.debugging.level.max">
+               </enumeratedOptionValue>
+            </option>
+            <option
+                  defaultValue="-gstabs"
+                  name="Other debugging flags"
+                  category="cygwin.gnu.compiler.category.debug"
+                  valueType="string"
+                  id="cygwin.gnu.compiler.debugging.other">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Generate prof information (-p)"
+                  category="cygwin.gnu.compiler.category.debug"
+                  command="-p"
+                  valueType="boolean"
+                  id="cygwin.gnu.compiler.debugging.prof">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Generate gprof information (-pg)"
+                  category="cygwin.gnu.compiler.category.debug"
+                  command="-pg"
+                  valueType="boolean"
+                  id="cygwin.gnu.compiler.debugging.gprof">
+            </option>
+            <optionCategory
+                  owner="org.eclipse.cdt.build.tool.cygwin.compiler"
+                  name="%OptionCategory.Warn"
+                  id="cygwin.compiler.category.warnings">
+            </optionCategory>
+            <option
+                  defaultValue="false"
+                  name="Check syntax only (-fsyntax-only)"
+                  category="cygwin.compiler.category.warnings"
+                  command="-fsyntax-only"
+                  valueType="boolean"
+                  id="cygwin.gnu.compiler.warnings.syntax">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Pedantic (-pedantic)"
+                  category="cygwin.compiler.category.warnings"
+                  command="-pedantic"
+                  valueType="boolean"
+                  id="cygwin.gnu.compiler.warnings.pedantic">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Pedantic warnings as errors (-pedantic-errors)"
+                  category="cygwin.compiler.category.warnings"
+                  command="-pedantic-errors"
+                  valueType="boolean"
+                  id="cygwin.gnu.compiler.warnings.pedantic.error">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Inhibit all warnings (-w)"
+                  category="cygwin.compiler.category.warnings"
+                  command="-w"
+                  valueType="boolean"
+                  id="cygwin.gnu.compiler.warnings.nowarn">
+            </option>
+            <option
+                  defaultValue="true"
+                  name="All warnings (-Wall)"
+                  category="cygwin.compiler.category.warnings"
+                  command="-Wall"
+                  valueType="boolean"
+                  id="cygwin.gnu.compiler.warnings.allwarn">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Warnings as errors (-werror)"
+                  category="cygwin.compiler.category.warnings"
+                  command="-werror"
+                  valueType="boolean"
+                  id="cygwin.gnu.compiler.warnings.toerrors">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.linux.gnu.compiler"
+                  name="%OptionCategory.Misc"
+                  id="cygwin.compiler.category.other">
+            </optionCategory>
+            <option
+                  defaultValue="-c"
+                  name="%Option.OtherFlags"
+                  category="cygwin.compiler.category.other"
+                  valueType="string"
+                  id="cygwin.compiler.misc.other">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Verbose"
+                  category="cygwin.compiler.category.other"
+                  command="-v"
+                  valueType="boolean"
+                  id="cygwin.compiler.misc.verbose">
+            </option>
+         </tool>
+      </target>
+      <target
+            isTest="false"
+            name="Cygwin Executable"
+            parent="cygwin"
+            binaryParser="org.eclipse.cdt.core.PE"
+            defaultExtension="exe"
+            isAbstract="false"
+            id="cygwin.exec">
+         <configuration
+               name="%ConfigName.Rel"
+               id="cygwin.exec.release">
+            <toolReference
+                  id="org.eclipse.cdt.build.tool.cygwin.compiler">
+               <optionReference
+                     defaultValue="Optimize most (-O3)"
+                     command="-O3"
+                     id="cygwin.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="None"
+                     id="cygwin.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
+            <toolReference
+                  id="cdt.build.tool.cygwin.gnu.c.compiler">
+               <optionReference
+                     defaultValue="Optimize most (-O3)"
+                     id="cygwin.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="None"
+                     id="cygwin.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
+         </configuration>
+         <configuration
+               name="%ConfigName.Dbg"
+               id="cygwin.exec.debug">
+            <toolReference
+                  id="org.eclipse.cdt.build.tool.cygwin.compiler">
+               <optionReference
+                     defaultValue="None (-O0)"
+                     command="-O0"
+                     id="cygwin.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="Maximum (-g3)"
+                     command="-g3"
+                     id="cygwin.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
+            <toolReference
+                  id="cdt.build.tool.cygwin.gnu.c.compiler">
+               <optionReference
+                     defaultValue="None (-O0)"
+                     id="cygwin.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="Maximum (-g3)"
+                     id="cygwin.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
+         </configuration>
+         <tool
+               natureFilter="cnature"
+               name="%ToolName.linker.c"
+               outputFlag="-o"
+               outputs="exe"
+               command="gcc"
+               id="cdt.build.tool.cygwin.c.link">
+            <optionCategory
+                  owner="cdt.build.tool.cygwin.c.link"
+                  name="%OptionCategory.General"
+                  id="cygwin.gnu.c.linker.category.general">
+            </optionCategory>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStartFiles"
+                  category="cygwin.gnu.c.linker.category.general"
+                  command="-nostartfiles"
+                  valueType="boolean"
+                  id="cygwin.gnu.c.link.options.nostart">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoDefLibs"
+                  category="cygwin.gnu.c.linker.category.general"
+                  command="-nodefaultlibs"
+                  valueType="boolean"
+                  id="cygwin.gnu.c.link.options.nodeflibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStdLibs"
+                  category="cygwin.gnu.c.linker.category.general"
+                  command="-nostdlib"
+                  valueType="boolean"
+                  id="cygwin.gnu.c.link.options.nostdlibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Strip"
+                  category="cygwin.gnu.c.linker.category.general"
+                  command="-s"
+                  valueType="boolean"
+                  id="cygwin.gnu.c.link.options.strip">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Static"
+                  category="cygwin.gnu.c.linker.category.general"
+                  command="-static"
+                  valueType="boolean"
+                  id="cygwin.gnu.c.link.options.noshared">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.cygwin.c.link"
+                  name="%OptionCategory.Libs"
+                  id="cygwin.gnu.c.linker.category.libs">
+            </optionCategory>
+            <option
+                  name="%Option.Posix.Libs"
+                  category="cygwin.gnu.c.linker.category.libs"
+                  command="-l"
+                  valueType="libs"
+                  id="cygwin.gnu.c.link.libs">
+            </option>
+            <option
+                  name="%Option.Posix.Libsearch"
+                  category="cygwin.gnu.c.linker.category.libs"
+                  command="-L"
+                  valueType="stringList"
+                  id="cygwin.gnu.c.link.paths">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.cygwin.c.link"
+                  name="%OptionCategory.Misc"
+                  id="cygwin.gnu.c.linker.category.other">
+            </optionCategory>
+            <option
+                  name="Linker Flags"
+                  category="cygwin.gnu.c.linker.category.other"
+                  valueType="string"
+                  id="cygwin.gnu.c.link.ldflags">
+            </option>
+            <option
+                  name="%Option.Posix.Linker.XLinker"
+                  category="cygwin.gnu.c.linker.category.other"
+                  command="-Xlinker"
+                  valueType="stringList"
+                  id="cygwin.gnu.c.link.options.other">
+            </option>
+            <option
+                  name="%Option.Posix.UserObjs"
+                  category="cygwin.gnu.c.linker.category.other"
+                  valueType="userObjs"
+                  id="cygwin.gnu.c.link.ld.userobjs">
+            </option>
+         </tool>
+         <tool
+               natureFilter="ccnature"
+               name="%ToolName.linker.cpp"
+               outputFlag="-o"
+               outputs="exe"
+               command="g++"
+               id="org.eclipse.cdt.build.tool.cygwin.link">
+            <optionCategory
+                  owner="org.eclipse.cdt.build.tool.cygwin.link"
+                  name="%OptionCategory.General"
+                  id="cygwin.linker.category.general">
+            </optionCategory>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStartFiles"
+                  category="cygwin.linker.category.general"
+                  command="-nostartfiles"
+                  valueType="boolean"
+                  id="cygwin.gnu.linker.options.nostart">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoDefLibs"
+                  category="cygwin.linker.category.general"
+                  command="-nodefaultlibs"
+                  valueType="boolean"
+                  id="cygwin.gnu.linker.options.nodeflibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStdLibs"
+                  category="cygwin.linker.category.general"
+                  command="-nostdlib"
+                  valueType="boolean"
+                  id="cygwin.gnu.linker.options.nostdlibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Strip"
+                  category="cygwin.linker.category.general"
+                  command="-s"
+                  valueType="boolean"
+                  id="cygwin.gnu.linker.options.strip">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Static"
+                  category="cygwin.linker.category.general"
+                  command="-static"
+                  valueType="boolean"
+                  id="cygwin.gnu.linker.options.noshared">
+            </option>
+            <optionCategory
+                  owner="org.eclipse.cdt.build.tool.cygwin.link"
+                  name="%OptionCategory.Libs"
+                  id="cygwin.gnu.linker.category.libs">
+            </optionCategory>
+            <option
+                  name="%Option.Posix.Libs"
+                  category="cygwin.gnu.linker.category.libs"
+                  command="-l"
+                  valueType="libs"
+                  id="cygwin.link.libs">
+            </option>
+            <option
+                  name="%Option.Posix.Libsearch"
+                  category="cygwin.gnu.linker.category.libs"
+                  command="-L"
+                  valueType="stringList"
+                  id="cygwin.link.ld.paths">
+            </option>
+            <optionCategory
+                  owner="org.eclipse.cdt.build.tool.cygwin.link"
+                  name="%OptionCategory.Misc"
+                  id="cygwin.gnu.linker.category.other">
+            </optionCategory>
+            <option
+                  name="Linker Flags"
+                  category="cygwin.gnu.linker.category.other"
+                  valueType="string"
+                  id="cygwin.link.ld.flags">
+            </option>
+            <option
+                  name="%Option.Posix.Linker.XLinker"
+                  category="cygwin.gnu.linker.category.other"
+                  command="-Xlinker"
+                  valueType="stringList"
+                  id="cygwin.gnu.linker.options.other">
+            </option>
+            <option
+                  name="%Option.Posix.UserObjs"
+                  category="cygwin.gnu.linker.category.other"
+                  valueType="userObjs"
+                  id="cygwin.gnu.link.ld.userobjs">
+            </option>
+         </tool>
+      </target>
+      <target
+            isTest="false"
+            name="Cygwin Shared Library"
+            parent="cygwin"
+            binaryParser="org.eclipse.cdt.core.PE"
+            defaultExtension="dll"
+            isAbstract="false"
+            id="cygwin.so">
+         <configuration
+               name="%ConfigName.Rel"
+               id="cygwin.so.release">
+            <toolReference
+                  id="org.eclipse.cdt.build.tool.cygwin.compiler">
+               <optionReference
+                     defaultValue="Optimize most (-O3)"
+                     command="-O3"
+                     id="cygwin.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="None"
+                     id="cygwin.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
+            <toolReference
+                  id="cdt.build.tool.cygwin.gnu.c.compiler">
+               <optionReference
+                     defaultValue="Optimize most (-O3)"
+                     id="cygwin.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="None"
+                     id="cygwin.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
+         </configuration>
+         <configuration
+               name="%ConfigName.Dbg"
+               id="cygwin.so.debug">
+            <toolReference
+                  id="org.eclipse.cdt.build.tool.cygwin.compiler">
+               <optionReference
+                     defaultValue="None (-O0)"
+                     command="-O0"
+                     id="cygwin.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="Maximum (-g3)"
+                     command="-g3"
                      id="cygwin.compiler.debugging.level">
                </optionReference>
             </toolReference>
+            <toolReference
+                  id="cdt.build.tool.cygwin.gnu.c.compiler">
+               <optionReference
+                     defaultValue="None (-O0)"
+                     id="cygwin.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="Maximum (-g3)"
+                     id="cygwin.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
          </configuration>
          <tool
-               name="%ToolName.linker"
+               natureFilter="cnature"
+               name="%ToolName.linker.c"
+               outputFlag="-o"
+               outputs="dll"
+               outputPrefix="lib"
+               command="gcc"
+               id="cdt.build.tool.cygwin.c.solink">
+            <optionCategory
+                  owner="cdt.build.tool.cygwin.c.solink"
+                  name="%OptionCategory.General"
+                  id="cygwin.gnu.c.solink.category.general">
+            </optionCategory>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStartFiles"
+                  category="cygwin.gnu.c.solink.category.general"
+                  command="-nostartfiles"
+                  valueType="boolean"
+                  id="cygwin.gnu.c.solink.options.nostart">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoDefLibs"
+                  category="cygwin.gnu.c.solink.category.general"
+                  command="-nodefaultlibs"
+                  valueType="boolean"
+                  id="cygwin.gnu.c.solink.options.nodeflibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStdLibs"
+                  category="cygwin.gnu.c.solink.category.general"
+                  command="-nostdlib"
+                  valueType="boolean"
+                  id="cygwin.gnu.c.solink.options.nostdlibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Strip"
+                  category="cygwin.gnu.c.solink.category.general"
+                  command="-s"
+                  valueType="boolean"
+                  id="cygwin.gnu.c.solink.options.strip">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Static"
+                  category="cygwin.gnu.c.solink.category.general"
+                  command="-static"
+                  valueType="boolean"
+                  id="cygwin.gnu.c.solink.options.noshared">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.cygwin.c.solink"
+                  name="%OptionCategory.Libs"
+                  id="cygwin.gnu.c.solink.category.libs">
+            </optionCategory>
+            <option
+                  name="%Option.Posix.Libs"
+                  category="cygwin.gnu.c.solink.category.libs"
+                  command="-l"
+                  valueType="libs"
+                  id="cygwin.gnu.c.solink.libs">
+            </option>
+            <option
+                  name="%Option.Posix.Libsearch"
+                  category="cygwin.gnu.c.solink.category.libs"
+                  command="-L"
+                  valueType="stringList"
+                  id="cygwin.gnu.c.solink.paths">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.cygwin.c.solink"
+                  name="%OptionCategory.Misc"
+                  id="cygwin.gnu.c.solink.category.other">
+            </optionCategory>
+            <option
+                  defaultValue="-shared"
+                  name="Linker Flags"
+                  category="cygwin.gnu.c.solink.category.other"
+                  valueType="string"
+                  id="cygwin.gnu.c.solink.ldflags">
+            </option>
+            <option
+                  name="%Option.Posix.Linker.XLinker"
+                  category="cygwin.gnu.c.solink.category.other"
+                  command="-Xlinker"
+                  valueType="stringList"
+                  id="cygwin.gnu.c.solink.options.other">
+            </option>
+            <option
+                  name="%Option.Posix.UserObjs"
+                  category="cygwin.gnu.c.solink.category.other"
+                  valueType="userObjs"
+                  id="cygwin.gnu.c.solink.userobjs">
+            </option>
+         </tool>
+         <tool
+               natureFilter="ccnature"
+               name="%ToolName.linker.cpp"
                outputFlag="-o"
                outputs="dll"
                outputPrefix="lib"
-               command="g++ -shared"
+               command="g++"
                id="org.eclipse.cdt.build.tool.cygwin.solink">
             <optionCategory
                   owner="org.eclipse.cdt.build.tool.cygwin.solink"
@@ -600,7 +1165,7 @@
                   category="cygwin.gnu.solink.category.general"
                   command="-nostartfiles"
                   valueType="boolean"
-                  id="linux.gnu.solink.options.nostart">
+                  id="cygwin.gnu.solink.options.nostart">
             </option>
             <option
                   defaultValue="false"
@@ -651,7 +1216,7 @@
                   id="cygwin.gnu.solink.category.other">
             </optionCategory>
             <option
-                  defaultValue=""
+                  defaultValue="-shared"
                   name="Linker Flags"
                   category="cygwin.gnu.solink.category.other"
                   valueType="string"
@@ -714,7 +1279,8 @@
             </toolReference>
          </configuration>
          <tool
-               name="%ToolName.linker"
+               natureFilter="ccnature"
+               name="%ToolName.linker.cpp"
                outputFlag="-o"
                outputs="dll"
                outputPrefix="cyg"
@@ -771,6 +1337,17 @@
                      id="cygwin.compiler.debugging.level">
                </optionReference>
             </toolReference>
+            <toolReference
+                  id="cdt.build.tool.cygwin.gnu.c.compiler">
+               <optionReference
+                     defaultValue="Optimize most (-O3)"
+                     id="cygwin.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="None"
+                     id="cygwin.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
          </configuration>
          <configuration
                name="%ConfigName.Dbg"
@@ -788,40 +1365,350 @@
                      id="cygwin.compiler.debugging.level">
                </optionReference>
             </toolReference>
+            <toolReference
+                  id="cdt.build.tool.cygwin.gnu.c.compiler">
+               <optionReference
+                     defaultValue="None (-O0)"
+                     id="cygwin.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="Maximum (-g3)"
+                     id="cygwin.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
          </configuration>
          <tool
+               natureFilter="both"
                name="%ToolName.archiver"
                outputs="a"
                outputPrefix="lib"
                command="ar"
                id="org.eclipse.cdt.build.tool.cygwin.ar">
             <optionCategory
-                  owner="org.eclipse.cdt.build.tool.cygwin.ar"
-                  name="%OptionCategory.General"
-                  id="cygwin.ar.category.general">
+                  owner="org.eclipse.cdt.build.tool.cygwin.ar"
+                  name="%OptionCategory.General"
+                  id="cygwin.ar.category.general">
+            </optionCategory>
+            <option
+                  defaultValue="-r"
+                  name="Archiver Flags"
+                  category="cygwin.ar.category.general"
+                  valueType="string"
+                  id="cygwin.ar.flags">
+            </option>
+         </tool>
+      </target>
+      <target
+            name="Linux"
+            id="linux.gnu"
+            cleanCommand="rm -rf"
+            isTest="false"
+            isAbstract="true"
+            makeCommand="make"
+            binaryParser="org.eclipse.cdt.core.ELF"
+            makeFlags="-k"
+            osList="linux">
+         <tool
+               natureFilter="cnature"
+               sources="c"
+               name="%ToolName.compiler.c"
+               headerExtensions="h"
+               outputFlag="-o"
+               outputs="o"
+               command="gcc"
+               id="cdt.build.tool.linux.gnu.c.compiler">
+            <optionCategory
+                  owner="cdt.build.tool.linux.gnu.c.compiler"
+                  name="%OptionCategory.Preproc"
+                  id="linux.gnu.c.compiler.category.preprocessor">
+            </optionCategory>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Nostdinc"
+                  category="linux.gnu.c.compiler.category.preprocessor"
+                  command="-nostdinc"
+                  valueType="boolean"
+                  id="linux.gnu.c.compiler.preprocessor.nostdinc">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.PreprocOnly"
+                  category="linux.gnu.c.compiler.category.preprocessor"
+                  command="-E"
+                  valueType="boolean"
+                  id="linux.gnu.c.compiler.preprocessor.preprocess">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.linux.gnu.c.compiler"
+                  name="Symbols"
+                  id="linux.gnu.c.compiler.category.symbols">
+            </optionCategory>
+            <option
+                  name="%Option.Posix.DefSym"
+                  category="linux.gnu.c.compiler.category.symbols"
+                  command="-D"
+                  valueType="definedSymbols"
+                  id="linux.gnu.c.preprocessor.def.symbols">
+               <listOptionValue
+                     value="__ELF__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="unix"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__gnu_linux__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="linux"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__unix__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__linux__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__unix"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__linux"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__OPTIMIZE__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__STDC_HOSTED__=1"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="_GNU_SOURCE"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="i386"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__i386"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__i386__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__tune_i386__"
+                     builtIn="true">
+               </listOptionValue>
+            </option>
+            <option
+                  name="%Option.Posix.UndefSym"
+                  category="linux.gnu.c.compiler.category.symbols"
+                  command="-U"
+                  valueType="stringList"
+                  id="linux.gnu.c.preprocessor.undef.symbol">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.linux.gnu.c.compiler"
+                  name="%OptionCategory.Dirs"
+                  id="linux.gnu.c.compiler.category.dirs">
+            </optionCategory>
+            <option
+                  name="Include Paths"
+                  category="linux.gnu.c.compiler.category.dirs"
+                  command="-I"
+                  valueType="includePath"
+                  id="linux.gnu.c.compiler.general.include.paths">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.linux.gnu.c.compiler"
+                  name="%OptionCategory.Optimize"
+                  id="linux.gnu.c.compiler.category.optimization">
+            </optionCategory>
+            <option
+                  name="Optimization Level"
+                  category="linux.gnu.c.compiler.category.optimization"
+                  valueType="enumerated"
+                  id="linux.gnu.c.compiler.general.optimization.level">
+               <enumeratedOptionValue
+                     name="%Option.Posix.Optimize.None"
+                     isDefault="false"
+                     command="-O0"
+                     id="linux.gnu.c.optimization.level.none">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="%Option.Posix.Optimize.Optimize"
+                     command="-O1"
+                     id="linux.gnu.c.optimization.level.optimize">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="%Option.Posix.Optimize.More"
+                     isDefault="true"
+                     command="-O2"
+                     id="linux.gnu.c.optimization.level.more">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="%Option.Posix.Optimize.Most"
+                     command="-O3"
+                     id="linux.gnu.c.optimization.level.most">
+               </enumeratedOptionValue>
+            </option>
+            <option
+                  name="Other optimization flags"
+                  category="linux.gnu.c.compiler.category.optimization"
+                  valueType="string"
+                  id="linux.gnu.c.compiler.optimization.flags">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.linux.gnu.c.compiler"
+                  name="%OptionCategory.Debug"
+                  id="linux.gnu.c.compiler.category.debug">
+            </optionCategory>
+            <option
+                  name="Debug Level"
+                  category="linux.gnu.c.compiler.category.debug"
+                  valueType="enumerated"
+                  id="linux.c.compiler.debugging.level">
+               <enumeratedOptionValue
+                     name="None"
+                     isDefault="false"
+                     id="linux.gnu.c.debugging.level.none">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="Minimal (-g1)"
+                     command="-g1"
+                     id="linux.gnu.c.debugging.level.minimal">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="Default (-g)"
+                     isDefault="true"
+                     command="-g"
+                     id="linux.gnu.c.debugging.level.default">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="Maximum (-g3)"
+                     isDefault="false"
+                     command="-g3"
+                     id="linux.gnu.c.debugging.level.max">
+               </enumeratedOptionValue>
+            </option>
+            <option
+                  name="Other debugging flags"
+                  category="linux.gnu.c.compiler.category.debug"
+                  valueType="string"
+                  id="linux.gnu.c.compiler.debugging.other">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Generate gprof information (-pg)"
+                  category="linux.gnu.c.compiler.category.debug"
+                  command="-pg"
+                  valueType="boolean"
+                  id="linux.gnu.c.compiler.debugging.gprof">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Generate prof information (-p)"
+                  category="linux.gnu.c.compiler.category.debug"
+                  command="-p"
+                  valueType="boolean"
+                  id="linux.gnu.c.compiler.debugging.prof">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.linux.gnu.c.compiler"
+                  name="%OptionCategory.Warn"
+                  id="linux.c.compiler.category.warnings">
+            </optionCategory>
+            <option
+                  defaultValue="false"
+                  name="Check syntax only (-fsyntax-only)"
+                  category="linux.c.compiler.category.warnings"
+                  command="-fsyntax-only"
+                  valueType="boolean"
+                  id="linux.gnu.c.compiler.warnings.syntax">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Pedantic (-pedantic)"
+                  category="linux.c.compiler.category.warnings"
+                  command="-pedantic"
+                  valueType="boolean"
+                  id="linux.gnu.c.compiler.warnings.pedantic">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Pedantic warnings as errors (-pedantic-errors)"
+                  category="linux.c.compiler.category.warnings"
+                  command="-pedantic-errors"
+                  valueType="boolean"
+                  id="linux.gnu.c.compiler.warnings.pedantic.error">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Inhibit all warnings (-w)"
+                  category="linux.c.compiler.category.warnings"
+                  command="-w"
+                  valueType="boolean"
+                  id="linux.gnu.c.compiler.warnings.nowarn">
+            </option>
+            <option
+                  defaultValue="true"
+                  name="All warnings (-Wall)"
+                  category="linux.c.compiler.category.warnings"
+                  command="-Wall"
+                  valueType="boolean"
+                  id="linux.gnu.c.compiler.warnings.allwarn">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Warnings as errors (-werror)"
+                  category="linux.c.compiler.category.warnings"
+                  command="-werror"
+                  valueType="boolean"
+                  id="linux.gnu.c.compiler.warnings.toerrors">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.linux.gnu.c.compiler"
+                  name="%OptionCategory.Misc"
+                  id="linux.c.compiler.category.other">
             </optionCategory>
             <option
-                  defaultValue="-r"
-                  name="Archiver Flags"
-                  category="cygwin.ar.category.general"
+                  defaultValue="-c"
+                  name="%Option.OtherFlags"
+                  category="linux.c.compiler.category.other"
                   valueType="string"
-                  id="cygwin.ar.flags">
+                  id="linux.gnu.c.compiler.misc.other">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Verbose"
+                  category="linux.c.compiler.category.other"
+                  command="-v"
+                  valueType="boolean"
+                  id="linux.gnu.c.compiler.misc.verbose">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Ansi"
+                  category="linux.c.compiler.category.other"
+                  command="-ansi"
+                  valueType="boolean"
+                  id="linux.gnu.c.compiler.misc.ansi">
             </option>
          </tool>
-      </target>
-      <target
-            name="Linux"
-            id="linux.gnu"
-            cleanCommand="rm -rf"
-            isTest="false"
-            isAbstract="true"
-            makeCommand="make"
-            binaryParser="org.eclipse.cdt.core.ELF"
-            makeFlags="-k"
-            osList="linux">
          <tool
+               natureFilter="ccnature"
                sources="c,C,cc,cxx,cpp"
-               name="%ToolName.compiler"
+               name="%ToolName.compiler.cpp"
                headerExtensions="h,H,hpp"
                outputFlag="-o"
                outputs="o"
@@ -1131,6 +2018,17 @@
                      id="linux.gnu.compiler.debugging.level">
                </optionReference>
             </toolReference>
+            <toolReference
+                  id="cdt.build.tool.linux.gnu.c.compiler">
+               <optionReference
+                     defaultValue="Optimize most (-O3)"
+                     id="linux.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="None"
+                     id="linux.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
          </configuration>
          <configuration
                name="%ConfigName.Dbg"
@@ -1146,10 +2044,118 @@
                      id="linux.gnu.compiler.debugging.level">
                </optionReference>
             </toolReference>
+            <toolReference
+                  id="cdt.build.tool.linux.gnu.c.compiler">
+               <optionReference
+                     defaultValue="None (-O0)"
+                     id="linux.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="Maximum (-g3)"
+                     id="linux.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
          </configuration>
          <tool
+               natureFilter="cnature"
+               sources="o"
+               name="%ToolName.linker.c"
+               outputFlag="-o"
+               command="gcc"
+               id="cdt.build.tool.linux.c.link">
+            <optionCategory
+                  owner="cdt.build.tool.linux.c.link"
+                  name="%OptionCategory.General"
+                  id="linux.gnu.c.linker.category.general">
+            </optionCategory>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStartFiles"
+                  category="linux.gnu.c.linker.category.general"
+                  command="-nostartfiles"
+                  valueType="boolean"
+                  id="linux.gnu.c.link.options.nostart">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoDefLibs"
+                  category="linux.gnu.c.linker.category.general"
+                  command="-nodefaultlibs"
+                  valueType="boolean"
+                  id="linux.gnu.c.link.options.nodeflibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStdLibs"
+                  category="linux.gnu.c.linker.category.general"
+                  command="-nostdlib"
+                  valueType="boolean"
+                  id="linux.gnu.c.link.options.nostdlibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Strip"
+                  category="linux.gnu.c.linker.category.options"
+                  command="-s"
+                  valueType="boolean"
+                  id="linux.gnu.c.link.options.strip">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Static"
+                  category="linux.gnu.c.linker.category.general"
+                  command="-static"
+                  valueType="boolean"
+                  id="linux.gnu.c.link.options.noshared">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.linux.c.link"
+                  name="%OptionCategory.Libs"
+                  id="linux.gnu.c.linker.category.libs">
+            </optionCategory>
+            <option
+                  name="%Option.Posix.Libs"
+                  category="linux.gnu.c.linker.category.libs"
+                  command="-l"
+                  valueType="libs"
+                  id="linux.gnu.c.link.libs">
+            </option>
+            <option
+                  name="%Option.Posix.Libsearch"
+                  category="linux.gnu.c.linker.category.libs"
+                  command="-L"
+                  valueType="stringList"
+                  id="linux.gnu.c.link.paths">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.linux.c.link"
+                  name="%OptionCategory.Misc"
+                  id="linux.gnu.c.linker.category.other">
+            </optionCategory>
+            <option
+                  name="Linker Flags"
+                  category="linux.gnu.c.linker.category.other"
+                  valueType="string"
+                  id="linux.gnu.c.link.ldflags">
+            </option>
+            <option
+                  name="%Option.Posix.Linker.XLinker"
+                  category="linux.gnu.c.linker.category.other"
+                  command="-Xlinker"
+                  valueType="stringList"
+                  id="linux.gnu.c.link.options.other">
+            </option>
+            <option
+                  name="%Option.Posix.UserObjs"
+                  category="linux.gnu.c.linker.category.other"
+                  valueType="userObjs"
+                  id="linux.gnu.c.link.ld.userobjs">
+            </option>
+         </tool>
+         <tool
+               natureFilter="ccnature"
                sources="o"
-               name="%ToolName.linker"
+               name="%ToolName.linker.cpp"
                outputFlag="-o"
                command="g++"
                id="cdt.build.tool.linux.gnu.link">
@@ -1205,89 +2211,211 @@
             </optionCategory>
             <option
                   name="%Option.Posix.Libs"
-                  category="linux.gnu.linker.category.libs"
+                  category="linux.gnu.linker.category.libs"
+                  command="-l"
+                  valueType="libs"
+                  id="linux.gnu.linker.libs.libs">
+            </option>
+            <option
+                  name="%Option.Posix.Libsearch"
+                  category="linux.gnu.linker.category.libs"
+                  command="-L"
+                  valueType="stringList"
+                  id="linux.gnu.linker.libs.paths">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.linux.gnu.link"
+                  name="%OptionCategory.Misc"
+                  id="linux.gnu.linker.category.other">
+            </optionCategory>
+            <option
+                  name="%Option.Posix.Linker.Flags"
+                  category="linux.gnu.linker.category.other"
+                  valueType="string"
+                  id="linux.gnu.linker.libs.flags">
+            </option>
+            <option
+                  name="%Option.Posix.Linker.XLinker"
+                  category="linux.gnu.linker.category.other"
+                  command="-Xlinker"
+                  valueType="stringList"
+                  id="linux.gnu.linker.options.other">
+            </option>
+            <option
+                  name="%Option.Posix.UserObjs"
+                  category="linux.gnu.linker.category.other"
+                  valueType="userObjs"
+                  id="linux.gnu.linker.userobjs">
+            </option>
+         </tool>
+      </target>
+      <target
+            isTest="false"
+            name="Linux Shared Library"
+            parent="linux.gnu"
+            binaryParser="org.eclipse.cdt.core.ELF"
+            defaultExtension="so"
+            isAbstract="false"
+            id="linux.gnu.so">
+         <configuration
+               name="%ConfigName.Rel"
+               id="linux.gnu.so.release">
+            <toolReference
+                  id="cdt.build.tool.linux.gnu.compiler">
+               <optionReference
+                     defaultValue="Optimize most (-O3)"
+                     id="linux.gnu.compiler.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="None"
+                     id="linux.gnu.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
+            <toolReference
+                  id="cdt.build.tool.linux.gnu.c.compiler">
+               <optionReference
+                     defaultValue="Optimize most (-O3)"
+                     id="linux.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="None"
+                     id="linux.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
+         </configuration>
+         <configuration
+               name="%ConfigName.Dbg"
+               id="linux.gnu.so.debug">
+            <toolReference
+                  id="cdt.build.tool.linux.gnu.compiler">
+               <optionReference
+                     defaultValue="None (-O0)"
+                     id="linux.gnu.compiler.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="Maximum (-g3)"
+                     id="linux.gnu.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
+            <toolReference
+                  id="cdt.build.tool.linux.gnu.c.compiler">
+               <optionReference
+                     defaultValue="None (-O0)"
+                     id="linux.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="Maximum (-g3)"
+                     id="linux.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+            </toolReference>
+         </configuration>
+         <tool
+               natureFilter="cnature"
+               sources="o"
+               name="%ToolName.linker.c"
+               outputFlag="-o"
+               outputs="so"
+               outputPrefix="lib"
+               command="gcc"
+               id="cdt.build.tool.linux.gnu.c.solink">
+            <optionCategory
+                  owner="cdt.build.tool.linux.gnu.c.solink"
+                  name="%OptionCategory.General"
+                  id="linux.gnu.c.solink.category.general">
+            </optionCategory>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStartFiles"
+                  category="linux.gnu.c.solink.category.general"
+                  command="-nostartfiles"
+                  valueType="boolean"
+                  id="linux.gnu.c.solink.options.nostart">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoDefLibs"
+                  category="linux.gnu.c.solink.category.general"
+                  command="-nodefaultlibs"
+                  valueType="boolean"
+                  id="linux.gnu.c.solink.options.nodeflibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStdLibs"
+                  category="linux.gnu.c.solink.category.general"
+                  command="-nostdlib"
+                  valueType="boolean"
+                  id="linux.gnu.c.solink.options.nostdlibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Strip"
+                  category="linux.gnu.c.solink.category.general"
+                  command="-s"
+                  valueType="boolean"
+                  id="linux.gnu.c.solink.options.strip">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Static"
+                  category="linux.gnu.c.solink.category.general"
+                  command="-static"
+                  valueType="boolean"
+                  id="linux.gnu.c.solink.options.noshared">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.linux.gnu.c.solink"
+                  name="%OptionCategory.Libs"
+                  id="linux.gnu.c.solink.category.libs">
+            </optionCategory>
+            <option
+                  name="%Option.Posix.Libs"
+                  category="linux.gnu.c.solink.category.libs"
                   command="-l"
                   valueType="libs"
-                  id="linux.gnu.linker.libs.libs">
+                  id="linux.gnu.c.solink.libs">
             </option>
             <option
                   name="%Option.Posix.Libsearch"
-                  category="linux.gnu.linker.category.libs"
+                  category="linux.gnu.c.solink.category.libs"
                   command="-L"
                   valueType="stringList"
-                  id="linux.gnu.linker.libs.paths">
+                  id="linux.gnu.c.solink.paths">
             </option>
             <optionCategory
-                  owner="cdt.build.tool.linux.gnu.link"
+                  owner="cdt.build.tool.linux.gnu.c.solink"
                   name="%OptionCategory.Misc"
-                  id="linux.gnu.linker.category.other">
+                  id="linux.gnu.c.solink.category.other">
             </optionCategory>
             <option
-                  name="%Option.Posix.Linker.Flags"
-                  category="linux.gnu.linker.category.other"
+                  defaultValue="-shared"
+                  name="Linker Flags"
+                  category="linux.gnu.c.solink.category.other"
                   valueType="string"
-                  id="linux.gnu.linker.libs.flags">
+                  id="linux.gnu.c.solink.ldflags">
             </option>
             <option
                   name="%Option.Posix.Linker.XLinker"
-                  category="linux.gnu.linker.category.other"
+                  category="linux.gnu.c.solink.category.other"
                   command="-Xlinker"
                   valueType="stringList"
-                  id="linux.gnu.linker.options.other">
+                  id="linux.gnu.c.solink.options.other">
             </option>
             <option
                   name="%Option.Posix.UserObjs"
-                  category="linux.gnu.linker.category.other"
+                  category="linux.gnu.c.solink.category.other"
                   valueType="userObjs"
-                  id="linux.gnu.linker.userobjs">
+                  id="linux.gnu.c.solink.userobjs">
             </option>
          </tool>
-      </target>
-      <target
-            isTest="false"
-            name="Linux Shared Library"
-            parent="linux.gnu"
-            binaryParser="org.eclipse.cdt.core.ELF"
-            defaultExtension="so"
-            isAbstract="false"
-            id="linux.gnu.so">
-         <configuration
-               name="%ConfigName.Rel"
-               id="linux.gnu.so.release">
-            <toolReference
-                  id="cdt.build.tool.linux.gnu.compiler">
-               <optionReference
-                     defaultValue="Optimize most (-O3)"
-                     id="linux.gnu.compiler.optimization.level">
-               </optionReference>
-               <optionReference
-                     defaultValue="None"
-                     id="linux.gnu.compiler.debugging.level">
-               </optionReference>
-            </toolReference>
-         </configuration>
-         <configuration
-               name="%ConfigName.Dbg"
-               id="linux.gnu.so.debug">
-            <toolReference
-                  id="cdt.build.tool.linux.gnu.compiler">
-               <optionReference
-                     defaultValue="None (-O0)"
-                     id="linux.gnu.compiler.optimization.level">
-               </optionReference>
-               <optionReference
-                     defaultValue="Maximum (-g3)"
-                     id="linux.gnu.compiler.debugging.level">
-               </optionReference>
-            </toolReference>
-         </configuration>
          <tool
+               natureFilter="ccnature"
                sources="o"
-               name="%ToolName.linker"
+               name="%ToolName.linker.cpp"
                outputFlag="-o"
                outputs="so"
                outputPrefix="lib"
-               command="g++ -shared"
+               command="g++"
                id="cdt.build.tool.linux.gnu.solink">
             <optionCategory
                   owner="cdt.build.tool.linux.gnu.solink"
@@ -1351,6 +2479,7 @@
                   id="linux.gnu.solink.category.other">
             </optionCategory>
             <option
+                  defaultValue="-shared"
                   name="%Option.Posix.Linker.Flags"
                   category="linux.gnu.solink.category.other"
                   valueType="string"
@@ -1393,6 +2522,17 @@
                      id="linux.gnu.compiler.debugging.level">
                </optionReference>
             </toolReference>
+            <toolReference
+                  id="cdt.build.tool.linux.gnu.c.compiler">
+               <optionReference
+                     defaultValue="Optimize most (-O3)"
+                     id="linux.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="None"
+                     id="linux.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
          </configuration>
          <configuration
                name="%ConfigName.Dbg"
@@ -1408,8 +2548,20 @@
                      id="linux.gnu.compiler.debugging.level">
                </optionReference>
             </toolReference>
+            <toolReference
+                  id="cdt.build.tool.linux.gnu.c.compiler">
+               <optionReference
+                     defaultValue="None (-O0)"
+                     id="linux.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="Maximum (-g3)"
+                     id="linux.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
          </configuration>
          <tool
+               natureFilter="both"
                sources="o"
                name="%ToolName.archiver"
                outputs="a"
@@ -1417,32 +2569,322 @@
                command="ar"
                id="cdt.build.tool.linux.gnu.lib">
             <optionCategory
-                  owner="cdt.build.tool.linux.gnu.lib"
-                  name="%OptionCategory.General"
-                  id="linux.gnu.lib.category.general">
+                  owner="cdt.build.tool.linux.gnu.lib"
+                  name="%OptionCategory.General"
+                  id="linux.gnu.lib.category.general">
+            </optionCategory>
+            <option
+                  defaultValue="-r"
+                  name="Archiver Flags"
+                  category="linux.gnu.lib.category.general"
+                  valueType="string"
+                  id="linux.gnu.lib.flags">
+            </option>
+         </tool>
+      </target>
+      <target
+            name="Solaris"
+            id="solaris.gnu"
+            cleanCommand="rm -rf"
+            isTest="false"
+            isAbstract="true"
+            makeCommand="make"
+            binaryParser="org.eclipse.cdt.core.ELF"
+            makeFlags="-k"
+            osList="solaris">
+         <tool
+               natureFilter="cnature"
+               sources="c"
+               name="%ToolName.compiler.c"
+               headerExtensions="h"
+               outputFlag="-o"
+               outputs="o"
+               command="gcc"
+               id="cdt.build.tool.solaris.gnu.c.compiler">
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.compiler"
+                  name="%OptionCategory.Preproc"
+                  id="solaris.gnu.c.compiler.category.preprocessor">
+            </optionCategory>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Nostdinc"
+                  category="solaris.gnu.c.compiler.category.preprocessor"
+                  command="-nostdinc"
+                  valueType="boolean"
+                  id="solaris.gnu.c.compiler.preprocessor.nostdinc">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.PreprocOnly"
+                  category="solaris.gnu.c.compiler.category.preprocessor"
+                  command="-E"
+                  valueType="boolean"
+                  id="solaris.gnu.c.compiler.preprocessor.preprocess">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.compiler"
+                  name="Symbols"
+                  id="solaris.gnu.c.compiler.category.symbols">
+            </optionCategory>
+            <option
+                  name="%Option.Posix.DefSym"
+                  category="solaris.gnu.c.compiler.category.symbols"
+                  command="-D"
+                  valueType="definedSymbols"
+                  id="solaris.gnu.c.preprocessor.def.symbols">
+               <listOptionValue
+                     value="sun"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="sparc"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="unix"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__svr4__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__SVR4"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__GCC_NEW_VARARGS__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__sun__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__sparc__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__unix__"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__sun"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__sparc"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__unix"
+                     builtIn="true">
+               </listOptionValue>
+               <listOptionValue
+                     value="__OPTIMIZE__"
+                     builtIn="true">
+               </listOptionValue>
+            </option>
+            <option
+                  name="%Option.Posix.UndefSym"
+                  category="solaris.gnu.c.compiler.category.symbols"
+                  command="-U"
+                  valueType="stringList"
+                  id="solaris.gnu.c.preprocessor.undef.symbol">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.compiler"
+                  name="%OptionCategory.Dirs"
+                  id="solaris.gnu.c.compiler.category.dirs">
+            </optionCategory>
+            <option
+                  name="Include Paths"
+                  category="solaris.gnu.c.compiler.category.dirs"
+                  command="-I"
+                  valueType="includePath"
+                  id="solaris.gnu.c.compiler.general.include.paths">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.compiler"
+                  name="%OptionCategory.Optimize"
+                  id="solaris.gnu.c.compiler.category.optimization">
+            </optionCategory>
+            <option
+                  name="Optimization Level"
+                  category="solaris.gnu.c.compiler.category.optimization"
+                  valueType="enumerated"
+                  id="solaris.gnu.c.compiler.general.optimization.level">
+               <enumeratedOptionValue
+                     name="%Option.Posix.Optimize.None"
+                     isDefault="false"
+                     command="-O0"
+                     id="solaris.gnu.c.optimization.level.none">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="%Option.Posix.Optimize.Optimize"
+                     command="-O1"
+                     id="solaris.gnu.c.optimization.level.optimize">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="%Option.Posix.Optimize.More"
+                     isDefault="true"
+                     command="-O2"
+                     id="solaris.gnu.c.optimization.level.more">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="%Option.Posix.Optimize.Most"
+                     command="-O3"
+                     id="solaris.gnu.c.optimization.level.most">
+               </enumeratedOptionValue>
+            </option>
+            <option
+                  name="Other optimization flags"
+                  category="solaris.gnu.c.compiler.category.optimization"
+                  valueType="string"
+                  id="solaris.gnu.c.compiler.optimization.flags">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.compiler"
+                  name="%OptionCategory.Debug"
+                  id="solaris.gnu.c.compiler.category.debug">
+            </optionCategory>
+            <option
+                  name="Debug Level"
+                  category="solaris.gnu.c.compiler.category.debug"
+                  valueType="enumerated"
+                  id="solaris.c.compiler.debugging.level">
+               <enumeratedOptionValue
+                     name="None"
+                     isDefault="false"
+                     id="solaris.gnu.c.debugging.level.none">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="Minimal (-g1)"
+                     command="-g1"
+                     id="solaris.gnu.c.debugging.level.minimal">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="Default (-g)"
+                     isDefault="true"
+                     command="-g"
+                     id="solaris.gnu.c.debugging.level.default">
+               </enumeratedOptionValue>
+               <enumeratedOptionValue
+                     name="Maximum (-g3)"
+                     isDefault="false"
+                     command="-g3"
+                     id="solaris.gnu.c.debugging.level.max">
+               </enumeratedOptionValue>
+            </option>
+            <option
+                  name="Other debugging flags"
+                  category="solaris.gnu.c.compiler.category.debug"
+                  valueType="string"
+                  id="solaris.gnu.c.compiler.debugging.other">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Generate gprof information (-pg)"
+                  category="solaris.gnu.c.compiler.category.debug"
+                  command="-pg"
+                  valueType="boolean"
+                  id="solaris.gnu.c.compiler.debugging.gprof">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Generate prof information (-p)"
+                  category="solaris.gnu.c.compiler.category.debug"
+                  command="-p"
+                  valueType="boolean"
+                  id="solaris.gnu.c.compiler.debugging.prof">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.compiler"
+                  name="%OptionCategory.Warn"
+                  id="solaris.c.compiler.category.warnings">
             </optionCategory>
             <option
-                  defaultValue="-r"
-                  name="Archiver Flags"
-                  category="linux.gnu.lib.category.general"
+                  defaultValue="false"
+                  name="Check syntax only (-fsyntax-only)"
+                  category="solaris.c.compiler.category.warnings"
+                  command="-fsyntax-only"
+                  valueType="boolean"
+                  id="solaris.gnu.c.compiler.warnings.syntax">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Pedantic (-pedantic)"
+                  category="solaris.c.compiler.category.warnings"
+                  command="-pedantic"
+                  valueType="boolean"
+                  id="solaris.gnu.c.compiler.warnings.pedantic">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Pedantic warnings as errors (-pedantic-errors)"
+                  category="solaris.c.compiler.category.warnings"
+                  command="-pedantic-errors"
+                  valueType="boolean"
+                  id="solaris.gnu.c.compiler.warnings.pedantic.error">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Inhibit all warnings (-w)"
+                  category="solaris.c.compiler.category.warnings"
+                  command="-w"
+                  valueType="boolean"
+                  id="solaris.gnu.c.compiler.warnings.nowarn">
+            </option>
+            <option
+                  defaultValue="true"
+                  name="All warnings (-Wall)"
+                  category="solaris.c.compiler.category.warnings"
+                  command="-Wall"
+                  valueType="boolean"
+                  id="solaris.gnu.c.compiler.warnings.allwarn">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="Warnings as errors (-werror)"
+                  category="solaris.c.compiler.category.warnings"
+                  command="-werror"
+                  valueType="boolean"
+                  id="solaris.gnu.c.compiler.warnings.toerrors">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.compiler"
+                  name="%OptionCategory.Misc"
+                  id="solaris.c.compiler.category.other">
+            </optionCategory>
+            <option
+                  defaultValue="-c"
+                  name="%Option.OtherFlags"
+                  category="solaris.c.compiler.category.other"
                   valueType="string"
-                  id="linux.gnu.lib.flags">
+                  id="solaris.gnu.c.compiler.misc.other">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Verbose"
+                  category="solaris.c.compiler.category.other"
+                  command="-v"
+                  valueType="boolean"
+                  id="solaris.gnu.c.compiler.misc.verbose">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Ansi"
+                  category="solaris.c.compiler.category.other"
+                  command="-ansi"
+                  valueType="boolean"
+                  id="solaris.gnu.c.compiler.misc.ansi">
             </option>
          </tool>
-      </target>
-      <target
-            name="Solaris"
-            id="solaris.gnu"
-            cleanCommand="rm -rf"
-            isTest="false"
-            isAbstract="true"
-            makeCommand="make"
-            binaryParser="org.eclipse.cdt.core.ELF"
-            makeFlags="-k"
-            osList="solaris">
          <tool
+               natureFilter="ccnature"
                sources="c,C,cc,cxx,cpp"
-               name="%ToolName.compiler"
+               name="%ToolName.compiler.cpp"
                headerExtensions="h,H,hpp"
                outputFlag="-o"
                outputs="o"
@@ -1737,6 +3179,17 @@
                      id="solaris.gnu.compiler.debugging.level">
                </optionReference>
             </toolReference>
+            <toolReference
+                  id="cdt.build.tool.solaris.gnu.c.compiler">
+               <optionReference
+                     defaultValue="Optimize most (-O3)"
+                     id="solaris.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="None"
+                     id="solaris.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
          </configuration>
          <configuration
                name="%ConfigName.Dbg"
@@ -1752,10 +3205,118 @@
                      id="solaris.gnu.compiler.debugging.level">
                </optionReference>
             </toolReference>
+            <toolReference
+                  id="cdt.build.tool.solaris.gnu.c.compiler">
+               <optionReference
+                     defaultValue="None (-O0)"
+                     id="solaris.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="Maximum (-g3)"
+                     id="solaris.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
          </configuration>
          <tool
+               natureFilter="cnature"
+               sources="o"
+               name="%ToolName.linker.c"
+               outputFlag="-o"
+               command="gcc"
+               id="cdt.build.tool.solaris.gnu.c.link">
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.link"
+                  name="%OptionCategory.General"
+                  id="solaris.gnu.c.linker.category.general">
+            </optionCategory>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStartFiles"
+                  category="solaris.gnu.c.linker.category.general"
+                  command="-nostartfiles"
+                  valueType="boolean"
+                  id="solaris.gnu.c.link.options.nostart">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoDefLibs"
+                  category="solaris.gnu.c.linker.category.general"
+                  command="-nodefaultlibs"
+                  valueType="boolean"
+                  id="solaris.gnu.c.link.options.nodeflibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStdLibs"
+                  category="solaris.gnu.c.linker.category.general"
+                  command="-nostdlib"
+                  valueType="boolean"
+                  id="solaris.gnu.c.link.options.nostdlibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Strip"
+                  category="solaris.gnu.c.linker.category.options"
+                  command="-s"
+                  valueType="boolean"
+                  id="solaris.gnu.c.link.options.strip">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Static"
+                  category="solaris.gnu.c.linker.category.general"
+                  command="-static"
+                  valueType="boolean"
+                  id="solaris.gnu.c.link.options.noshared">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.link"
+                  name="%OptionCategory.Libs"
+                  id="solaris.gnu.c.linker.category.libs">
+            </optionCategory>
+            <option
+                  name="%Option.Posix.Libs"
+                  category="solaris.gnu.c.linker.category.libs"
+                  command="-l"
+                  valueType="libs"
+                  id="solaris.gnu.c.link.libs">
+            </option>
+            <option
+                  name="%Option.Posix.Libsearch"
+                  category="solaris.gnu.c.linker.category.libs"
+                  command="-L"
+                  valueType="stringList"
+                  id="solaris.gnu.c.link.paths">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.link"
+                  name="%OptionCategory.Misc"
+                  id="solaris.gnu.c.linker.category.other">
+            </optionCategory>
+            <option
+                  name="Linker Flags"
+                  category="solaris.gnu.c.linker.category.other"
+                  valueType="string"
+                  id="solaris.gnu.c.link.ldflags">
+            </option>
+            <option
+                  name="%Option.Posix.Linker.XLinker"
+                  category="solaris.gnu.c.linker.category.other"
+                  command="-Xlinker"
+                  valueType="stringList"
+                  id="solaris.gnu.c.link.options.other">
+            </option>
+            <option
+                  name="%Option.Posix.UserObjs"
+                  category="solaris.gnu.c.linker.category.other"
+                  valueType="userObjs"
+                  id="solaris.gnu.c.link.ld.userobjs">
+            </option>
+         </tool>
+         <tool
+               natureFilter="ccnature"
                sources="o"
-               name="%ToolName.linker"
+               name="%ToolName.linker.cpp"
                outputFlag="-o"
                command="g++"
                id="cdt.build.tool.solaris.gnu.link">
@@ -1870,6 +3431,21 @@
                      defaultValue="None"
                      id="solaris.gnu.compiler.debugging.level">
                </optionReference>
+               <optionReference
+                     defaultValue="-c -fPIC"
+                     id="solaris.gnu.compiler.other.other">
+               </optionReference>
+            </toolReference>
+            <toolReference
+                  id="cdt.build.tool.solaris.gnu.c.compiler">
+               <optionReference
+                     defaultValue="Optimize most (-O3)"
+                     id="solaris.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="None"
+                     id="solaris.c.compiler.debugging.level">
+               </optionReference>
             </toolReference>
          </configuration>
          <configuration
@@ -1886,14 +3462,125 @@
                      id="solaris.gnu.compiler.debugging.level">
                </optionReference>
             </toolReference>
+            <toolReference
+                  id="cdt.build.tool.solaris.gnu.c.compiler">
+               <optionReference
+                     defaultValue="None (-O0)"
+                     id="solaris.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="Maximum (-g3)"
+                     id="solaris.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
          </configuration>
          <tool
+               natureFilter="cnature"
                sources="o"
-               name="%ToolName.linker"
+               name="%ToolName.linker.c"
                outputFlag="-o"
                outputs="so"
                outputPrefix="lib"
-               command="g++ -shared"
+               command="gcc"
+               id="cdt.build.tool.solaris.gnu.c.solink">
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.solink"
+                  name="%OptionCategory.General"
+                  id="solaris.gnu.c.solink.category.general">
+            </optionCategory>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStartFiles"
+                  category="solaris.gnu.c.solink.category.general"
+                  command="-nostartfiles"
+                  valueType="boolean"
+                  id="solaris.gnu.c.solink.options.nostart">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoDefLibs"
+                  category="solaris.gnu.c.solink.category.general"
+                  command="-nodefaultlibs"
+                  valueType="boolean"
+                  id="solaris.gnu.c.solink.options.nodeflibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.NoStdLibs"
+                  category="solaris.gnu.c.solink.category.general"
+                  command="-nostdlib"
+                  valueType="boolean"
+                  id="solaris.gnu.c.solink.options.nostdlibs">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Strip"
+                  category="solaris.gnu.c.solink.category.general"
+                  command="-s"
+                  valueType="boolean"
+                  id="solaris.gnu.c.solink.options.strip">
+            </option>
+            <option
+                  defaultValue="false"
+                  name="%Option.Posix.Linker.Static"
+                  category="solaris.gnu.c.solink.category.general"
+                  command="-static"
+                  valueType="boolean"
+                  id="solaris.gnu.c.solink.options.noshared">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.solink"
+                  name="%OptionCategory.Libs"
+                  id="solaris.gnu.c.solink.category.libs">
+            </optionCategory>
+            <option
+                  name="%Option.Posix.Libs"
+                  category="solaris.gnu.c.solink.category.libs"
+                  command="-l"
+                  valueType="libs"
+                  id="solaris.gnu.c.solink.libs">
+            </option>
+            <option
+                  name="%Option.Posix.Libsearch"
+                  category="solaris.gnu.c.solink.category.libs"
+                  command="-L"
+                  valueType="stringList"
+                  id="solaris.gnu.c.solink.paths">
+            </option>
+            <optionCategory
+                  owner="cdt.build.tool.solaris.gnu.c.solink"
+                  name="%OptionCategory.Misc"
+                  id="solaris.gnu.c.solink.category.other">
+            </optionCategory>
+            <option
+                  defaultValue="-shared -fPIC"
+                  name="Linker Flags"
+                  category="solaris.gnu.c.solink.category.other"
+                  valueType="string"
+                  id="solaris.gnu.c.solink.ldflags">
+            </option>
+            <option
+                  name="%Option.Posix.Linker.XLinker"
+                  category="solaris.gnu.c.solink.category.other"
+                  command="-Xlinker"
+                  valueType="stringList"
+                  id="solaris.gnu.c.solink.options.other">
+            </option>
+            <option
+                  name="%Option.Posix.UserObjs"
+                  category="solaris.gnu.c.solink.category.other"
+                  valueType="userObjs"
+                  id="solaris.gnu.c.solink.userobjs">
+            </option>
+         </tool>
+         <tool
+               natureFilter="ccnature"
+               sources="o"
+               name="%ToolName.linker.cpp"
+               outputFlag="-o"
+               outputs="so"
+               outputPrefix="lib"
+               command="g++"
                id="cdt.build.tool.solaris.gnu.solink">
             <optionCategory
                   owner="cdt.build.tool.solaris.gnu.solink"
@@ -1957,6 +3644,7 @@
                   id="solaris.gnu.solink.category.other">
             </optionCategory>
             <option
+                  defaultValue="-shared -fPIC"
                   name="%Option.Posix.Linker.Flags"
                   category="solaris.gnu.solink.category.other"
                   valueType="string"
@@ -1999,6 +3687,17 @@
                      id="solaris.gnu.compiler.debugging.level">
                </optionReference>
             </toolReference>
+            <toolReference
+                  id="cdt.build.tool.solaris.gnu.c.compiler">
+               <optionReference
+                     defaultValue="Optimize most (-O3)"
+                     id="solaris.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="None"
+                     id="solaris.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
          </configuration>
          <configuration
                name="%ConfigName.Dbg"
@@ -2014,8 +3713,20 @@
                      id="solaris.gnu.compiler.debugging.level">
                </optionReference>
             </toolReference>
+            <toolReference
+                  id="cdt.build.tool.solaris.gnu.c.compiler">
+               <optionReference
+                     defaultValue="None (-O0)"
+                     id="solaris.gnu.c.compiler.general.optimization.level">
+               </optionReference>
+               <optionReference
+                     defaultValue="Maximum (-g3)"
+                     id="solaris.c.compiler.debugging.level">
+               </optionReference>
+            </toolReference>
          </configuration>
          <tool
+               natureFilter="both"
                sources="o"
                name="%ToolName.archiver"
                outputs="a"
Index: src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java,v
retrieving revision 1.2
diff -u -r1.2 BuildPropertyPage.java
--- src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java	24 Sep 2003 14:20:49 -0000	1.2
+++ src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java	1 Oct 2003 23:36:59 -0000
@@ -17,6 +17,7 @@
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
+import java.util.Random;
 import java.util.Set;
 import java.util.SortedMap;
 
@@ -478,13 +479,17 @@
 			SortedMap newConfigs = manageDialog.getNewConfigs();
 			Set keys = newConfigs.keySet();
 			Iterator keyIter = keys.iterator();
-			int index = selectedTarget.getConfigurations().length;
+			Random r = new Random();
+			r.setSeed(System.currentTimeMillis());
 			while (keyIter.hasNext()) {
 				String name = (String) keyIter.next();
 				IConfiguration parent = (IConfiguration) newConfigs.get(name);
 				if (parent != null) {
-					++index;
-					String newId = parent.getId() + "." + index;
+					int id = r.nextInt();
+					if (id < 0) {
+						id *= -1;
+					}
+					String newId = parent.getId() + "." + id;
 					IConfiguration newConfig = selectedTarget.createConfiguration(parent, newId);
 					newConfig.setName(name);
 					// Update the config lists
Index: src/org/eclipse/cdt/managedbuilder/ui/wizards/CProjectPlatformPage.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/CProjectPlatformPage.java,v
retrieving revision 1.3
diff -u -r1.3 CProjectPlatformPage.java
--- src/org/eclipse/cdt/managedbuilder/ui/wizards/CProjectPlatformPage.java	26 Sep 2003 00:20:04 -0000	1.3
+++ src/org/eclipse/cdt/managedbuilder/ui/wizards/CProjectPlatformPage.java	1 Oct 2003 23:36:59 -0000
@@ -91,7 +91,7 @@
 		platformLabel.setLayoutData(new GridData());
 
 		platformSelection =	ControlFactory.createSelectCombo(composite, targetNames, null);
-		platformSelection.setToolTipText(ManagedBuilderUIPlugin.getResourceString(PLATFORM_TIP));
+//		platformSelection.setToolTipText(ManagedBuilderUIPlugin.getResourceString(PLATFORM_TIP));
 		platformSelection.addListener(SWT.Selection, new Listener() {
 			public void handleEvent(Event e) {
 				handleTargetSelection();
Index: src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java,v
retrieving revision 1.2
diff -u -r1.2 NewManagedProjectWizard.java
--- src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java	22 Sep 2003 02:31:53 -0000	1.2
+++ src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java	1 Oct 2003 23:36:59 -0000
@@ -11,6 +11,8 @@
  * IBM Rational Software - Initial API and implementation
  * **********************************************************************/
 
+import java.util.Random;
+
 import org.eclipse.cdt.core.CCorePlugin;
 import org.eclipse.cdt.core.ICDescriptor;
 import org.eclipse.cdt.managedbuilder.core.BuildException;
@@ -108,14 +110,19 @@
 			ITarget parent = targetConfigurationPage.getSelectedTarget();
 			newTarget = ManagedBuildManager.createTarget(newProject, parent);
 			if (newTarget != null) {
-				// TODO add name entry field to project
 				String artifactName = newProject.getName();
 				artifactName +=  parent.getDefaultExtension().length() == 0 ? "" : "." + parent.getDefaultExtension();
 				newTarget.setBuildArtifact(artifactName);
 				IConfiguration [] selectedConfigs = targetConfigurationPage.getSelectedConfigurations();
+				Random r = new Random();
+				r.setSeed(System.currentTimeMillis());
 				for (int i = 0; i < selectedConfigs.length; i++) {
 					IConfiguration config = selectedConfigs[i];
-					newTarget.createConfiguration(config, config.getId() + "." + i);
+					int id = r.nextInt();
+					if (id < 0) {
+						id *= -1;
+					}
+					newTarget.createConfiguration(config, config.getId() + "." + id);
 				}
 				// Now add the first config in the list as the default
 				IConfiguration[] newConfigs = newTarget.getConfigurations();

Back to the top