diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java index 3b098c3263d..808ac558df1 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java @@ -4141,7 +4141,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI if(des == null) continue; - ICConfigurationDescription refCfgDes = des.getConfigurationById(cfgId); + ICConfigurationDescription refCfgDes = cfgId.length() == 0 ? des.getActiveConfiguration() : des.getConfigurationById(cfgId); if(refCfgDes == null) continue; diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java index c5cc9dbbaf5..cbb47d16dcd 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/CommonBuilder.java @@ -112,6 +112,7 @@ public class CommonBuilder extends ACBuilder { private static final String INTERNAL_BUILDER = "ManagedMakeBuilder.message.internal.builder"; //$NON-NLS-1$ public static boolean VERBOSE = false; + private static CfgBuildSet fBuildSet = new CfgBuildSet(); public CommonBuilder() { } @@ -152,6 +153,40 @@ public class CommonBuilder extends ACBuilder { } }; + private static class CfgBuildSet { + Map fMap = new HashMap(); + + public Set getCfgIdSet(IProject project, boolean create){ + Set set = (Set)fMap.get(project); + if(set == null && create){ + set = new HashSet(); + fMap.put(project, set); + } + return set; + } + + public void start(CommonBuilder bld){ + checkClean(bld); + } + + private boolean checkClean(CommonBuilder bld){ + IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); + for(int i = 0; i < projects.length; i++){ + if(bld.hasBeenBuilt(projects[i])){ + if(VERBOSE) + outputTrace(null, "checking clean: the project " + projects[i].getName() +" was built, no clean needed"); + + return false; + } + } + + if(VERBOSE) + outputTrace(null, "checking clean: no projects were built.. cleanning"); + + fMap.clear(); + return true; + } + } private static class CfgBuildInfo { private IProject fProject; private IManagedBuildInfo fBuildInfo; @@ -433,8 +468,23 @@ public class CommonBuilder extends ACBuilder { * @see IncrementalProjectBuilder#build */ protected IProject[] build(int kind, Map args, IProgressMonitor monitor) throws CoreException { + fBuildSet.start(this); + IProject project = getProject(); + + if(VERBOSE) + outputTrace(project.getName(), ">>build requested, type = " + kind); + IBuilder builders[] = BuilderFactory.createBuilders(project, args); + IProject[] projects = build(kind, project, builders, true, monitor); + + if(VERBOSE) + outputTrace(project.getName(), "<>>>building reference cfg " + cfg.getName()); + + IProject[] projs = build(INCREMENTAL_BUILD, cfg.getOwner().getProject(), new IBuilder[]{builder}, false, subMonitor); + + if(VERBOSE) + outputTrace(cfg.getOwner().getProject().getName(), "<<<