diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTarget.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTarget.java
index db4b7414a0b..46655d01551 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTarget.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTarget.java
@@ -25,9 +25,11 @@ public interface IMakeTarget {
boolean isDefaultBuildCmd();
void setUseDefaultBuildCmd(boolean useDefault);
+ void setBuildTarget(String target);
+ String getBuildTarget();
+
IPath getBuildCommand();
void setBuildCommand(IPath command);
-
String getBuildArguments();
void setBuildArguments(String arguments);
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTargetManager.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTargetManager.java
index 9bdd4e3df1d..4bf9c7fa141 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTargetManager.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/IMakeTargetManager.java
@@ -15,7 +15,8 @@ import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
public interface IMakeTargetManager {
- IMakeTarget addTarget(IContainer container, String targetBuilderID, String targetName) throws CoreException;
+ IMakeTarget createTarget(String targetName, String targetID);
+ void addTarget(IContainer container, IMakeTarget target) throws CoreException;
void removeTarget(IMakeTarget target) throws CoreException;
void renameTarget(IMakeTarget target, String name) throws CoreException;
@@ -23,8 +24,9 @@ public interface IMakeTargetManager {
IMakeTarget findTarget(IContainer container, String name);
IProject[] getTargetBuilderProjects() throws CoreException;
-
- String getBuilderID(String targetBuilderID);
+
+ String getBuilderID(String targetID);
+
String[] getTargetBuilders(IProject project);
void addListener(IMakeTargetListener listener);
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 823371035af..5e3ec6c65b9 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
@@ -19,9 +19,11 @@ 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.Path;
public class MakeTarget implements IMakeTarget {
+ private String target;
private String buildArguments;
private IPath buildCommand;
private boolean isDefaultBuildCmd;
@@ -29,13 +31,18 @@ public class MakeTarget implements IMakeTarget {
private String name;
private String targetBuilderID;
private IContainer container;
-
- MakeTarget(IContainer container, String targetBuilderID, String name) {
- this.container = container;
+ private MakeTargetManager manager;
+
+ MakeTarget(MakeTargetManager manager, String targetBuilderID, String name) {
+ this.manager = manager;
this.targetBuilderID = targetBuilderID;
this.name = name;
}
+ void setContainer(IContainer container) {
+ this.container = container;
+ }
+
void setName(String name) {
this.name = name;
}
@@ -65,7 +72,7 @@ public class MakeTarget implements IMakeTarget {
}
public IPath getBuildCommand() {
- return buildCommand;
+ return buildCommand != null ? buildCommand: new Path("");
}
public void setBuildCommand(IPath command) {
@@ -73,7 +80,7 @@ public class MakeTarget implements IMakeTarget {
}
public String getBuildArguments() {
- return buildArguments;
+ return buildArguments != null ? buildArguments : "";
}
public void setBuildArguments(String arguments) {
@@ -100,16 +107,29 @@ public class MakeTarget implements IMakeTarget {
public void build(IProgressMonitor monitor) throws CoreException {
IProject project = container.getProject();
- String builderID = MakeCorePlugin.getDefault().getTargetManager().getBuilderID(targetBuilderID);
+ String builderID = manager.getBuilderID(targetBuilderID);
HashMap infoMap = new HashMap();
IMakeBuilderInfo info = MakeCorePlugin.createBuildInfo(infoMap, builderID);
- info.setBuildArguments(buildArguments);
- info.setBuildCommand(buildCommand);
+ if ( buildArguments != null) {
+ info.setBuildArguments(buildArguments);
+ }
+ if ( buildCommand != null ) {
+ info.setBuildCommand(buildCommand);
+ }
info.setUseDefaultBuildCmd(isDefaultBuildCmd);
info.setStopOnError(isStopOnError);
info.setFullBuildEnable(true);
- info.setFullBuildTarget(buildArguments);
+ info.setFullBuildTarget(target);
info.setBuildLocation(container.getLocation());
project.build(IncrementalProjectBuilder.FULL_BUILD, builderID, infoMap, monitor);
}
+
+ public void setBuildTarget(String target) {
+ this.target = target;
+
+ }
+
+ public String getBuildTarget() {
+ return target;
+ }
}
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetManager.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetManager.java
index e654bcff06f..d6219f71905 100644
--- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetManager.java
+++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/MakeTargetManager.java
@@ -48,6 +48,8 @@ import org.eclipse.core.runtime.Status;
public class MakeTargetManager implements IMakeTargetManager, IResourceChangeListener {
private static String TARGET_BUILD_EXT = "MakeTargetBuilder"; //$NON-NLS-1$
+ private static String TARGETS_EXT = "targets"; //$NON-NLS-1$
+
private ListenerList listeners = new ListenerList();
private HashMap projectMap = new HashMap();
private HashMap builderMap;
@@ -56,19 +58,23 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
public MakeTargetManager() {
}
- public IMakeTarget addTarget(IContainer container, String targetBuilderID, String targetName) throws CoreException {
+ public IMakeTarget createTarget(String name, String targetBuilderID) {
+ return new MakeTarget(this, targetBuilderID, name);
+ }
+
+ public void addTarget(IContainer container, IMakeTarget target) throws CoreException {
if (container instanceof IWorkspaceRoot) {
throw new CoreException(new Status(IStatus.ERROR, MakeCorePlugin.getUniqueIdentifier(), -1, MakeCorePlugin.getResourceString("MakeTargetManager.add_to_workspace_root"), null)); //$NON-NLS-1$
}
- ProjectTargets projectTargets = (ProjectTargets) projectMap.get(container.getProject());
+ IProject project = container.getProject();
+ ProjectTargets projectTargets = (ProjectTargets) projectMap.get(project);
if (projectTargets == null) {
- projectTargets = readTargets(container.getProject());
+ projectTargets = readTargets(project);
}
- MakeTarget target = new MakeTarget(container, targetBuilderID, targetName);
- projectTargets.add(target);
+ ((MakeTarget)target).setContainer(container);
+ projectTargets.add((MakeTarget)target);
writeTargets(projectTargets);
notifyListeners(new MakeTargetEvent(this, MakeTargetEvent.TARGET_ADD, target));
- return target;
}
public void removeTarget(IMakeTarget target) throws CoreException {
@@ -231,7 +237,7 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
}
protected void writeTargets(ProjectTargets projectTargets) throws CoreException {
- IPath targetFilePath = MakeCorePlugin.getDefault().getStateLocation().append(projectTargets.getProject().getName());
+ IPath targetFilePath = MakeCorePlugin.getDefault().getStateLocation().append(projectTargets.getProject().getName()).addFileExtension(TARGETS_EXT);
File targetFile = targetFilePath.toFile();
try {
FileOutputStream file = new FileOutputStream(targetFile);
@@ -244,15 +250,21 @@ public class MakeTargetManager implements IMakeTargetManager, IResourceChangeLis
}
protected ProjectTargets readTargets(IProject project) {
- IPath targetFilePath = MakeCorePlugin.getDefault().getStateLocation().append(project.getName());
+ IPath targetFilePath = MakeCorePlugin.getDefault().getStateLocation().append(project.getName()).addFileExtension(TARGETS_EXT);
File targetFile = targetFilePath.toFile();
+ ProjectTargets projectTargets = null;
if (targetFile.exists()) {
try {
- return new ProjectTargets(project, new FileInputStream(targetFile));
+ projectTargets = new ProjectTargets(this, project, new FileInputStream(targetFile));
} catch (FileNotFoundException e) {
}
}
- return new ProjectTargets(project);
+ if ( projectTargets == null) {
+ projectTargets = new ProjectTargets(this, project);
+ }
+ projectMap.put(project, projectTargets);
+ return projectTargets;
+
}
protected void initializeBuilders() {
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 db5047b7391..d4db46f72e9 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
@@ -7,6 +7,8 @@ import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -31,19 +33,31 @@ import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class ProjectTargets {
- private static String BUILD_TARGET_ELEMENT = "buildTargets"; //$NON-NLS-1$
- private static String TARGET_ELEMENT = "target"; //$NON-NLS-1$
+ private static final String BUILD_TARGET_ELEMENT = "buildTargets"; //$NON-NLS-1$
+ private static final String TARGET_ELEMENT = "target"; //$NON-NLS-1$
+ private static final String TARGET_ATTR_ID = "targetID"; //$NON-NLS-1$
+ private static final String TARGET_ATTR_PATH = "path";
+ private static final String TARGET_ATTR_NAME = "name";
+ private static final String TARGET_STOP_ON_ERROR = "stopOnError";
+ private static final String TARGET_USE_DEFAULT_CMD = "useDefaultCommand";
+ private static final String TARGET_ARGUMENTS = "buildArguments";
+ private static final String TARGET_COMMAND ="buildCommand";
+ private static final String TARGET = "buidlTarget";
+
private HashMap targetMap = new HashMap();
- private IProject project;
- public ProjectTargets(IProject project) {
+ private IProject project;
+ private MakeTargetManager manager;
+
+ public ProjectTargets(MakeTargetManager manager, IProject project) {
this.project = project;
+ this.manager = manager;
}
- public ProjectTargets(IProject project, InputStream input) {
- this(project);
-
+ public ProjectTargets(MakeTargetManager manager, IProject project, InputStream input) {
+ this(manager, project);
+
Document document = null;
try {
DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
@@ -59,29 +73,34 @@ public class ProjectTargets {
if (node.getNodeName().equals(TARGET_ELEMENT)) {
IContainer container = null;
NamedNodeMap attr = node.getAttributes();
- String path = attr.getNamedItem("targetID").getNodeValue();
- if (path != null) {
+ String path = attr.getNamedItem(TARGET_ATTR_PATH).getNodeValue();
+ if (path != null && !path.equals("")) {
container = project.getFolder(path);
} else {
container = project;
}
- MakeTarget target = new MakeTarget(container, attr.getNamedItem("targetID").getNodeValue(), attr.getNamedItem("name").getNodeValue()); //$NON-NLS-1$ //$NON-NLS-2$
- String option = getString(node, "stopOnError");
+ MakeTarget target = new MakeTarget(manager, attr.getNamedItem(TARGET_ATTR_ID).getNodeValue(), attr.getNamedItem(TARGET_ATTR_NAME).getNodeValue());
+ target.setContainer(container);
+ String option = getString(node, TARGET_STOP_ON_ERROR);
if (option != null) {
target.setStopOnError(Boolean.valueOf(option).booleanValue());
}
- option = getString(node, "useDefaultCommand");
+ option = getString(node, TARGET_USE_DEFAULT_CMD);
if (option != null) {
target.setUseDefaultBuildCmd(Boolean.valueOf(option).booleanValue());
}
- option = getString(node, "buildCommand");
+ option = getString(node, TARGET_COMMAND);
if (option != null) {
target.setBuildCommand(new Path(option));
}
- option = getString(node, "buildArguments");
+ option = getString(node, TARGET_ARGUMENTS);
if (option != null) {
target.setBuildArguments(option);
}
+ option = getString(node, TARGET);
+ if (option != null) {
+ target.setBuildTarget(option);
+ }
try {
add(target);
} catch (CoreException e) {
@@ -113,17 +132,17 @@ public class ProjectTargets {
}
return new IMakeTarget[0];
}
-
+
public IMakeTarget findTarget(IContainer container, String name) {
ArrayList list = (ArrayList) targetMap.get(container);
if (list != null) {
Iterator targets = list.iterator();
- while( targets.hasNext()) {
- IMakeTarget target = (IMakeTarget)targets.next();
- if ( target.getName().equals(name) ) {
+ while (targets.hasNext()) {
+ IMakeTarget target = (IMakeTarget) targets.next();
+ if (target.getName().equals(name)) {
return target;
}
- }
+ }
}
return null;
}
@@ -165,11 +184,46 @@ public class ProjectTargets {
protected Document getAsXML() throws IOException {
Document doc = new DocumentImpl();
- Element configRootElement = doc.createElement(BUILD_TARGET_ELEMENT);
- doc.appendChild(configRootElement);
+ Element targetsRootElement = doc.createElement(BUILD_TARGET_ELEMENT);
+ doc.appendChild(targetsRootElement);
+ Iterator container = targetMap.entrySet().iterator();
+ while (container.hasNext()) {
+ List targets = (List) ((Map.Entry)container.next()).getValue();
+ for (int i = 0; i < targets.size(); i++) {
+ MakeTarget target = (MakeTarget) targets.get(i);
+ targetsRootElement.appendChild(createTargetElement(doc, target));
+ }
+ }
return doc;
}
+ private Node createTargetElement(Document doc, MakeTarget target) {
+ Element targetElem = doc.createElement(TARGET_ELEMENT);
+ targetElem.setAttribute(TARGET_ATTR_NAME, target.getName());
+ targetElem.setAttribute(TARGET_ATTR_ID, target.getTargetBuilderID());
+ targetElem.setAttribute(TARGET_ATTR_PATH, target.getContainer().getProjectRelativePath().toString());
+ Element elem = doc.createElement(TARGET_COMMAND);
+ targetElem.appendChild(elem);
+ elem.appendChild(doc.createTextNode(target.getBuildCommand().toString()));
+
+ 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);
+
+ elem = doc.createElement(TARGET_STOP_ON_ERROR);
+ elem.appendChild(doc.createTextNode(new Boolean(target.isStopOnError()).toString()));
+ targetElem.appendChild(elem);
+
+ elem = doc.createElement(TARGET_USE_DEFAULT_CMD);
+ elem.appendChild(doc.createTextNode(new Boolean(target.isDefaultBuildCmd()).toString()));
+ targetElem.appendChild(elem);
+ return targetElem;
+ }
+
public void saveTargets(OutputStream output) throws IOException {
Document doc = getAsXML();
OutputFormat format = new OutputFormat();
diff --git a/build/org.eclipse.cdt.make.ui/icons/cview16/make.gif b/build/org.eclipse.cdt.make.ui/icons/cview16/make_target.gif
similarity index 100%
rename from build/org.eclipse.cdt.make.ui/icons/cview16/make.gif
rename to build/org.eclipse.cdt.make.ui/icons/cview16/make_target.gif
diff --git a/build/org.eclipse.cdt.make.ui/icons/obj16/error_obj.gif b/build/org.eclipse.cdt.make.ui/icons/obj16/error_obj.gif
new file mode 100644
index 00000000000..b04020bc723
Binary files /dev/null and b/build/org.eclipse.cdt.make.ui/icons/obj16/error_obj.gif differ
diff --git a/build/org.eclipse.cdt.make.ui/icons/obj16/target.gif b/build/org.eclipse.cdt.make.ui/icons/obj16/target_obj.gif
similarity index 100%
rename from build/org.eclipse.cdt.make.ui/icons/obj16/target.gif
rename to build/org.eclipse.cdt.make.ui/icons/obj16/target_obj.gif
diff --git a/build/org.eclipse.cdt.make.ui/plugin.properties b/build/org.eclipse.cdt.make.ui/plugin.properties
index 8d5960be605..efb747d0d07 100644
--- a/build/org.eclipse.cdt.make.ui/plugin.properties
+++ b/build/org.eclipse.cdt.make.ui/plugin.properties
@@ -12,12 +12,10 @@ WizardConvertMakeProject.description=Convert a C/C++ Project to use a simple mak
MenuMakeNew.label=Make Builds
-ActionMakeBuildCreate.label=Build/Create Make Target...
-ActionMakeAll.label=Make all
-ActionMakeClean.label=Make clean
-ActionMakeRebuild.label=Make rebuild
-ActionMakeUpdate.label=Update Old Make Project...
+ActionMakeCreateTarget.label=Create Make Target...
+ActionMakeBuildTarget.label=Build Make Target...
+ActionMakeUpdate.label=Update Old Make Project...
CommandMakeBuildCreate.name=Build/Create Make Target
CommandMakeBuildCreate.description=Build or create a new make build target
@@ -28,4 +26,5 @@ PropertyMakeProject.name= C/C++ Make Project
ViewCatagoryMake.name=Make
ViewMake.name=Make Targets
-ActionSetMake.label=Make Action Set
\ No newline at end of file
+ActionSetMake.label=Make Actions
+ActionSetUpdateMake.label=Update Make Projects
diff --git a/build/org.eclipse.cdt.make.ui/plugin.xml b/build/org.eclipse.cdt.make.ui/plugin.xml
index c95b1bdcb45..1c0ac1a4fe1 100644
--- a/build/org.eclipse.cdt.make.ui/plugin.xml
+++ b/build/org.eclipse.cdt.make.ui/plugin.xml
@@ -77,11 +77,18 @@
adaptable="false"
id="org.eclipse.cdt.make.ui.popupMenu.CViewContribution">
+ id="org.eclipse.cdt.make.ui.CViewCreateTargetAction">
+
+