Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Inglis2004-03-31 21:45:57 +0000
committerDavid Inglis2004-03-31 21:45:57 +0000
commitd8a96ca65d097d6d2456c9c1de3141f791626acb (patch)
tree81bca27c7cef0e2fee2f41e330a30cec68158bc8 /build/org.eclipse.cdt.make.core
parentaffd1175f197641466befeb82ce1d3f03b290370 (diff)
downloadorg.eclipse.cdt-d8a96ca65d097d6d2456c9c1de3141f791626acb.tar.gz
org.eclipse.cdt-d8a96ca65d097d6d2456c9c1de3141f791626acb.tar.xz
org.eclipse.cdt-d8a96ca65d097d6d2456c9c1de3141f791626acb.zip
added clean build option
fixed make target with no target
Diffstat (limited to 'build/org.eclipse.cdt.make.core')
-rw-r--r--build/org.eclipse.cdt.make.core/plugin.xml5
-rw-r--r--build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeBuilderInfo.java6
-rw-r--r--build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java34
-rw-r--r--build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java2
-rw-r--r--build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeProjectNature.java2
-rw-r--r--build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/BuildInfoFactory.java18
-rw-r--r--build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTarget.java2
-rw-r--r--build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/ProjectTargets.java86
8 files changed, 122 insertions, 33 deletions
diff --git a/build/org.eclipse.cdt.make.core/plugin.xml b/build/org.eclipse.cdt.make.core/plugin.xml
index 7455ac32a3e..14dddcd1ef2 100644
--- a/build/org.eclipse.cdt.make.core/plugin.xml
+++ b/build/org.eclipse.cdt.make.core/plugin.xml
@@ -15,7 +15,6 @@
<requires>
<import plugin="org.eclipse.core.resources"/>
<import plugin="org.eclipse.cdt.core"/>
- <import plugin="org.apache.xerces"/>
<import plugin="org.eclipse.core.runtime.compatibility"/>
</requires>
@@ -69,8 +68,8 @@
name="%makeproject.name"
point="org.eclipse.cdt.core.CProject">
<cproject
- natureID="org.eclipse.cdt.make.core.makeNature"
- class="org.eclipse.cdt.make.internal.core.MakeProject">
+ class="org.eclipse.cdt.make.internal.core.MakeProject"
+ natureID="org.eclipse.cdt.make.core.makeNature">
</cproject>
</extension>
<extension
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeBuilderInfo.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeBuilderInfo.java
index f7d8a1884c0..51fa6b1a0f5 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeBuilderInfo.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeBuilderInfo.java
@@ -49,6 +49,12 @@ public interface IMakeBuilderInfo {
String getFullBuildTarget();
void setFullBuildTarget(String target) throws CoreException;
+ String getCleanBuildTarget();
+ void setCleanBuildTarget(String target) throws CoreException;
+
+ boolean isCleanBuildEnabled();
+ void setCleanBuildEnable(boolean enabled) throws CoreException;
+
String[] getErrorParsers();
void setErrorParsers(String[] parsers) throws CoreException;
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java
index dc3e60c34c4..e143deee225 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeBuilder.java
@@ -36,10 +36,13 @@ import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.core.runtime.jobs.Job;
public class MakeBuilder extends ACBuilder {
@@ -97,7 +100,29 @@ public class MakeBuilder extends ACBuilder {
return getProject().getReferencedProjects();
}
- private boolean invokeMake(int kind, IMakeBuilderInfo info, IProgressMonitor monitor) {
+
+ protected void clean(IProgressMonitor monitor) throws CoreException {
+ final IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(getProject(), BUILDER_ID);
+ if (shouldBuild(CLEAN_BUILD, info)) {
+ Job backgroundJob = new Job("Standard Make Builder"){ //$NON-NLS-1$
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+ protected IStatus run(IProgressMonitor monitor) {
+ invokeMake(CLEAN_BUILD, info, monitor);
+ IStatus returnStatus = Status.OK_STATUS;
+ return returnStatus;
+ }
+
+
+ };
+
+ backgroundJob.setRule(getProject());
+ backgroundJob.schedule();
+ }
+ }
+
+ protected boolean invokeMake(int kind, IMakeBuilderInfo info, IProgressMonitor monitor) {
boolean isClean = false;
IProject currProject = getProject();
@@ -128,7 +153,7 @@ public class MakeBuilder extends ACBuilder {
workingDirectory = currProject.getLocation();
}
String[] targets = getTargets(kind, info);
- if (targets.length != 0 && targets[targets.length - 1].equals("clean")) //$NON-NLS-1$
+ if (targets.length != 0 && targets[targets.length - 1].equals(info.getCleanBuildTarget())) //$NON-NLS-1$
isClean = true;
String errMsg = null;
@@ -257,6 +282,8 @@ public class MakeBuilder extends ACBuilder {
return info.isIncrementalBuildEnabled();
case IncrementalProjectBuilder.FULL_BUILD :
return info.isFullBuildEnabled();
+ case IncrementalProjectBuilder.CLEAN_BUILD :
+ return info.isCleanBuildEnabled();
}
return true;
}
@@ -273,6 +300,9 @@ public class MakeBuilder extends ACBuilder {
case IncrementalProjectBuilder.FULL_BUILD :
targets = info.getFullBuildTarget();
break;
+ case IncrementalProjectBuilder.CLEAN_BUILD :
+ targets = info.getCleanBuildTarget();
+ break;
}
return makeArray(targets);
}
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java
index a1026eb03c1..f5665cc2c61 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java
@@ -145,6 +145,8 @@ public class MakeCorePlugin extends Plugin {
info.setIncrementalBuildTarget("all"); //$NON-NLS-1$
info.setFullBuildEnable(true);
info.setFullBuildTarget("clean all"); //$NON-NLS-1$
+ info.setCleanBuildEnable(true);
+ info.setCleanBuildTarget("clean"); //$NON-NLS-1$
info.setErrorParsers(CCorePlugin.getDefault().getAllErrorParsersIDs());
} catch (CoreException e) {
}
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeProjectNature.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeProjectNature.java
index 07d31716504..87e0cc257c8 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeProjectNature.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeProjectNature.java
@@ -116,6 +116,8 @@ public class MakeProjectNature implements IProjectNature {
projectInfo.setFullBuildEnable(info.isFullBuildEnabled());
projectInfo.setFullBuildTarget(info.getFullBuildTarget());
+ projectInfo.setCleanBuildEnable(info.isCleanBuildEnabled());
+ projectInfo.setCleanBuildTarget(info.getCleanBuildTarget());
projectInfo.setErrorParsers(info.getErrorParsers());
}
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/BuildInfoFactory.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/BuildInfoFactory.java
index b5371ad4811..36e233aa5ec 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/BuildInfoFactory.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/BuildInfoFactory.java
@@ -46,7 +46,9 @@ public class BuildInfoFactory {
static final String BUILD_TARGET_AUTO = PREFIX + ".autoBuildTarget"; //$NON-NLS-1$
static final String BUILD_TARGET_INCREMENTAL = PREFIX + ".incrementalBuildTarget"; //$NON-NLS-1$
static final String BUILD_TARGET_FULL = PREFIX + ".fullBuildTarget"; //$NON-NLS-1$
+ static final String BUILD_TARGET_CLEAN = PREFIX + ".cleanBuildTarget"; //$NON-NLS-1$
static final String BUILD_FULL_ENABLED = PREFIX + ".enableFullBuild"; //$NON-NLS-1$
+ static final String BUILD_CLEAN_ENABLED = PREFIX + ".enableCleanBuild"; //$NON-NLS-1$
static final String BUILD_INCREMENTAL_ENABLED = PREFIX + ".enabledIncrementalBuild"; //$NON-NLS-1$
static final String BUILD_AUTO_ENABLED = PREFIX + ".enableAutoBuild"; //$NON-NLS-1$
static final String BUILD_ARGUMENTS = PREFIX + ".buildArguments"; //$NON-NLS-1$
@@ -145,6 +147,14 @@ public class BuildInfoFactory {
return getString(BUILD_TARGET_FULL);
}
+ public void setCleanBuildTarget(String target) throws CoreException {
+ putString(BUILD_TARGET_CLEAN, target);
+ }
+
+ public String getCleanBuildTarget() {
+ return getString(BUILD_TARGET_CLEAN);
+ }
+
public boolean getBoolean(String property) {
return Boolean.valueOf(getString(property)).booleanValue();
}
@@ -176,6 +186,14 @@ public class BuildInfoFactory {
return getBoolean(BUILD_FULL_ENABLED);
}
+ public void setCleanBuildEnable(boolean enabled) throws CoreException {
+ putString(BUILD_CLEAN_ENABLED, new Boolean(enabled).toString());
+ }
+
+ public boolean isCleanBuildEnabled() {
+ return getBoolean(BUILD_CLEAN_ENABLED);
+ }
+
public String getBuildArguments() {
return getString(BUILD_ARGUMENTS);
}
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTarget.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTarget.java
index 46bf5e0f4cc..6854fc7bc20 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTarget.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTarget.java
@@ -143,6 +143,6 @@ public class MakeTarget implements IMakeTarget {
}
public String getBuildTarget() {
- return target;
+ return target != null ? target : ""; //$NON-NLS-1$
}
}
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/ProjectTargets.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/ProjectTargets.java
index c43177a7041..c978ab0650f 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/ProjectTargets.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/ProjectTargets.java
@@ -3,8 +3,10 @@ package org.eclipse.cdt.make.internal.core;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -13,6 +15,12 @@ import java.util.Map;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.ICDescriptor;
@@ -45,7 +53,8 @@ public class ProjectTargets {
private static final String TARGET_USE_DEFAULT_CMD = "useDefaultCommand"; //$NON-NLS-1$
private static final String TARGET_ARGUMENTS = "buildArguments"; //$NON-NLS-1$
private static final String TARGET_COMMAND = "buildCommand"; //$NON-NLS-1$
- private static final String TARGET = "buidlTarget"; //$NON-NLS-1$
+ private static final String BAD_TARGET = "buidlTarget"; //$NON-NLS-1$
+ private static final String TARGET = "buildTarget"; //$NON-NLS-1$
private HashMap targetMap = new HashMap();
@@ -78,8 +87,9 @@ public class ProjectTargets {
extractMakeTargetsFromDocument(document, manager);
if (writeTargets) {
try {
- saveTargets();
- } catch (IOException e) {
+ Document doc = getAsXML();
+ translateDocumentToCDTProject(doc);
+ } catch (Exception e) {
targetFile = null;
}
if (targetFile != null) {
@@ -192,13 +202,17 @@ public class ProjectTargets {
targetElem.appendChild(elem);
elem.appendChild(doc.createTextNode(target.getBuildCommand().toString()));
- elem = doc.createElement(TARGET_ARGUMENTS);
- elem.appendChild(doc.createTextNode(target.getBuildArguments()));
- targetElem.appendChild(elem);
+ if (target.getBuildArguments().length() > 0) {
+ elem = doc.createElement(TARGET_ARGUMENTS);
+ elem.appendChild(doc.createTextNode(target.getBuildArguments()));
+ targetElem.appendChild(elem);
+ }
- elem = doc.createElement(TARGET);
- elem.appendChild(doc.createTextNode(target.getBuildTarget()));
- targetElem.appendChild(elem);
+ if (target.getBuildTarget().length() > 0) {
+ elem = doc.createElement(TARGET);
+ elem.appendChild(doc.createTextNode(target.getBuildTarget()));
+ targetElem.appendChild(elem);
+ }
elem = doc.createElement(TARGET_STOP_ON_ERROR);
elem.appendChild(doc.createTextNode(new Boolean(target.isStopOnError()).toString()));
@@ -211,19 +225,37 @@ public class ProjectTargets {
}
public void saveTargets() throws IOException {
+ Document doc = getAsXML();
+ //Historical method would save the output to the stream specified
+ //translateDocumentToOutputStream(doc, output);
try {
- Document doc = getAsXML();
- //Historical method would save the output to the stream specified
- //translateDocumentToOutputStream(doc, output);
translateDocumentToCDTProject(doc);
- } catch (CoreException ex) {
- throw new IOException(ex.getMessage());
+ } catch (Exception e) {
+ IPath targetFilePath = MakeCorePlugin.getDefault().getStateLocation().append(project.getName()).addFileExtension(
+ TARGETS_EXT);
+ File targetFile = targetFilePath.toFile();
+ try {
+ saveTargets(doc, new FileOutputStream(targetFile));
+ } catch (FileNotFoundException e1) {
+ } catch (IOException e1) {
+ } catch (TransformerException e1) {
+ }
}
}
+ protected void saveTargets(Document doc, OutputStream output) throws IOException, TransformerException {
+ TransformerFactory factory = TransformerFactory.newInstance();
+ Transformer transformer;
+ transformer = factory.newTransformer();
+ transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
+
+ DOMSource source = new DOMSource(doc);
+ StreamResult outputTarget = new StreamResult(output);
+ transformer.transform(source, outputTarget);
+ }
/**
- * This output method saves the information into the .cdtproject metadata
- * file.
+ * This output method saves the information into the .cdtproject metadata file.
*
* @param doc
* @throws IOException
@@ -254,8 +286,7 @@ public class ProjectTargets {
}
/**
- * This method parses the .cdtproject file for the XML document describing
- * the build targets.
+ * This method parses the .cdtproject file for the XML document describing the build targets.
*
* @param input
* @return
@@ -269,26 +300,24 @@ public class ProjectTargets {
descriptor = CCorePlugin.getDefault().getCProjectDescription(getProject());
rootElement = descriptor.getProjectData(MAKE_TARGET_KEY);
- } catch ( ParserConfigurationException e) {
+ } catch (ParserConfigurationException e) {
return document;
- } catch ( CoreException e) {
+ } catch (CoreException e) {
return document;
}
- Element element = rootElement.getOwnerDocument().getDocumentElement();
NodeList list = rootElement.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
- if ( list.item(i).getNodeType() == Node.ELEMENT_NODE) {
+ if (list.item(i).getNodeType() == Node.ELEMENT_NODE) {
Node appendNode = document.importNode(list.item(i), true);
document.appendChild(appendNode);
- break; // show never have multiple <buildtargets>
+ break; // should never have multiple <buildtargets>
}
}
return document;
}
/**
- * This method parses the input stream for the XML document describing the
- * build targets.
+ * This method parses the input stream for the XML document describing the build targets.
*
* @param input
* @return
@@ -304,8 +333,7 @@ public class ProjectTargets {
}
/**
- * Extract the make target information which is contained in the XML
- * Document
+ * Extract the make target information which is contained in the XML Document
*
* @param document
*/
@@ -344,6 +372,10 @@ public class ProjectTargets {
if (option != null) {
target.setBuildArguments(option);
}
+ option = getString(node, BAD_TARGET);
+ if (option != null) {
+ target.setBuildTarget(option);
+ }
option = getString(node, TARGET);
if (option != null) {
target.setBuildTarget(option);

Back to the top