1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fix for bugzilla 76080. One of the reported errors in this bug was valid. When a directory containing source was deleted, the Gnu makefilegenerator would mistakenly place it in a list of directories to regenerate makefiles for. The fix places those directories in a list to be deleted.

This commit is contained in:
Sean Evoy 2005-01-25 20:28:15 +00:00
parent 06739b170f
commit 30b41b6da1
2 changed files with 61 additions and 2 deletions

View file

@ -100,7 +100,6 @@ public class DefaultGCCDependencyCalculator implements IManagedDependencyGenerat
IManagedBuilderMakefileGenerator.WHITESPACE +
buildFlags +
IManagedBuilderMakefileGenerator.WHITESPACE +
IManagedBuilderMakefileGenerator.WHITESPACE +
IManagedBuilderMakefileGenerator.IN_MACRO +
IManagedBuilderMakefileGenerator.WHITESPACE +
">>" + //$NON-NLS-1$

View file

@ -119,7 +119,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
if (!generator.isGeneratedResource(resource)) {
// This is a source file so just add its container
if (info.buildsFileType(ext)) {
generator.appendModifiedSubdirectory(resource);
generator.appendDeletedSubdirectory(resource);
generator.appendDeletedFile(resource);
}
}
@ -214,6 +214,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
private String buildTargetName;
private Vector buildTools;
private Vector deletedFileList;
private Vector deletedDirList;
private Vector dependencyMakefiles;
private String extension;
private IManagedBuildInfo info;
@ -741,6 +742,27 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
}
}
/**
* Adds the container of the argument to a list of subdirectories that are part
* of an incremental rebuild of the project. The makefile fragments for these
* directories will be regenerated as a result of the build.
*
* @param resource
*/
protected void appendDeletedSubdirectory(IResource resource) {
IContainer container = resource.getParent();
// If the path contains a space relative to the project, reject it from the build
if (resource.getProjectRelativePath().toString().indexOf(" ") != -1) { //$NON-NLS-1$
// Only add the container once
if (!getInvalidDirList().contains(container)) {
getInvalidDirList().add(container);
}
} else {
if (!getDeletedDirList().contains(container)) {
getDeletedDirList().add(container);
}
}
}
/**
* If a file is removed from a source folder (either because of a delete
* or move action on the part of the user), the makefilegenerator has to
@ -1071,6 +1093,14 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
checkCancel();
}
// Remove deleted folders from generated build directory
iter = getDeletedDirList().listIterator();
while (iter.hasNext()) {
IContainer subDir = (IContainer) iter.next();
removeGeneratedDirectory(subDir);
checkCancel();
}
// How did we do
if (!getInvalidDirList().isEmpty()) {
status = new MultiStatus (
@ -1110,6 +1140,16 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
}
/**
* @return Returns the deletedDirList.
*/
private Vector getDeletedDirList() {
if (deletedDirList == null) {
deletedDirList = new Vector();
}
return deletedDirList;
}
/* (non-Javadoc)
* @return
*/
@ -1751,6 +1791,26 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
return status;
}
/* (non-Javadoc)
* @param subDir
*/
private void removeGeneratedDirectory(IContainer subDir) {
IPath moduleRelativePath = subDir.getProjectRelativePath();
IPath buildRoot = getBuildWorkingDir();
if (buildRoot == null) {
return;
}
IPath moduleOutputPath = buildRoot.append(moduleRelativePath);
IFolder folder = project.getFolder(moduleOutputPath);
if (folder.exists()) {
try {
folder.delete(true, new SubProgressMonitor(monitor, 1));
} catch (CoreException e) {
// TODO Log this
}
}
}
/* (non-Javadoc)
* @param msg
*/