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
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.
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.
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
In preparation for 44020, each new target created is assigned a truly random ID.
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.
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.
There is a method for clients of this information on the BuildInfo interface and
The builder had to be tweaked in order to behave correctly on a build of an
empty project or non-managed projects.
The makefile generator had to be tweaked to properly add folders that are effected
by header file changes.
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
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.
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.
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.
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.
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.
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
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.
Explicitly trim all arrays to size before converting them to String for Options
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.
2003-09-25 Sean Evoy
This patch contains a lot of changes needed to implement fixes for 42648 and
For 42648, the schema for the the target had to be modified to include a
comma-separated list of valid host platforms.
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.
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.
Option reference now pays attention to overidden values in the plugin file. Until
now, it only handled the overrides in the project file.
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
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
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.
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.
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.
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.
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)
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.
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.
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: