2005-05-03 Vladimir Hirsl Fix for PR 91276: Cygpath on Linux for SCD? Changes in CygpathTranslator that affect DefaultGnuWinScannerInfoCollector. * src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/DefaultGnuWinScannerInfoCollector.java 2005-03-18 Alain Magloire Fix for PR 88110: Importing project that need converting would create NPE and ResouceException failures. * src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java * src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject12.java * src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject20.java * src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject.java 2005-01-24 Vladimir Hirsl Updated managed build scanner info collector to use new interfaces introduced for CDT 3.0. 2004-03-16 Tanya Wolff Marked remaining strings untranslatable as they belong to the extensibility schema. 2004-03-12 Sean Evoy Commit for Jeremiah Lott. Allows the managed build system to resolve "forward references" within its extensions. In practice this is necessary to allow references between extensions in different plugins. Partial fix for bugzilla 54202: No longer use the cdtbuild file for persisting the default target and configuration settings for a project. This is assumed to be an individual workspace level setting so the choices are persisted in the project's persistent settings store. 2004-03-09 Sean Evoy Fix for bugzilla 45311: "CVS tries to check in contents of build output" The managed make builder generates the output directories, and the makefiles for those directories. Those files should be tagged as "derived" so that the CM system will ignore the files on check-in. Now, that is done when a new build directory or file is added to the project. The workspace will take care of files created by the build process through the Ignored Resources extension point. 2004-03-08 Sean Evoy Committing the changes needed by our partners to better support a variety of tool references. A class hierarchy of tool references has been introduced. The base class is an abstract tool reference. Unqualified tool references, like those used in the manifest or project files will be continue to be treated as tool references. However, we now have some flexibility for the future should a more refined type of tool reference be needed; for example, a dynamic tool that reads a configuration file to determine what environment it is targetting. 2004-03-05 Sean Evoy Fix for bug 53856: "Option reference not reporting built-in includes paths to scanner" Changed the constructor for the OptionReference so it only creates a list if it finds built-in path or symbol definitions in the manifest or project file. The getter method for built-ins also concatenates the definitions it contains with those of its parent. Undid the changes to the geenrated makefile builder since bug 53253 has been corrected. Fix for bug 53861: "Cannot reset tool command back to default" Changed the way the configuration sets the tool command when the value is the same as the default. 2004-03-02 Sean Evoy A change in VCErrorParser to fix bug 53253 causes an IndexOutOfBounds exception when echoing a build command on Win32 if the absolute path to the make utility is specified, i.e. C:\\make.exe The work-around is to not have the launcher echo the command, and just output it to the build console directly. 2004-03-02 James Ciesielski Marked those strings that are non-translatable as such and externalized those strings that can be translated. There is still work to be done in this area for this plugin. * src/org/eclipse/cdt/managedbuilder/core/ManagedBuilderCorePlugin.java * src/org/eclipse/cdt/managedbuilder/core/ManagedBuilderManager.java * src/org/eclipse/cdt/managedbuilder/core/ManagedCProjectNature.java * src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java * src/org/eclipse/cdt/managedbuilder/internal/core/Option.java * src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java * src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java * src/org/eclipse/cdt/managedbuilder/internal/core/PluginResources.properties 2004-03-02 Sean Evoy Work to support feature C1, "Set Tool Command in Project". Now it is possible to store an overridden tool command in a tool reference. The tool command can be overridden directly in an existing reference, or through the configuration, which creates a new tool reference. 2004-02-26 Jeremiah Lott Added a header to the automatically generated makefiles to alert users not to edit them. Also added includes directives to bring in user-supplied makefiles to support additional targets, macro definitions, and custom build steps. Strings are externalized. * src/org/eclipse/cdt/managedbuilder/internal/core/PluginResources.properties * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java 2004-02-26 Sean Evoy Work for C14, add the ability to inherit a tool description via a tool reference. Changed the schema to allow a tool reference to belong to a target. * schema/ManagedBuildTools.exsd Changed the manifest logic in the managed build manager to load and retrieve tool definitions as well as target definitions. The schema allowed for this, but the logic was missing. * src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java Made some bookeeping additions to the target so that it can store references to tools. First, the target loads any tool references it has. Then it loads tools and configurations. The target also has to consider the presence of tool references when it determines how many tools it has, so the logic that counted and returned the number of tools in the target was updated. Some key changes in this regard relate to how the target looks up the tool references it has. It now has to ask the managed build info if it has a tool definition for the reference if there are no tools defined for the target level for a given reference. * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java Tool references now have the potential to be owned by either a target or a configuration. Changed the owner to the superclass of both and figure out which the parent is at runtime to perform the proper registration and information look-up. Also removed the reference to a target from a tool and the interface to extract the target from ITool. * src/org/eclipse/cdt/managedbuilder/core/ITool.java * src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java * src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java An unrelated bug had to do with a problem my testing uncovered with nested categories. The manifest reader was looking at the wrong field to determine the parent, but for the manifests we have created, this has not proven to be a problem so far. * src/org/eclipse/cdt/managedbuilder/core/IOptionCategory.java * src/org/eclipse/cdt/managedbuilder/core/IOptionCategory.java 2004-02-24 Sean Evoy Changed the makefile generator to escape any whitespace it finds in a dependency path. Now it is possible to build a project in a location with spaces but you still cannot have internal folders with spaces in the name. * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java Tweaked the builder to put only the make command in invocation if there were no arguments spec'd. It seemed to be causing a fake error message to be reported on Linux even though make was successfully building the project. * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java 2004-02-23 Sean Evoy Fix for bug 52647. In 1.2, the target stored the raw, overridden build command the user specified on the property page. This string may or may not have included arguments to make. The managed build info was responsible for parsing the command from the arguments and returning both to the makefile generator. The problem was that the logic was too light-weight to really parse a complex command line. That logic has been refactored to the property page itself, so the price of parsing is payed once. The Target and its public interface have been reworked to set and get the arguments for make. This is treated as a project-level setting. It cannot be defined in a manifest for now. There is also a capability to reset and test the args when checking for an overridden make command in a target. * src/org/eclipse/cdt/managedbuilder/core/ITarget.java * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java The arguments are now passed to the spawner that launches make correctly. * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java The ManagedBuildInfo is off the hook now. Rather than performing any parsing or foo-fa-raw, it simply delegates the lookup to the target. * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java 2004-02-17 Sean Evoy Fix for critical bug 44163. The managed build info would become confused when the project it was associated with was renamed. The project still stored the build information in its session data, but the internal reference to the owner project was not updated in the build info. Now, when the build info is retrieved from a project, the manager asks the info to do a sanity test to check the identity of the true owner against the owner the it thinks it has. If they differ, the build information updates its owner and the owner of all the targets it maintains for the project. * src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java * src/org/eclipse/cdt/managedbuilder/core/ITarget.java * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java Fixes for 51646 Moved the makefile comment character out of the hard-coded strings and into the makefile generator. * src/org/eclipse/cdt/managedbuilder/internal/core/PluginResources.properties * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java Fixes for bug 49590: The target maintains the default extension and the overridden extension. There is an interface to get and set the extension, but the method to get the default extension is deprecated. * src/org/eclipse/cdt/managedbuilder/core/ITarget.java * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java The build information now has a method to get at the extension * src/org/eclipse/cdt/managedbuilder/core/IManagedBuildInfo.java * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java The makefile generator now asks for both the name and the extension when generating targets and dependencies. * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java 2003-10-23 Bogdan Gheorghe Updated the indexManager.perfomConcurrentJob call in MakefileGenerator 2003-10-03 Sean Evoy Fix for critical bug 44134. The problem lies in how the makefile is generated when a build target references other projects. The makefile creates a command to change to the build directory of the referenced project and call $(MAKE) there, i.e. cd ; $(MAKE) clean all The problem arises when the directory change fails. As of RC0, the command after the semi-colon is evaluated. Unfortunately, it evaluates to a recursive make call in the build directory of the build target and 'make' will keep invoking more 'make's until Eclipse runs out of memory. With a manual build, the user can still cancel the build. When autobuild is turned on, they cannot. The only way to shut down Eclipse under that scenario is to kill it, and when it restarts, autobuild is still enabled and the problem repeats. The solution is to NOT perform the 'make' command if the 'cd' fails, i.e. cd && $(MAKE) clean all When the dependencies are generated this way, the 'cd' will fail as will the build. The final tweak is to ignore the 'cd' failure and allow the rest of the build to continue, i.e. -cd && $(MAKE) clean all * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java 2003-10-01 Sean Evoy Final fix for bugs 44020. The problem lay with the way that new projects were being created when the root configuration of the project had tool references overriding options. What the new configuration should have been doing is making a personal copy of the tool reference and its options. Instead, they were all sharing the parents. Seems simple enough now that I found it. OptionReference provides a method to retreive its option (so new OptionReferences can be cloned). * src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java Configuration now behaves correctly when it is created from another configuration. * src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java 2003-10-01 Sean Evoy Fix for bugs 43490 (trivial), 44020, and 43980. Added a new field to the schema for a tool. The attribute manages a list of project natures that the tool should be filtered against in the build model and UI. * schema/ManagedBuildTools.exsd Updated the ITool interface and its mplementors to pay attention to this new attribute when loading from a plugin file. Clients can querry for a numeric constant indicating the filter. * src/org/eclipse/cdt/managedbuilder/core/ITool.java * src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java * src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java All the methods in managed build manager that access information stored in a tool first check that the tool is valid for the project nature. * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java Put a safety check in the option reference constructor when reading one in from a project file. I the option reference is to an option not managed by the build model, the constructor does not add itself to the runtime representation of the model. * src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java In preparation for 44020, each new target created is assigned a truly random ID. * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java 2003-09-30 Sean Evoy Fix for bug 41826. Finished the use case for changing header files and triggering a build. I had to add a new attribute to the build model schema to allow a build information client to determine that a file is considered a header file. * schema/ManagedBuildTools.exsd The ITool, and its implementors now have a method to test if an extension is considered to belong to a header file. The Tool also pays attention to the new attribute when it reads itself in from the plugin file. * src/org/eclipse/cdt/managedbuilder/core/ITool.java * src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java * src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java There is a method for clients of this information on the BuildInfo interface and its implementor. * src/org/eclipse/cdt/managedbuilder/core/IManagedBuildInfo.java * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java The builder had to be tweaked in order to behave correctly on a build of an empty project or non-managed projects. * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java The makefile generator had to be tweaked to properly add folders that are effected by header file changes. * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java 2003-09-26 Sean Evoy A partial implementation for bug 41826. This patch contains the logic to properly respond in the face of the following project changes: 1. A generated project element, such as the build target or an intermediate file, is deleted in the build project, or any projects it references. 2. The build settings change in the build project or any projects it references. In order to actually do this correctly, I had to stop being so precious during the build. The makefile generator was was calculating the "build needed" state as it walked the change delta. However, the Eclipse core has already determined that I need to do a build. Further, as I discovered earlier, it doesn't always pass what has changed in referenced projects as part of the delta. Essentially, that means I will never be able to fully calculate the change set in the makefile generator's delta visitor, and to even approximate a decent set of cases, the logic would quickly bog down in complexity. The solution is to trust Eclipse and alway invoke make when my incremental builder is called. At worst, if there is no significant change, make will execute and report nothing to be done. The modified makefile builder no longer asks the makefile generator if it should build. It also no longer cares if the change set is empty (make will report that). Since it responds to changes in referenced project's build information, it also scrubs all relevant projects after building. Since a build might involve building referenced project elements, those projects get their project views refreshed after build. The build markers for referenced projects are removed prior to build. * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java The makefile generator has been simplified. The resource delta visitor logic no longer trie to decide if a build should occur. The method to ask has been removed. The class no longer throws an exception if the change set is empty. I am also a bit more careful to call make with the right targets if a referenced project is built. * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java 2003-09-26 Sean Evoy I added a fix to the builder and makefile generator to properly handle the following case. Project A depends on Project B. Something changes in project B and the user requests that A be built. Inthis case, the incremental builder is invoked, but it is passed a 0-length delta on the top resource. Now, the logic of the builder is to treat that case as a build event that triggers no makefile regeneration, just an invocation of make. Now handles the case where there is no flag applied to the make command and just passes the targets as arguments. * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java The makefile generator now considers the case where the delta is for a project resource and has no children. If so, it flags that a build is needed but no makefile generation occurs. It also throws a new exception if the top makefile is not saved. * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java 2003-09-25 Sean Evoy A patch to resolve the problem with refreshing the project after a build, or bug 42522 if you care about those sorts of things. The managed make builder was calling refresh at inside a bad if statement. I corrected that and projects refresh correctly. Of course, if you have the wrong binary parser selected you are hosed. You will also notice that the string constants have been changed to resolve to a different name. The standard builder uses this name and I wanted to minimize the possibility of problems later. * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java Prepended "Managed" to the externalized string identifiers to avoid future overlap with the standard build system. Had to update the makefile generator to use the new identifiers. * src/org/eclipse/cdt/managedbuilder/internal/core/PluginResources.properties * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java Changed the signature of the 'getMakeArguments' to return a string instead of an array so the builder can invoke make with the user-specified args. I also changed the logic of the getMakeCommand method in the implementor so that it only returns a string containing the command itself. * src/org/eclipse/cdt/managedbuilder/core/IManagedBuildInfo.java * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java Explicitly trim all arrays to size before converting them to String[] for Options and Tools. *src/org/eclipse/cdt/managedbuilder/internal/core/Option.java * src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java Fixed a missing bit of logic in the Configuration when a user-object option is deleted. Now the build model really does get rid of the the value. * src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java 2003-09-25 Sean Evoy This patch contains a lot of changes needed to implement fixes for 42648 and 43122. For 42648, the schema for the the target had to be modified to include a comma-separated list of valid host platforms. * schema/ManagedBuildTools.exsd The target had to be updated to properly read in and understand this info, and the interface had to be updated to return a list to the clients in the UI. The target was also changed slightly. It now uses a safer accessor method to get at the list of tools it maintains. I have also stopped persisting non-variant info to the project file on serialize. There are elements of the target that are not subject to change by the user (yet) so they should not be saved. * src/org/eclipse/cdt/managedbuilder/core/ITarget.java * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java For 43122, I started by simply adding a tool reference to the configurations. The tool reference had option references for debug and optimization levels. It should have worked, but the model was not handling the inheritance properly. The JUnit tests were not finding it because of how they were configured. It was most evident in the UI. So, the way configurations and tool reference search for overridden option references had to be modified. While I was in there, I cleaned up some of the accessor and iteration code in ToolReference and OptionReference. For the configuration, the only significant change was a new search method to find all option references for a given tool, no matter where they are stored. The method had to consider what was overridden in a child config, what was added by a child config, and what the parent (or parents) define. * src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java Option reference now pays attention to overidden values in the plugin file. Until now, it only handled the overrides in the project file. * src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java The ToolReference now distinguishes between local option references which it manages directly, and option references held by tool references in the parent(s) of its owner. It only serializes its own references, but when asked for options relating to the tool it references, it replies with all option references in its hierarchy. * src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java 2003-09-25 Bogdan Gheorghe Modified ResourceDeltaVisitor.visit() to use the new mechanism to get the projects that dependend a file. Modified addSourceDependencies() to use the new mechanism to perform a DependencyQueryJob * src/org/eclipse/cdt/managedbuilder/internal/core/MakeFileGenerator.java 2003-09-24 Sean Evoy Changed the implementor of IScannerInfo to answer only absolute paths when asked for includes paths. Users will specify the includes paths in the managed build UI in such a way that the compiler will not complain. Either they will use absolute paths, or they will specify them relative to the build directory. In the second case, it is easier for the managed builder to convert the paths relative to this directory into absolute paths before replying tha it is for the client to figure this out. * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java 2003-09-23 Sean Evoy All the work in this patch is for critical bug 43292. In order to manage configurations, there had to be a method through ITarget to remove configurations. Also, to support the naming of newly created configurations, I added a name method to the IConfiguration interface. Finally, the ITarget needed to support setting (and resetting) the make command to use when building. * src/org/eclipse/cdt/managedbuilder/core/IConfiguration.java * src/org/eclipse/cdt/managedbuilder/core/ITarget.java * src/org/eclipse/cdt/managedbuilder/internal/core/Target.java 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 inter-project dependencies are calculated so that clean and all are properly passed to the make invocation. Finally, I replaced the hard-coded 'make' with $(MAKE) * src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java It also contains some more work on 41826, specifically on the logic to implement a rebuild when the build settings change. The builder checks for a build model change whenever a build is requested and responds appropriately. The make targets (i.e. 'clean' and 'all') are also calculated differently now. * src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java The build model was modified to set a dirty flag when an option changes. I also made a change to avoid an NPE when the build info was loaded. * src/org/eclipse/cdt/managedbuilder/core/IManagedBuildInfo.java * src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java * src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java 2003-09-15 Sean Evoy First submission of code to new project. Moved the managed builder source code out of the cdt.core project. This includes the code to implement the build model, along with the shema and extension point declaration. Moved the builder, scnanaer info provider and managed nature definitions into the package as well. There are 2 new classes to handle the externalized strings: * src/org/eclipse/cdt/managedbuilder/core/ManagedBuilderCorePlugin.java * src/org/eclipse/cdt/managedbuilder/internal/core/PluginResources.properties