[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Bug fix for 41275
|
Hi All,
This is a fix for the bug 41275. The problem was pretty simple; the delta
passed to a project when one of the projects it depends on changes, is
empty. I tried to optimize the managed builder to run only when a change
was passed to it, but this is a valid case. Now, if there is a 0-length
delta passed to a project, it simply calls make without regenerating any
makefiles.
Sean Evoy
Rational Software - IBM Software Group
Ottawa, Ontario, Canada
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/ChangeLog,v
retrieving revision 1.8
diff -u -r1.8 ChangeLog
--- ChangeLog 29 Sep 2003 01:42:26 -0000 1.8
+++ ChangeLog 29 Sep 2003 18:21:39 -0000
@@ -1,3 +1,19 @@
+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
Index: src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java,v
retrieving revision 1.4
diff -u -r1.4 GeneratedMakefileBuilder.java
--- src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java 29 Sep 2003 01:42:26 -0000 1.4
+++ src/org/eclipse/cdt/managedbuilder/internal/core/GeneratedMakefileBuilder.java 29 Sep 2003 18:21:39 -0000
@@ -171,6 +171,9 @@
if (e.getStatus().getCode() == GeneratedMakefileBuilder.EMPTY_PROJECT_BUILD_ERROR) {
// Just keep looking for other projects
continue;
+ } else {
+ // Throw the exception back to the builder
+ throw e;
}
}
}
@@ -312,7 +315,10 @@
// Get the arguments to be passed to make from build model
ArrayList makeArgs = new ArrayList();
- makeArgs.add(info.getMakeArguments());
+ String args = info.getMakeArguments();
+ if (args.length() > 0) {
+ makeArgs.add(args);
+ }
makeArgs.addAll(Arrays.asList(getMakeTargets(fullBuild)));
String[] makeTargets = (String[]) makeArgs.toArray(new String[makeArgs.size()]);
Index: src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java,v
retrieving revision 1.6
diff -u -r1.6 MakefileGenerator.java
--- src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java 29 Sep 2003 01:42:26 -0000 1.6
+++ src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java 29 Sep 2003 18:21:40 -0000
@@ -205,12 +205,21 @@
keepLooking = true;
break;
}
+ } if (resource.getType() == IResource.PROJECT) {
+ // If there is a zero-length delta, something the project depends on has changed so just call make
+ IResourceDelta[] children = delta.getAffectedChildren();
+ if (children != null && children.length == 0) {
+ generator.shouldRunBuild(true);
+ } else {
+ keepLooking = true;
+ }
} else {
// If the resource is part of the generated directory structure don't recurse
if (!generator.isGeneratedResource(resource)) {
keepLooking = true;
}
}
+
return keepLooking;
}
}
@@ -816,7 +825,7 @@
* @param fileHandle The file to place the contents in.
* @param rebuild FLag signalling that the user is doing a full rebuild
*/
- protected void populateTopMakefile(IFile fileHandle, boolean rebuild) {
+ protected void populateTopMakefile(IFile fileHandle, boolean rebuild) throws CoreException {
StringBuffer buffer = new StringBuffer();
// Add the macro definitions
@@ -829,12 +838,7 @@
buffer.append(addTargets(rebuild));
// Save the file
- try {
- Util.save(buffer, fileHandle);
- } catch (CoreException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ Util.save(buffer, fileHandle);
}
/* (non-javadoc)