From 0abb42e093e7fa4e8dda3934d0dfa812446d009f Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Mon, 22 Sep 2003 02:32:08 +0000 Subject: [PATCH] Patch for Sean Evoy: - I have removed the binary parser selection from the new managed project wizard and hard-coded the proper parser ID in the plugin spec for the build model. There is an updated JUnit test that verifies this change to the build model. - There is also a fix for the library problem on *nix. The makefile pattern was also changed slightly to better capture the dependencies between the build target and the outputs of other managed projects. --- .../ChangeLog | 17 ++ .../schema/ManagedBuildTools.exsd | 7 + .../cdt/managedbuilder/core/ITarget.java | 17 +- .../core/GeneratedMakefileBuilder.java | 30 ++-- .../internal/core/MakefileGenerator.java | 147 ++++++++++++------ .../managedbuilder/internal/core/Target.java | 73 +++++---- .../ChangeLog | 12 ++ .../plugin.xml | 27 +++- .../internal/ui/PluginResources.properties | 2 +- .../BuildOptionListFieldEditor.java | 4 +- .../wizards/NewManagedProjectOptionPage.java | 3 - .../ui/wizards/NewManagedProjectWizard.java | 7 +- core/org.eclipse.cdt.core.tests/ChangeLog | 5 + .../managed/tests/ManagedBuildTests.java | 7 +- core/org.eclipse.cdt.core.tests/plugin.xml | 11 +- 15 files changed, 251 insertions(+), 118 deletions(-) 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">