mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-22 14:12:10 +02:00
Bug 579138 - Project dependencies are not built in the correct order
Fixing the issue where circular dependencies cause stack overflow. Change-Id: I4ca87eb4e8ccb82b25f85d1cea04fc0d4ddd60c0 Signed-off-by: Umair Sair <umair_sair@hotmail.com>
This commit is contained in:
parent
968c6937e7
commit
96f928152f
2 changed files with 14 additions and 0 deletions
|
@ -23,6 +23,7 @@ package org.eclipse.cdt.managedbuilder.internal.core;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
import java.text.MessageFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -104,6 +105,7 @@ public class CommonBuilder extends ACBuilder implements IIncrementalProjectBuild
|
||||||
|
|
||||||
private boolean fBuildErrOccured;
|
private boolean fBuildErrOccured;
|
||||||
private Set<String> builtRefConfigIds = new HashSet<>();
|
private Set<String> builtRefConfigIds = new HashSet<>();
|
||||||
|
private Set<String> scheduledConfigIds = new HashSet<>();
|
||||||
|
|
||||||
public CommonBuilder() {
|
public CommonBuilder() {
|
||||||
}
|
}
|
||||||
|
@ -438,6 +440,7 @@ public class CommonBuilder extends ACBuilder implements IIncrementalProjectBuild
|
||||||
|
|
||||||
fBuildSet.start(this);
|
fBuildSet.start(this);
|
||||||
builtRefConfigIds.clear();
|
builtRefConfigIds.clear();
|
||||||
|
scheduledConfigIds.clear();
|
||||||
|
|
||||||
IProject project = getProject();
|
IProject project = getProject();
|
||||||
|
|
||||||
|
@ -488,6 +491,7 @@ public class CommonBuilder extends ACBuilder implements IIncrementalProjectBuild
|
||||||
if (status.getSeverity() != IStatus.OK)
|
if (status.getSeverity() != IStatus.OK)
|
||||||
throw new CoreException(status);
|
throw new CoreException(status);
|
||||||
|
|
||||||
|
scheduledConfigIds.add(activeCfg.getId());
|
||||||
IConfiguration rcfgs[] = getReferencedConfigs(builders);
|
IConfiguration rcfgs[] = getReferencedConfigs(builders);
|
||||||
|
|
||||||
monitor.beginTask("", num + rcfgs.length); //$NON-NLS-1$
|
monitor.beginTask("", num + rcfgs.length); //$NON-NLS-1$
|
||||||
|
@ -520,6 +524,8 @@ public class CommonBuilder extends ACBuilder implements IIncrementalProjectBuild
|
||||||
build(kind, new CfgBuildInfo(builders[i], isForeground), new SubProgressMonitor(monitor, 1));
|
build(kind, new CfgBuildInfo(builders[i], isForeground), new SubProgressMonitor(monitor, 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
scheduledConfigIds.remove(activeCfg.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isForeground)
|
if (isForeground)
|
||||||
|
@ -582,6 +588,13 @@ public class CommonBuilder extends ACBuilder implements IIncrementalProjectBuild
|
||||||
IProject project = cfg.getOwner().getProject();
|
IProject project = cfg.getOwner().getProject();
|
||||||
fBuildSet.getCfgIdSet(project, true).add(cfg.getId());
|
fBuildSet.getCfgIdSet(project, true).add(cfg.getId());
|
||||||
|
|
||||||
|
if (scheduledConfigIds.contains(cfg.getId())) {
|
||||||
|
ManagedBuilderCorePlugin.log(new Status(IStatus.WARNING, ManagedBuilderCorePlugin.getUniqueIdentifier(),
|
||||||
|
MessageFormat.format(ManagedMakeMessages.getString("CommonBuilder.circular_dependency"), //$NON-NLS-1$
|
||||||
|
project.getName(), cfg.getName())));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!builtRefConfigIds.contains(cfg.getId())) {
|
if (!builtRefConfigIds.contains(cfg.getId())) {
|
||||||
if (VERBOSE) {
|
if (VERBOSE) {
|
||||||
outputTrace(cfg.getOwner().getProject().getName(),
|
outputTrace(cfg.getOwner().getProject().getName(),
|
||||||
|
|
|
@ -164,6 +164,7 @@ CommonBuilder.13=can not clean programmatically: build folder is not accessible
|
||||||
CommonBuilder.22=Building referenced configurations..
|
CommonBuilder.22=Building referenced configurations..
|
||||||
CommonBuilder.23=Buildfile generation error occurred..
|
CommonBuilder.23=Buildfile generation error occurred..
|
||||||
CommonBuilder.24=Build stopped..
|
CommonBuilder.24=Build stopped..
|
||||||
|
CommonBuilder.circular_dependency=Circular dependency detected in "Project Properties -> C/C++ General -> Path and Symbols -> References tab" for project {0} <{1}>. Build of dependency aborted to prevent infinite cyclic build.
|
||||||
ParallelBuilder.missingOutDir=Failed to create output directory {0}
|
ParallelBuilder.missingOutDir=Failed to create output directory {0}
|
||||||
|
|
||||||
MakeBuilder.buildError=
|
MakeBuilder.buildError=
|
||||||
|
|
Loading…
Add table
Reference in a new issue