diff --git a/build/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd b/build/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd
index d9b7428496f..50bc1978cf0 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd
+++ b/build/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd
@@ -221,6 +221,23 @@ Additional special types exist to flag options of special relevance to the build
+
+
+
+ This value is used for list (and related) options only. If you need a list option to prompt the user to browse for a file or directory when adding a new value, set the value of the attribute accordingly. By default the value is treated as no browsing needed.
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -323,6 +340,10 @@ Additional special types exist to flag options of special relevance to the build
+
+
+
+
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java
index 12a6cf5dbe4..eb10441336c 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java
@@ -23,8 +23,17 @@ public interface IOption extends IBuildObject {
public static final int PREPROCESSOR_SYMBOLS = 5;
public static final int LIBRARIES = 6;
public static final int OBJECTS = 7;
+
+ // Browse type
+ public static final int BROWSE_NONE = 0;
+ public static final String NONE = "none"; //$NON-NLS-1$
+ public static final int BROWSE_FILE = 1;
+ public static final String FILE = "file"; //$NON-NLS-1$
+ public static final int BROWSE_DIR = 2;
+ public static final String DIR = "directory"; //$NON-NLS-1$
// Schema attribute names for option elements
+ public static final String BROSWE_TYPE = "browseType"; //$NON-NLS-1$
public static final String CATEGORY = "category"; //$NON-NLS-1$
public static final String COMMAND = "command"; //$NON-NLS-1$
public static final String COMMAND_FALSE = "commandFalse"; //$NON-NLS-1$
@@ -64,6 +73,11 @@ public interface IOption extends IBuildObject {
*/
public boolean getBooleanValue() throws BuildException;
+ /**
+ * @return
+ */
+ public int getBrowseType();
+
/**
* Answers an array of strings containing the built-in values
* defined for a stringList, includePaths, definedSymbols, or libs
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java
index c2a46c3a645..66a145f9430 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java
@@ -12,8 +12,8 @@ package org.eclipse.cdt.managedbuilder.core;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -23,12 +23,17 @@ import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
-import org.apache.xerces.dom.DocumentImpl;
-import org.apache.xml.serialize.Method;
-import org.apache.xml.serialize.OutputFormat;
-import org.apache.xml.serialize.Serializer;
-import org.apache.xml.serialize.SerializerFactory;
import org.eclipse.cdt.core.AbstractCExtension;
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfoChangeListener;
@@ -297,37 +302,61 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
*/
public static void saveBuildInfo(IProject project, boolean force) {
// Create document
- Document doc = new DocumentImpl();
- Element rootElement = doc.createElement(ROOT_ELEM_NAME);
- doc.appendChild(rootElement);
+ try {
+ DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = builder.newDocument();
+ Element rootElement = doc.createElement(ROOT_ELEM_NAME);
+ doc.appendChild(rootElement);
- // Save the build info
- ManagedBuildInfo buildInfo = (ManagedBuildInfo) getBuildInfo(project);
- if (buildInfo != null && (force == true || buildInfo.isDirty())) {
- buildInfo.serialize(doc, rootElement);
+ // Save the build info
+ ManagedBuildInfo buildInfo = (ManagedBuildInfo) getBuildInfo(project);
+ if (buildInfo != null && (force == true || buildInfo.isDirty())) {
+ buildInfo.serialize(doc, rootElement);
- // Save the document
- ByteArrayOutputStream s = new ByteArrayOutputStream();
- OutputFormat format = new OutputFormat();
- format.setIndenting(true);
- format.setLineSeparator(System.getProperty("line.separator")); //$NON-NLS-1$
- String xml = null;
- try {
- Serializer serializer
- = SerializerFactory.getSerializerFactory(Method.XML).makeSerializer(new OutputStreamWriter(s, "UTF8"), format); //$NON-NLS-1$
- serializer.asDOMSerializer().serialize(doc);
- xml = s.toString("UTF8"); //$NON-NLS-1$
- IFile rscFile = project.getFile(FILE_NAME);
- InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
- // update the resource content
- if (rscFile.exists()) {
- rscFile.setContents(inputStream, IResource.FORCE, null);
+ // Transform the document to something we can save in a file
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ Transformer transformer = TransformerFactory.newInstance().newTransformer();
+ transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$
+ transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //$NON-NLS-1$
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
+ DOMSource source = new DOMSource(doc);
+ StreamResult result = new StreamResult(stream);
+ transformer.transform(source, result);
+
+ // Save the document
+ IFile projectFile = project.getFile(FILE_NAME);
+ InputStream inputStream = new ByteArrayInputStream(stream.toByteArray());
+ if (projectFile.exists()) {
+ projectFile.setContents(inputStream, IResource.FORCE, null);
} else {
- rscFile.create(inputStream, IResource.FORCE, null);
+ projectFile.create(inputStream, IResource.FORCE, null);
}
- } catch (Exception e) {
- return;
+
+ // Close the streams
+ stream.close();
+ inputStream.close();
}
+ } catch (ParserConfigurationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (FactoryConfigurationError e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (TransformerConfigurationException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ } catch (TransformerFactoryConfigurationError e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ } catch (TransformerException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // The save failed
+ e.printStackTrace();
+ } catch (CoreException e) {
+ // Save to IFile failed
+ e.printStackTrace();
}
}
@@ -411,7 +440,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
throw new BuildException(ManagedBuilderCorePlugin.getResourceString("ManagedBuildManager.error.owner_not_project")); //$NON-NLS-1$
}
- // Passed validation
+ // Passed validation so create the target.
return new Target(resource, parentTarget);
}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedCProjectNature.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedCProjectNature.java
index 781c3b4ee0e..4d04c6c8352 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedCProjectNature.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedCProjectNature.java
@@ -28,7 +28,7 @@ import org.eclipse.core.runtime.Plugin;
public class ManagedCProjectNature implements IProjectNature {
public static final String BUILDER_NAME = "genmakebuilder"; //$NON-NLS-1$
public static final String BUILDER_ID = ManagedBuilderCorePlugin.getUniqueIdentifier() + "." + BUILDER_NAME; //$NON-NLS-1$
- private static final String MNG_NATURE_ID = ManagedBuilderCorePlugin.getUniqueIdentifier() + ".managedBuildNature"; //$NON-NLS-1$
+ public static final String MNG_NATURE_ID = ManagedBuilderCorePlugin.getUniqueIdentifier() + ".managedBuildNature"; //$NON-NLS-1$
private IProject project;
/**
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
index c82ca88439d..274a848020f 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
@@ -94,12 +94,16 @@ public class GeneratedMakefileBuilder extends ACBuilder {
*/
protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException {
String statusMsg = ManagedBuilderCorePlugin.getFormattedString(START, getProject().getName());
+ IProject[] deps = getProject().getReferencedProjects();
if (statusMsg != null) {
monitor.subTask(statusMsg);
}
// Get the build information
IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(getProject());
+ if (info == null) {
+ return deps;
+ }
if (kind == IncrementalProjectBuilder.FULL_BUILD || info.isDirty()) {
fullBuild(monitor, info);
@@ -124,7 +128,6 @@ public class GeneratedMakefileBuilder extends ACBuilder {
// Scrub the build info of all the projects participating in the build
info.setDirty(false);
- IProject[] deps = getProject().getReferencedProjects();
for (int i = 0; i < deps.length; i++) {
IProject project = deps[i];
IManagedBuildInfo depInfo = ManagedBuildManager.getBuildInfo(project);
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java
index b61c618c7da..d2e69760a5f 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java
@@ -110,6 +110,7 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo {
public void addTarget(ITarget target) {
getTargetMap().put(target.getId(), target);
getTargets().add(target);
+ setDirty(true);
}
/* (non-Javadoc)
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java
index 40719eb2b04..148536b6308 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java
@@ -30,6 +30,7 @@ public class Option extends BuildObject implements IOption {
private static final String[] EMPTY_STRING_ARRAY = new String[0];
// Private bookeeping attributes
+ private int browseType;
private List builtIns;
private IOptionCategory category;
private String command;
@@ -136,6 +137,17 @@ public class Option extends BuildObject implements IOption {
default :
break;
}
+
+ // Determine if there needs to be a browse button
+ String browseTypeStr = element.getAttribute(BROSWE_TYPE);
+ if (browseTypeStr == null || browseTypeStr.equals(NONE)) {
+ browseType = BROWSE_NONE;
+ } else if (browseTypeStr.equals(FILE)) {
+ browseType = BROWSE_FILE;
+ } else if (browseTypeStr.equals(DIR)) {
+ browseType = BROWSE_DIR;
+ }
+
}
public void resolveReferences() {
@@ -164,6 +176,13 @@ public class Option extends BuildObject implements IOption {
return bool.booleanValue();
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.managedbuilder.core.IOption#getBrowseType()
+ */
+ public int getBrowseType() {
+ return browseType;
+ }
+
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IOption#getBuiltIns()
*/
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java
index 1479e5e1581..02db8a4ab9e 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java
@@ -335,6 +335,13 @@ public class OptionReference implements IOption {
}
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.managedbuilder.core.IOption#getBrowseType()
+ */
+ public int getBrowseType() {
+ return option.getBrowseType();
+ }
+
private List getBuiltInList() {
if (builtIns == null) {
builtIns = new ArrayList();
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java
index 5f766090265..aee1ce7f78d 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java
@@ -87,7 +87,7 @@ public class Target extends BuildObject implements ITarget {
}
setId(owner.getName() + "." + parent.getId() + "." + id); //$NON-NLS-1$ //$NON-NLS-2$
setName(parent.getName());
- this.artifactName = parent.getArtifactName();
+ setArtifactName(parent.getArtifactName());
this.binaryParserId = parent.getBinaryParserId();
this.defaultExtension = parent.getArtifactExtension();
this.isTest = parent.isTestTarget();
@@ -226,6 +226,9 @@ public class Target extends BuildObject implements ITarget {
}
}
+ /**
+ *
+ */
public void resolveReferences() {
if (!resolved) {
resolved = true;
@@ -282,6 +285,10 @@ public class Target extends BuildObject implements ITarget {
* @see org.eclipse.cdt.managedbuilder.core.ITarget#resetMakeCommand()
*/
public void resetMakeCommand() {
+ // Flag target as dirty if the reset actually changes something
+ if (makeCommand != null) {
+ setDirty(true);
+ }
makeCommand = null;
makeArguments = null;
}