Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/ChangeLog26
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/MakefileGenerator.java4
2 files changed, 28 insertions, 2 deletions
diff --git a/build/org.eclipse.cdt.managedbuilder.core/ChangeLog b/build/org.eclipse.cdt.managedbuilder.core/ChangeLog
index 35655878af4..a6992eb5170 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/ChangeLog
+++ b/build/org.eclipse.cdt.managedbuilder.core/ChangeLog
@@ -1,3 +1,29 @@
+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 <dep_project_build_dir>; $(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 <dep_project_build_dir> && $(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 <dep_project_build_dir> && $(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
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 b9d456ec587..2b6a11e47b8 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
@@ -68,7 +68,7 @@ public class MakefileGenerator {
protected static final String MODFILE_NAME = "subdir.mk"; //$NON-NLS-1$
protected static final String LINEBREAK = "\\";
protected static final String NEWLINE = System.getProperty("line.separator");
- protected static final String SEMI_COLON = ";";
+ protected static final String LOGICAL_AND = "&&";
protected static final String SEPARATOR = "/";
protected static final String TAB = "\t";
protected static final String WHITESPACE = " ";
@@ -562,7 +562,7 @@ public class MakefileGenerator {
}
managedProjectOutputs.add(buildDir + SEPARATOR + depPrefix + depTarget);
}
- buffer.append(TAB + "cd" + WHITESPACE + buildDir + SEMI_COLON + WHITESPACE + "$(MAKE) " + depTargets + NEWLINE);
+ buffer.append(TAB + "-cd" + WHITESPACE + buildDir + WHITESPACE + LOGICAL_AND + WHITESPACE + "$(MAKE) " + depTargets + NEWLINE);
}
}
buffer.append(NEWLINE);

Back to the top