diff --git a/build/org.eclipse.cdt.managedbuilder.core/ChangeLog b/build/org.eclipse.cdt.managedbuilder.core/ChangeLog
index c3f23ed0be0..55e3d673bab 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/ChangeLog
+++ b/build/org.eclipse.cdt.managedbuilder.core/ChangeLog
@@ -1,3 +1,20 @@
+2003-09-19 Sean Evoy
+ Added a new field to the target specification in the build model to
+ hard-code the binary parser for project creation. There is a new getter
+ method in the interface and the implementor contains additional code to
+ extract the information from a project file or plugin manifest. The
+ interface also contains new strings to make changing the specification
+ easier in the future.
+ * schema/ManagedBuildTools.exsd
+ * src/org/eclipse/cdt/managedbuilder/core/ITarget.java
+ * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java
+
+ Fix for bug 41720: libraries are now found for Solaris and Linux
+ executables. The problem was the executable had no extension and
+ the client of the build model passed null instead of the empty string.
+ * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
+ * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java
+
2003-09-16 Sean Evoy
Patch contains a fix for bug 43017. Renamed the "addDeps" method to a
more descriptive "addSourceDependencies". Added a flag when the
diff --git a/build/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd b/build/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd
index 72aab2bf240..79709bc8f5e 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd
+++ b/build/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd
@@ -387,6 +387,13 @@ Two additional types exist to flag options of special relevance to the build mod
+
+
+
+ Set this to the ID of the binary parser for the output format of your target. Currently there are only 2 choices: org.eclipse.cdt.core.ELF for *nix targets, and "org.eclipse.cdt.core.PE" for targets that build for Windows, like Cygwin.
+
+
+
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITarget.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITarget.java
index 3440e2ad9ef..4f7f11be028 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITarget.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITarget.java
@@ -18,7 +18,15 @@ import org.eclipse.core.resources.IResource;
*/
public interface ITarget extends IBuildObject {
public static final String TARGET_ELEMENT_NAME = "target"; //$NON-NLS-1$
-
+ public static final String ARTIFACT_NAME = "artifactName"; //$NON-NLS-1$
+ public static final String BINARY_PARSER = "binaryParser"; //$NON-NLS-1$
+ public static final String CLEAN_COMMAND = "cleanCommand"; //$NON-NLS-1$
+ public static final String DEFAULT_EXTENSION = "defaultExtension"; //$NON-NLS-1$
+ public static final String IS_ABSTRACT = "isAbstract"; //$NON-NLS-1$
+ public static final String IS_TEST = "isTest"; //$NON-NLS-1$
+ public static final String MAKE_COMMAND = "makeCommand"; //$NON-NLS-1$
+ public static final String PARENT = "parent"; //$NON-NLS-1$
+
/**
* Creates a configuration for the target populated with the tools and
* options settings from the parent configuration. As options and tools
@@ -47,6 +55,13 @@ public interface ITarget extends IBuildObject {
*/
public String getArtifactName();
+ /**
+ * Answers the unique ID of the binary parser associated with the target.
+ *
+ * @return
+ */
+ public String getBinaryParserId();
+
/**
* Answers the OS-specific command to remove files created by the build
*
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 19b4aaf1a9a..408bc0fd396 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
@@ -18,19 +18,17 @@ import java.util.Enumeration;
import java.util.List;
import java.util.Map;
import java.util.Properties;
-import java.util.StringTokenizer;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CommandLauncher;
import org.eclipse.cdt.core.ConsoleOutputStream;
import org.eclipse.cdt.core.ErrorParserManager;
-import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
-import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
-import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
import org.eclipse.cdt.core.model.ICModelMarker;
import org.eclipse.cdt.core.resources.ACBuilder;
import org.eclipse.cdt.core.resources.IConsole;
-import org.eclipse.cdt.core.resources.MakeUtil;
+import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@@ -208,18 +206,7 @@ public class GeneratedMakefileBuilder extends ACBuilder {
if (fullBuild) {
args.add("clean");
}
- // Add each target
- String sessionTarget = MakeUtil.getSessionTarget(getProject());
- StringTokenizer tokens = new StringTokenizer(sessionTarget);
- while (tokens.hasMoreTokens()) {
- String target = tokens.nextToken().trim();
- if (!args.contains(target)) {
- args.add(target);
- }
- }
- if (args.isEmpty() || !args.contains("all")) {
- args.add("all");
- }
+ args.add("all");
return (String[])args.toArray(new String[args.size()]);
}
@@ -233,7 +220,10 @@ public class GeneratedMakefileBuilder extends ACBuilder {
return resourcesToBuild;
}
- /**
+ /* (non-javadoc)
+ * Answers the list of build rules that have been assembled. If there are none,
+ * answers an empty list, never null
+ *
* @return
*/
protected List getRuleList() {
@@ -248,9 +238,7 @@ public class GeneratedMakefileBuilder extends ACBuilder {
*/
public IPath getWorkingDirectory() {
IProject currProject = getProject();
- IPath workingDirectory = new Path(MakeUtil.getSessionBuildDir((IResource) currProject));
- if (workingDirectory.isEmpty())
- workingDirectory = currProject.getLocation();
+ IPath workingDirectory = currProject.getLocation();
return workingDirectory;
}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java
index 840e40102cb..7d81471b348 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java
@@ -80,6 +80,9 @@ public class MakefileGenerator {
protected IPath topBuildDir;
protected boolean shouldRunBuild;
+ private String target;
+
+ private String extension;
/**
* This class is used to recursively walk the project and determine which
* modules contribute buildable source files.
@@ -211,6 +214,13 @@ public class MakefileGenerator {
this.info = info;
// By default a build never runs
shouldRunBuild = false;
+ // Get the name of the build target
+ target = info.getBuildArtifactName();
+ // Get its extension
+ extension = (new Path(target)).getFileExtension();
+ if (extension == null) {
+ extension = new String();
+ }
}
/* (non-javadoc)
@@ -289,12 +299,22 @@ public class MakefileGenerator {
buffer.append(ManagedBuilderCorePlugin.getResourceString(SRC_LISTS) + NEWLINE);
buffer.append("C_SRCS := " + NEWLINE);
- buffer.append("CC_SRCS := " + NEWLINE + NEWLINE);
+ buffer.append("CC_SRCS := " + NEWLINE);
+ buffer.append("CXX_SRCS := " + NEWLINE);
+ buffer.append("CAPC_SRCS := " + NEWLINE);
+ buffer.append("CPP_SRCS := " + NEWLINE + NEWLINE);
// Add the libraries this project depends on
buffer.append("LIBS := ");
+ String[] libs = info.getLibsForTarget(extension);
+ for (int i = 0; i < libs.length; i++) {
+ String string = libs[i];
+ buffer.append(LINEBREAK + NEWLINE + string);
+ }
buffer.append(NEWLINE + NEWLINE);
- return buffer;
+
+ buffer.append("OBJS = $(C_SRCS:$(ROOT)/%.c=%.o) $(CC_SRCS:$(ROOT)/%.cc=%.o) $(CXX_SRCS:$(ROOT)/%.cxx=%.o) $(CAPC_SRCS:$(ROOT)/%.C=%.o) $(CPP_SRCS:$(ROOT)/%.cpp=%.o)" + NEWLINE);
+ return (buffer.append(NEWLINE));
}
/* (non-javadoc)
@@ -347,6 +367,12 @@ public class MakefileGenerator {
cBuffer.append("${addprefix $(ROOT)/" + relativePath + "," + LINEBREAK + NEWLINE);
StringBuffer ccBuffer = new StringBuffer("CC_SRCS += \\" + NEWLINE);
ccBuffer.append("${addprefix $(ROOT)/" + relativePath + "," + LINEBREAK + NEWLINE);
+ StringBuffer cxxBuffer = new StringBuffer("CXX_SRCS += \\" + NEWLINE);
+ cxxBuffer.append("${addprefix $(ROOT)/" + relativePath + "," + LINEBREAK + NEWLINE);
+ StringBuffer capcBuffer = new StringBuffer("CAPC_SRCS += \\" + NEWLINE);
+ capcBuffer.append("${addprefix $(ROOT)/" + relativePath + "," + LINEBREAK + NEWLINE);
+ StringBuffer cppBuffer = new StringBuffer("CPP_SRCS += \\" + NEWLINE);
+ cppBuffer.append("${addprefix $(ROOT)/" + relativePath + "," + LINEBREAK + NEWLINE);
StringBuffer ruleBuffer = new StringBuffer(ManagedBuilderCorePlugin.getResourceString(MOD_RULES) + NEWLINE);
// Put the comment in
@@ -359,8 +385,18 @@ public class MakefileGenerator {
if (resource.getType() == IResource.FILE) {
String ext = resource.getFileExtension();
if (info.buildsFileType(ext)) {
- // TODO use build model to determine what list the file goes in
- ccBuffer.append(resource.getName() + WHITESPACE + LINEBREAK + NEWLINE);
+ if (new String("c").equals(ext)) {
+ cBuffer.append(resource.getName() + WHITESPACE + LINEBREAK + NEWLINE);
+ } else if (new String("cc").equalsIgnoreCase(ext)) {
+ ccBuffer.append(resource.getName() + WHITESPACE + LINEBREAK + NEWLINE);
+ } else if (new String("cxx").equalsIgnoreCase(ext)) {
+ cxxBuffer.append(resource.getName() + WHITESPACE + LINEBREAK + NEWLINE);
+ } else if (new String("C").equals(ext)) {
+ capcBuffer.append(resource.getName() + WHITESPACE + LINEBREAK + NEWLINE);
+ } else {
+ cppBuffer.append(resource.getName() + WHITESPACE + LINEBREAK + NEWLINE);
+ }
+
// Try to add the rule for the file
addRule(relativePath, ruleBuffer, resource);
}
@@ -368,12 +404,13 @@ public class MakefileGenerator {
}
// Finish the commands in the buffers
- cBuffer.append("}" + NEWLINE + NEWLINE);
- ccBuffer.append("}" + NEWLINE + NEWLINE);
+ buffer.append(cBuffer.append("}" + NEWLINE + NEWLINE));
+ buffer.append(ccBuffer.append("}" + NEWLINE + NEWLINE));
+ buffer.append(cxxBuffer.append("}" + NEWLINE + NEWLINE));
+ buffer.append(capcBuffer.append("}" + NEWLINE + NEWLINE));
+ buffer.append(cppBuffer.append("}" + NEWLINE + NEWLINE));
- // Append them all together
- buffer.append(cBuffer).append(ccBuffer).append(ruleBuffer);
- return buffer;
+ return buffer.append(ruleBuffer + NEWLINE);
}
/* (non-javadoc)
@@ -383,65 +420,77 @@ public class MakefileGenerator {
protected StringBuffer addTargets(boolean rebuild) {
StringBuffer buffer = new StringBuffer();
- // Get the target and it's extension
- String target = info.getBuildArtifactName();
- IPath temp = new Path(target);
- String extension = temp.getFileExtension();
-
- /*
- * Write out the target rule as:
- * .: $(CC_SRCS:$(ROOT)/%.cpp=%.o) $(C_SRCS:$(ROOT)/%.c=%.o)
- * ; $(MAKE) all>
- * ; $(MAKE) all>
- * ; $(MAKE) all>
- * $(BUILD_TOOL) $(FLAGS) $(OUTPUT_FLAG) $@ $^ $(LIB_DEPS)
- */
+ // Assemble the information needed to generate the targets
String cmd = info.getToolForTarget(extension);
String flags = info.getFlagsForTarget(extension);
String outflag = info.getOutputFlag(extension);
String outputPrefix = info.getOutputPrefix(extension);
String targets = rebuild ? "clean all" : "all";
- buffer.append(outputPrefix + target + COLON + WHITESPACE + "$(CC_SRCS:$(ROOT)/%.cpp=%.o) $(C_SRCS:$(ROOT)/%.c=%.o)" + NEWLINE);
- IProject[] deps;
+
+ // Get all the projects the build target depends on
+ IProject[] deps = null;
try {
deps = project.getReferencedProjects();
- for (int i = 0; i < deps.length; i++) {
- IProject dep = deps[i];
- String buildDir = dep.getLocation().toString();
- if (ManagedBuildManager.manages(dep)) {
- IManagedBuildInfo depInfo = ManagedBuildManager.getBuildInfo(dep);
- buildDir += SEPARATOR + depInfo.getConfigurationName();
- }
- buffer.append(TAB + "cd" + WHITESPACE + buildDir + SEMI_COLON + WHITESPACE + "$(MAKE) " + targets + NEWLINE);
- }
} catch (CoreException e) {
// There are 2 exceptions; the project does not exist or it is not open
// and neither conditions apply if we are building for it ....
}
- buffer.append(TAB + cmd + WHITESPACE + flags + WHITESPACE + outflag + WHITESPACE + "$@" + WHITESPACE + "$^");
- String[] libraries = info.getLibsForTarget(extension);
- for (int i = 0; i < libraries.length; i++) {
- String lib = libraries[i];
- buffer.append(WHITESPACE + lib);
- }
- buffer.append(NEWLINE);
+ // Write out the all target first in case someone just runs make
+ buffer.append("all: deps" + WHITESPACE + outputPrefix + target + NEWLINE);
buffer.append(NEWLINE);
- // We only have one target, 'all'
- buffer.append("all: " + outputPrefix + target + NEWLINE);
+ /*
+ * The build target may depend on other projects in the workspace. These are
+ * captured in the deps target:
+ * deps:
+ * ; $(MAKE) [clean all | all]>
+ */
+ List managedProjectOutputs = new ArrayList();
+ buffer.append("deps:" + NEWLINE);
+ if (deps != null) {
+ for (int i = 0; i < deps.length; i++) {
+ IProject dep = deps[i];
+ String buildDir = dep.getLocation().toString();
+ if (ManagedBuildManager.manages(dep)) {
+ // Add the current configuration to the makefile path
+ IManagedBuildInfo depInfo = ManagedBuildManager.getBuildInfo(dep);
+ buildDir += SEPARATOR + depInfo.getConfigurationName();
+
+ // Extract the build artifact to add to the dependency list
+ String depTarget = depInfo.getBuildArtifactName();
+ String depExt = (new Path(depTarget)).getFileExtension();
+ String depPrefix = depInfo.getOutputPrefix(depExt);
+ managedProjectOutputs.add(buildDir + SEPARATOR + depPrefix + depTarget);
+ }
+ buffer.append(TAB + "cd" + WHITESPACE + buildDir + SEMI_COLON + WHITESPACE + "$(MAKE) " + targets + NEWLINE);
+ }
+ }
buffer.append(NEWLINE);
-
+
+ /*
+ * Write out the target rule as:
+ * .: $(OBJS) [ ... ]
+ * $(BUILD_TOOL) $(FLAGS) $(OUTPUT_FLAG) $@ $^ $(LIB_DEPS)
+ */
+ //
+ buffer.append(outputPrefix + target + COLON + WHITESPACE + "$(OBJS)");
+ Iterator iter = managedProjectOutputs.listIterator();
+ while (iter.hasNext()) {
+ buffer.append(WHITESPACE + (String)iter.next());
+ }
+ buffer.append(NEWLINE);
+ buffer.append(TAB + cmd + WHITESPACE + flags + WHITESPACE + outflag + WHITESPACE + "$@" + WHITESPACE + "$(OBJS) $(LIBS)");
+ buffer.append(NEWLINE + NEWLINE);
+
// Always add a clean target
- buffer.append(".PHONY: clean" + NEWLINE);
buffer.append("clean:" + NEWLINE);
- buffer.append(TAB + "$(RM)" + WHITESPACE + "${addprefix ., $(CC_SRCS:$(ROOT)%.cpp=%.o)} ${addprefix ., $(C_SRCS:$(ROOT)%.c=%.o)}" + WHITESPACE + outputPrefix + target + NEWLINE);
- buffer.append(NEWLINE);
+ buffer.append(TAB + "$(RM)" + WHITESPACE + "$(OBJS)" + WHITESPACE + outputPrefix + target + NEWLINE + NEWLINE);
- buffer.append(NEWLINE + ManagedBuilderCorePlugin.getResourceString(DEP_INCL) + NEWLINE);
+ buffer.append(".PHONY: all clean deps" + NEWLINE + NEWLINE);
+
+ buffer.append(ManagedBuilderCorePlugin.getResourceString(DEP_INCL) + NEWLINE);
buffer.append("include ${patsubst %, %/module.dep, $(MODULES)}" + NEWLINE);
-
- buffer.append(NEWLINE);
return buffer;
}
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 7f660fcffdc..27b51690f84 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
@@ -32,6 +32,7 @@ import org.w3c.dom.Node;
public class Target extends BuildObject implements ITarget {
private String artifactName;
+ private String binaryParserId;
private String cleanCommand;
private Map configMap;
private List configurations;
@@ -66,6 +67,7 @@ public class Target extends BuildObject implements ITarget {
setId(parent.getId() + ".1");
setName(parent.getName());
this.artifactName = parent.getArtifactName();
+ this.binaryParserId = parent.getBinaryParserId();
this.defaultExtension = parent.getDefaultExtension();
this.isTest = parent.isTestTarget();
this.cleanCommand = parent.getCleanCommand();
@@ -83,23 +85,26 @@ public class Target extends BuildObject implements ITarget {
*/
public Target(IConfigurationElement element) {
// id
- setId(element.getAttribute("id"));
+ setId(element.getAttribute(ID));
// hook me up
ManagedBuildManager.addExtensionTarget(this);
// Get the target name
- setName(element.getAttribute("name"));
+ setName(element.getAttribute(NAME));
// Get the name of the build artifact associated with target (usually
// in the plugin specification).
- artifactName = element.getAttribute("artifactName");
+ artifactName = element.getAttribute(ARTIFACT_NAME);
+ // Get the ID of the binary parser
+ binaryParserId = element.getAttribute(BINARY_PARSER);
+
// Get the default extension
- defaultExtension = element.getAttribute("defaultExtension");
+ defaultExtension = element.getAttribute(DEFAULT_EXTENSION);
// parent
- String parentId = element.getAttribute("parent");
+ String parentId = element.getAttribute(PARENT);
if (parentId != null) {
parent = ManagedBuildManager.getTarget(null, parentId);
// copy over the parents configs
@@ -109,21 +114,21 @@ public class Target extends BuildObject implements ITarget {
}
// isAbstract
- if ("true".equals(element.getAttribute("isAbstract")))
+ if ("true".equals(element.getAttribute(IS_ABSTRACT)))
isAbstract = true;
// Is this a test target
- isTest = ("true".equals(element.getAttribute("isTest")));
+ isTest = ("true".equals(element.getAttribute(IS_TEST)));
// Get the clean command
- cleanCommand = element.getAttribute("cleanCommand");
+ cleanCommand = element.getAttribute(CLEAN_COMMAND);
if (cleanCommand == null) {
// See if it defined in the parent
cleanCommand = parent.getCleanCommand();
}
// Get the make command
- makeCommand = element.getAttribute("makeCommand");
+ makeCommand = element.getAttribute(MAKE_COMMAND);
if (makeCommand == null) {
// See if it defined in the parent
makeCommand = parent.getMakeCommand();
@@ -151,38 +156,41 @@ public class Target extends BuildObject implements ITarget {
this(buildInfo.getOwner());
// id
- setId(element.getAttribute("id"));
+ setId(element.getAttribute(ID));
// hook me up
buildInfo.addTarget(this);
// name
- setName(element.getAttribute("name"));
+ setName(element.getAttribute(NAME));
// Get the name of the build artifact associated with target (should
// contain what the user entered in the UI).
- artifactName = element.getAttribute("artifactName");
+ artifactName = element.getAttribute(ARTIFACT_NAME);
+
+ // Get the ID of the binary parser
+ binaryParserId = element.getAttribute(BINARY_PARSER);
// Get the default extension
- defaultExtension = element.getAttribute("defaultExtension");
+ defaultExtension = element.getAttribute(DEFAULT_EXTENSION);
// parent
- String parentId = element.getAttribute("parent");
+ String parentId = element.getAttribute(PARENT);
if (parentId != null)
parent = ManagedBuildManager.getTarget(null, parentId);
// isAbstract
- if ("true".equals(element.getAttribute("isAbstract")))
+ if ("true".equals(element.getAttribute(IS_ABSTRACT)))
isAbstract = true;
// Is this a test target
- isTest = ("true".equals(element.getAttribute("isTest")));
+ isTest = ("true".equals(element.getAttribute(IS_TEST)));
// Get the clean command
- cleanCommand = element.getAttribute("cleanCommand");
+ cleanCommand = element.getAttribute(CLEAN_COMMAND);
// Get the make command
- makeCommand = element.getAttribute("makeCommand");
+ makeCommand = element.getAttribute(MAKE_COMMAND);
Node child = element.getFirstChild();
while (child != null) {
@@ -200,21 +208,22 @@ public class Target extends BuildObject implements ITarget {
* @param element
*/
public void serialize(Document doc, Element element) {
- element.setAttribute("id", getId());
- element.setAttribute("name", getName());
+ element.setAttribute(ID, getId());
+ element.setAttribute(NAME, getName());
if (parent != null)
- element.setAttribute("parent", parent.getId());
- element.setAttribute("isAbstract", isAbstract ? "true" : "false");
- element.setAttribute("artifactName", getArtifactName());
- element.setAttribute("defaultExtension", getDefaultExtension());
- element.setAttribute("isTest", isTest ? "true" : "false");
- element.setAttribute("cleanCommand", getCleanCommand());
- element.setAttribute("makeCommand", getMakeCommand());
+ element.setAttribute(PARENT, parent.getId());
+ element.setAttribute(IS_ABSTRACT, isAbstract ? "true" : "false");
+ element.setAttribute(ARTIFACT_NAME, getArtifactName());
+ element.setAttribute(BINARY_PARSER, getBinaryParserId());
+ element.setAttribute(DEFAULT_EXTENSION, getDefaultExtension());
+ element.setAttribute(IS_TEST, isTest ? "true" : "false");
+ element.setAttribute(CLEAN_COMMAND, getCleanCommand());
+ element.setAttribute(MAKE_COMMAND, getMakeCommand());
if (configurations != null)
for (int i = 0; i < configurations.size(); ++i) {
Configuration config = (Configuration)configurations.get(i);
- Element configElement = doc.createElement("configuration");
+ Element configElement = doc.createElement(IConfiguration.CONFIGURATION_ELEMENT_NAME);
element.appendChild(configElement);
config.serialize(doc, configElement);
}
@@ -317,6 +326,13 @@ public class Target extends BuildObject implements ITarget {
return artifactName == null ? EMPTY_STRING : artifactName;
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.managedbuilder.core.ITarget#getBinaryParserId()
+ */
+ public String getBinaryParserId() {
+ return binaryParserId == null ? EMPTY_STRING : binaryParserId;
+ }
+
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.ITarget#getConfiguration()
*/
@@ -368,4 +384,5 @@ public class Target extends BuildObject implements ITarget {
artifactName = name;
}
+
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/ChangeLog b/build/org.eclipse.cdt.managedbuilder.ui/ChangeLog
index 932af269d4c..7ca161b10ad 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/ChangeLog
+++ b/build/org.eclipse.cdt.managedbuilder.ui/ChangeLog
@@ -1,3 +1,15 @@
+2003-09-19 Sean Evoy
+ Removed the binary parser selection tab from the new class wizard. Updated the
+ page description externalized string.
+ * src/org/eclipse/cdt/managedbuilder/internal/ui/PluginResources.properties
+ * src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectOptionPage.java
+
+ Added the hard-coded binary parser info to the defined targets.
+ * plugin.xml
+
+ Fixed the event handling for add/remove in the list widget for build settings pages.
+ * src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionListFieldEditor.java
+
2003-09-16 Sean Evoy
Changed the initialization and button status logic so the list buttons are
enabled correctly on start-up and that the fist item in the list (if
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml b/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml
index 9f62ffb94b9..cf08589e7d2 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml
+++ b/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml
@@ -70,6 +70,7 @@
isTest="false"
cleanCommand="rm -rf"
name="Cygwin"
+ binaryParser="org.eclipse.cdt.core.PE"
isAbstract="true"
makeCommand="make"
id="cygwin">
@@ -307,6 +308,7 @@
isTest="false"
name="Cygwin Executable"
parent="cygwin"
+ binaryParser="org.eclipse.cdt.core.PE"
defaultExtension="exe"
isAbstract="false"
id="cygwin.exec">
@@ -335,13 +337,6 @@
valueType="string"
id="cygwin.link.ld.flags">
-
+
@@ -405,6 +408,7 @@
isTest="true"
name="Cygwin Export Library (DLL)"
parent="cygwin"
+ binaryParser="org.eclipse.cdt.core.PE"
defaultExtension="dll.a"
isAbstract="false"
id="cygwin.exp">
@@ -455,6 +459,7 @@
isTest="false"
name="Cygwin Static Library"
parent="cygwin"
+ binaryParser="org.eclipse.cdt.core.PE"
defaultExtension="a"
isAbstract="false"
id="cygwin.lib">
@@ -491,6 +496,7 @@
isTest="false"
cleanCommand="rm -rf"
name="Linux"
+ binaryParser="org.eclipse.cdt.core.ELF"
isAbstract="true"
makeCommand="make"
id="linux.gnu">
@@ -781,6 +787,7 @@
isTest="false"
name="Linux Executable"
parent="linux.gnu"
+ binaryParser="org.eclipse.cdt.core.ELF"
isAbstract="false"
id="linux.gnu.exec">
@@ -978,6 +986,7 @@
isTest="false"
name="Linux Static Library"
parent="linux.gnu"
+ binaryParser="org.eclipse.cdt.core.ELF"
defaultExtension="a"
isAbstract="false"
id="linux.gnu.lib">
@@ -1015,6 +1024,7 @@
isTest="false"
cleanCommand="rm -rf"
name="Solaris"
+ binaryParser="org.eclipse.cdt.core.ELF"
isAbstract="true"
makeCommand="make"
id="solaris.gnu">
@@ -1297,6 +1307,7 @@
isTest="false"
name="Solaris Executable"
parent="solaris.gnu"
+ binaryParser="org.eclipse.cdt.core.ELF"
isAbstract="false"
id="solaris.gnu.exec">
@@ -1494,6 +1506,7 @@
isTest="false"
name="Solaris Static Library"
parent="solaris.gnu"
+ binaryParser="org.eclipse.cdt.core.ELF"
defaultExtension="a"
isAbstract="false"
id="solaris.gnu.lib">
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/PluginResources.properties b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/PluginResources.properties
index a3c5f17ab48..88290bb4ba2 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/PluginResources.properties
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/PluginResources.properties
@@ -33,7 +33,7 @@ PlatformBlock.label.configs=Configurations:
# -- Strings for the additional options tab
MngMakeProjectWizard.options.title=Additional Project Settings
-MngMakeProjectWizard.options.desc=Defined the binary parser and inter-project dependencies, if any.
+MngMakeProjectWizard.options.desc=Defined the inter-project dependencies, if any.
# ----------- Configuration Selection Page -----------
BuildPropertyPage.label.Platform=Platform:
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionListFieldEditor.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionListFieldEditor.java
index 7f797aebe2e..e035f2739f9 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionListFieldEditor.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildOptionListFieldEditor.java
@@ -98,6 +98,7 @@ public class BuildOptionListFieldEditor extends FieldEditor {
list.add(input, 0);
list.setSelection(0);
}
+ selectionChanged();
}
}
@@ -374,6 +375,7 @@ public class BuildOptionListFieldEditor extends FieldEditor {
int index = list.getSelectionIndex();
if (index >= 0) {
list.remove(index);
+ list.setSelection(index - 1);
selectionChanged();
}
}
@@ -387,7 +389,7 @@ public class BuildOptionListFieldEditor extends FieldEditor {
int size = list.getItemCount();
// Enable the remove button if there is at least one item in the list
- removeButton.setEnabled(index >= 0);
+ removeButton.setEnabled(size > 0);
// Enable the up button IFF there is more than 1 item and selection index is not first item
upButton.setEnabled(size > 1 && index > 0);
// Enable the down button IFF there is more than 1 item and selection index not last item
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectOptionPage.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectOptionPage.java
index 55de97afb5d..a0dd9e58e65 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectOptionPage.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectOptionPage.java
@@ -11,9 +11,7 @@ package org.eclipse.cdt.managedbuilder.ui.wizards;
* IBM Rational Software - Initial API and implementation
* **********************************************************************/
-import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
import org.eclipse.cdt.managedbuilder.internal.ui.ManagedProjectOptionBlock;
-import org.eclipse.cdt.ui.dialogs.BinaryParserBlock;
import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
import org.eclipse.cdt.ui.dialogs.ReferenceBlock;
import org.eclipse.cdt.ui.dialogs.TabFolderOptionBlock;
@@ -31,7 +29,6 @@ public class NewManagedProjectOptionPage extends NewCProjectWizardOptionPage {
protected void addTabs() {
addTab(new ReferenceBlock());
- addTab(new BinaryParserBlock(ManagedBuilderCorePlugin.getDefault().getPluginPreferences()));
}
}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java
index 9e185d22bdf..30addfdda07 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/wizards/NewManagedProjectWizard.java
@@ -103,9 +103,10 @@ public class NewManagedProjectWizard extends NewCProjectWizard {
}
// Add the target to the project
+ ITarget newTarget = null;
try {
ITarget parent = targetConfigurationPage.getSelectedTarget();
- ITarget newTarget = ManagedBuildManager.createTarget(newProject, parent);
+ newTarget = ManagedBuildManager.createTarget(newProject, parent);
if (newTarget != null) {
// TODO add name entry field to project
String artifactName = newProject.getName();
@@ -131,6 +132,10 @@ public class NewManagedProjectWizard extends NewCProjectWizard {
ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(newProject);
desc.remove(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID);
desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID, ManagedBuildManager.INTERFACE_IDENTITY);
+
+ desc.remove(CCorePlugin.BINARY_PARSER_UNIQ_ID);
+ // org.eclipse.cdt.core.ELF or "org.eclipse.cdt.core.PE"
+ desc.create(CCorePlugin.BINARY_PARSER_UNIQ_ID, newTarget.getBinaryParserId());
} catch (CoreException e) {
// TODO Flag the error to the user
}
diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog
index 96d2a4530df..8df74cc06e6 100644
--- a/core/org.eclipse.cdt.core.tests/ChangeLog
+++ b/core/org.eclipse.cdt.core.tests/ChangeLog
@@ -1,3 +1,8 @@
+2003-09-19 Sean Evoy
+ Updated the build test to check the binary parser specification in the
+ target specification.
+ * build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java
+
2003-09-18 Andrew Niefer
- removed testConditionalExpression_Bug43159 from FailedCompleteParseASTExpressionTest
and uncommented it (testConditionalExpression) in CompleteParseASTExpressionTest
diff --git a/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java b/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java
index 98256add8d0..42318e706c5 100644
--- a/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java
+++ b/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java
@@ -533,10 +533,12 @@ public class ManagedBuildTests extends TestCase {
// Target stuff
String expectedCleanCmd = "del /myworld";
String expectedMakeCommand = "make";
+ String expectedParserId = "org.eclipse.cdt.core.PE";
assertTrue(target.isTestTarget());
assertEquals(target.getDefaultExtension(), rootExt);
assertEquals(expectedCleanCmd, target.getCleanCommand());
assertEquals(expectedMakeCommand, target.getMakeCommand());
+ assertEquals(expectedParserId, target.getBinaryParserId());
// Tools
ITool[] tools = target.getTools();
@@ -643,14 +645,14 @@ public class ManagedBuildTests extends TestCase {
assertEquals("doIt", tools[0].getToolCommand());
}
- /**
+ /*
* @param testSubSub
*/
private void checkSubSubTarget(ITarget target) {
// Check the inherited clean command
assertEquals("rm -yourworld", target.getCleanCommand());
assertEquals("nmake", target.getMakeCommand());
-
+ assertEquals("org.eclipse.cdt.core.ELF", target.getBinaryParserId());
}
/*
@@ -664,6 +666,7 @@ public class ManagedBuildTests extends TestCase {
// Check the overridden clan command
assertEquals("rm -yourworld", target.getCleanCommand());
assertEquals("gmake", target.getMakeCommand());
+ assertEquals("org.eclipse.cdt.core.PE", target.getBinaryParserId());
// Make sure this is a test target
assertTrue(target.isTestTarget());
diff --git a/core/org.eclipse.cdt.core.tests/plugin.xml b/core/org.eclipse.cdt.core.tests/plugin.xml
index b4a8365b29f..56e19588c56 100644
--- a/core/org.eclipse.cdt.core.tests/plugin.xml
+++ b/core/org.eclipse.cdt.core.tests/plugin.xml
@@ -29,14 +29,15 @@
name="Tools for Build Test"
point="org.eclipse.cdt.managedbuilder.core.ManagedBuildInfo">
+ binaryParser="org.eclipse.cdt.core.PE"
+ makeFlags="-k">