diff --git a/build/org.eclipse.cdt.managedbuilder.core/ChangeLog b/build/org.eclipse.cdt.managedbuilder.core/ChangeLog index 73c8a5dd99f..8b80491cb2b 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/ChangeLog +++ b/build/org.eclipse.cdt.managedbuilder.core/ChangeLog @@ -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 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 f818017f85a..3b45d2b72f2 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 @@ -171,6 +171,9 @@ public class GeneratedMakefileBuilder extends ACBuilder { 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 @@ public class GeneratedMakefileBuilder extends ACBuilder { // 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()]); 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 89a37cde037..19db6c8247b 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 @@ -205,12 +205,21 @@ public class MakefileGenerator { 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 @@ public class MakefileGenerator { * @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 @@ public class MakefileGenerator { 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)