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

bug 259768: "Use optimal jobs number" highly misleading.

Encode "optimal" as negative number and "unlimited" as Integer.MAX_VALUE
Based on patch by Mohamed Hussein <mohamed_hussein@mentor.com>
This commit is contained in:
Andrew Gvozdev 2011-11-14 14:41:32 -05:00
parent bdd3e82216
commit 7f438e269a
14 changed files with 1107 additions and 581 deletions

View file

@ -76,12 +76,15 @@ public interface IBuilder extends IHoldsOptions, IMakeBuilderInfo {
static final String ATTRIBUTE_CUSTOMIZED_ERROR_PARSERS = "customizedErrorParsers"; //$NON-NLS-1$
static final String ATTRIBUTE_CUSTOM_PROPS = "customBuilderProperties"; //$NON-NLS-1$
// static final String ATTRIBUTE_CUSTOMIZED_ERROR_PARSERS = "customizedErrorParsers"; //$NON-NLS-1$
static final String ATTRIBUTE_IGNORE_ERR_CMD = "ignoreErrCmd"; //$NON-NLS-1$
static final String ATTRIBUTE_STOP_ON_ERR = "stopOnErr"; //$NON-NLS-1$
static final String ATTRIBUTE_PARALLEL_BUILD_CMD = "parallelBuildCmd"; //$NON-NLS-1$
static final String ATTRIBUTE_PARALLELIZATION_NUMBER = "parallelizationNumber"; //$NON-NLS-1$
/** @since 8.1 */
static final String VALUE_OPTIMAL = "optimal"; //$NON-NLS-1$
/** @since 8.1 */
static final String VALUE_UNLIMITED = "unlimited"; //$NON-NLS-1$
static final String ATTRIBUTE_PARALLEL_BUILD_ON = "parallelBuildOn"; //$NON-NLS-1$
static final String PARALLEL_PATTERN_NUM = "*"; //$NON-NLS-1$
static final String PARALLEL_PATTERN_NUM_START = "["; //$NON-NLS-1$
@ -92,15 +95,9 @@ public interface IBuilder extends IHoldsOptions, IMakeBuilderInfo {
static final String DEFAULT_TARGET_INCREMENTAL = "all"; //$NON-NLS-1$
static final String DEFAULT_TARGET_CLEAN = "clean"; //$NON-NLS-1$
static final String DEFAULT_TARGET_AUTO = "all"; //$NON-NLS-1$
/**
* @since 6.0
*/
/** @since 6.0 */
static final String ATTRIBUTE_COMMAND_LAUNCHER = "commandLauncher"; //$NON-NLS-1$
/**
* @since 8.0
*/
/** @since 8.0 */
static final String ATTRIBUTE_BUILD_RUNNER = "buildRunner"; //$NON-NLS-1$
/**

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2010 Intel Corporation and others.
* Copyright (c) 2007, 2011 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -13,19 +13,62 @@ package org.eclipse.cdt.managedbuilder.core;
import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildProperty;
import org.eclipse.cdt.managedbuilder.buildproperties.IBuildPropertyValue;
import org.eclipse.cdt.managedbuilder.internal.core.Builder;
import org.eclipse.cdt.newmake.core.IMakeCommonBuildInfo;
/**
* This class is to combine multiple configurations to one to support
* selection of multiple configurations on property pages.
*
* @noextend This class is not intended to be subclassed by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IMultiConfiguration extends IConfiguration, ICMultiItemsHolder {
/**
* Check if the configuration's builder is operating in parallel mode.
* @return {@code true} if parallel mode is enabled, {@code false} otherwise.
*/
boolean getParallelDef();
void setParallelDef(boolean def);
/**
* Set parallel execution mode for the configuration's builder.
* @see Builder#setParallelBuildOn(boolean)
*
* @param parallel - the flag to enable or disable parallel mode.
*/
void setParallelDef(boolean parallel);
int getParallelNumber();
void setParallelNumber(int num);
/**
* Returns maximum number of parallel threads/jobs used by the configuration's builder.
* Note that this function can return negative value to indicate "optimal" number.
*
* @see #setParallelDef(boolean)
* @see Builder#getParallelizationNum()
*
* @return - maximum number of parallel threads or jobs used by the builder or negative number.
* For exact interpretation see table in {@link IMakeCommonBuildInfo#getParallelizationNum()}
*/
int getParallelNumber();
/**
* Sets maximum number of parallel threads/jobs to be used by builder.
* Note that the number will be set only if the builder is in "parallel"
* mode.
*
* @param jobs - maximum number of jobs or threads. If the number is 0
* or negative, negative "optimal" number will be set, see
* {@link Builder#getOptimalParallelJobNum()}.
*/
void setParallelNumber(int jobs);
/**
* returns the Internal Builder parallel mode
* if true, internal builder will work in parallel mode
* otherwise it will use only one thread
* @return boolean
*
* @deprecated since CDT 9.0. Use {@link #getParallelDef()}
*/
@Deprecated
boolean getInternalBuilderParallel();
boolean isInternalBuilderEnabled();

View file

@ -65,7 +65,7 @@ public class InternalBuildRunner extends AbstractBuildRunner {
public boolean invokeBuild(int kind, IProject project, IConfiguration configuration,
IBuilder builder, IConsole console, IMarkerGenerator markerGenerator,
IncrementalProjectBuilder projectBuilder, IProgressMonitor monitor) throws CoreException {
boolean isParallel = builder.isParallelBuildOn() && builder.getParallelizationNum() > 1;
boolean isParallel = Math.abs(builder.getParallelizationNum()) > 1;
// boolean buildIncrementaly = true;
boolean resumeOnErr = !builder.isStopOnError();

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006, 2007 Intel Corporation and others.
* Copyright (c) 2006, 2011 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -11,10 +11,6 @@
package org.eclipse.cdt.managedbuilder.internal.buildmodel;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
@ -23,9 +19,6 @@ import java.util.Map.Entry;
import java.util.Set;
import org.eclipse.cdt.managedbuilder.buildmodel.IBuildCommand;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
@ -42,11 +35,6 @@ public class BuildProcessManager {
protected ProcessLauncher[] processes;
protected int maxProcesses;
// Number of CPUs is not dependent of object instance.
// But user can change UI settings for processes number.
// So we cannot set procNumber directly to maxProcesses.
static int procNumber = 0;
/**
* Initializes process manager
*
@ -152,40 +140,10 @@ public class BuildProcessManager {
/**
* @return Number of processors detected
* @deprecated since CDT 9.0 - just use Runtime.getRuntime().availableProcessors()
*/
@Deprecated
static public int checkCPUNumber() {
if (procNumber > 0) return procNumber;
procNumber = 1;
int x = 0;
String os = System.getProperty("os.name"); //$NON-NLS-1$
if (os != null) {
if (os.startsWith("Win")) { //$NON-NLS-1$
IEnvironmentVariableProvider evp = ManagedBuildManager.getEnvironmentVariableProvider();
if (evp != null) {
IBuildEnvironmentVariable var = evp.getVariable("NUMBER_OF_PROCESSORS", null, false, false); //$NON-NLS-1$
if (var != null) {
try {
x = new Integer(var.getValue()).intValue();
if (x > 0) { procNumber = x; }
} catch (NumberFormatException e) {} // fallthrough and return default
}
}
} else { // linux
String p = "/proc/cpuinfo"; //$NON-NLS-1$
try {
BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(p)));
String s;
while ((s = r.readLine() ) != null )
{ if (s.startsWith("processor\t:")) x++; } //$NON-NLS-1$
r.close();
if (x > 0) { procNumber = x; }
}
catch (IOException e) {} // fallthrough and return default
}
}
if(DbgUtil.DEBUG)
DbgUtil.trace("Number of processors detected: " + procNumber); //$NON-NLS-1$
return procNumber;
return Runtime.getRuntime().availableProcessors();
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006 Intel Corporation and others.
* Copyright (c) 2006, 2011 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -91,6 +91,7 @@ public class ParallelBuilder {
return step.hashCode();
}
@Override
public int compareTo(BuildQueueElement elem) {
if (elem == null)
throw new NullPointerException();
@ -205,10 +206,7 @@ public class ParallelBuilder {
if(cwd == null) cwd = des.getDefaultBuildDirLocation();
int threads = 1;
if (cfg instanceof Configuration) {
if (((Configuration)cfg).getParallelDef())
threads = BuildProcessManager.checkCPUNumber();
else
threads = ((Configuration)cfg).getParallelNumber();
threads = Math.abs(((Configuration)cfg).getParallelNumber());
}
ParallelBuilder builder = new ParallelBuilder(cwd, dirs, out, err, monitor, resumeOnErrors, buildIncrementally);
builder.enqueueAll(des);

View file

@ -81,6 +81,7 @@ import org.eclipse.cdt.managedbuilder.internal.macros.OptionContextData;
import org.eclipse.cdt.managedbuilder.macros.BuildMacroException;
import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider;
import org.eclipse.cdt.managedbuilder.macros.IConfigurationBuildMacroSupplier;
import org.eclipse.cdt.newmake.core.IMakeCommonBuildInfo;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
@ -752,7 +753,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
* E L E M E N T A T T R I B U T E R E A D E R S A N D W R I T E R S
*/
/* (non-Javadoc)
/**
* Initialize the configuration information from an element in the
* manifest file or provided by a dynamicElementProvider
*
@ -803,7 +804,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
isTest = Boolean.valueOf(tmp).booleanValue();
}
/* (non-Javadoc)
/**
* Initialize the configuration information from the XML element
* specified in the argument
*
@ -875,7 +876,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
cleanCommand = SafeStringInterner.safeIntern(element.getAttribute(CLEAN_COMMAND));
}
// Get the pre-build and post-build commands
// Get the pre-build and post-build commands
if (element.getAttribute(PREBUILD_STEP) != null) {
prebuildStep = SafeStringInterner.safeIntern(element.getAttribute(PREBUILD_STEP));
}
@ -970,6 +971,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getParent()
*/
@Override
public IConfiguration getParent() {
return parent;
}
@ -977,6 +979,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getOwner()
*/
@Override
public IResource getOwner() {
if (managedProject != null)
return managedProject.getOwner();
@ -988,6 +991,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getProjectType()
*/
@Override
public IProjectType getProjectType() {
return projectType;
}
@ -995,6 +999,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getManagedProject()
*/
@Override
public IManagedProject getManagedProject() {
return managedProject;
}
@ -1002,6 +1007,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getToolChain(IToolChain, String, String, boolean)
*/
@Override
public IToolChain createToolChain(IToolChain superClass, String Id, String name, boolean isExtensionElement) {
if(rootFolderInfo == null){
createRootFolderInfo();
@ -1030,6 +1036,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getToolChain()
*/
@Override
public IToolChain getToolChain() {
return rootFolderInfo.getToolChain();
}
@ -1037,6 +1044,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getResourceConfigurations()
*/
@Override
public IResourceConfiguration[] getResourceConfigurations() {
return (IResourceConfiguration[])rcInfos.getResourceInfos(ICSettingBase.SETTING_FILE, IResourceConfiguration.class);
}
@ -1044,6 +1052,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getResourceConfiguration(java.lang.String)
*/
@Override
public IResourceConfiguration getResourceConfiguration(String resPath) {
return rcInfos.getFileInfo(new Path(resPath).removeFirstSegments(1));
}
@ -1051,6 +1060,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getFilteredTools()
*/
@Override
public ITool[] getFilteredTools() {
return rootFolderInfo.getFilteredTools();
}
@ -1058,6 +1068,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getTools()
*/
@Override
public ITool[] getTools() {
return rootFolderInfo.getTools();
}
@ -1065,6 +1076,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getTool(java.lang.String)
*/
@Override
public ITool getTool(String id) {
return rootFolderInfo.getTool(id);
}
@ -1072,6 +1084,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getToolsBySuperClassId(java.lang.String)
*/
@Override
public ITool[] getToolsBySuperClassId(String id) {
return rootFolderInfo.getToolsBySuperClassId(id);
}
@ -1079,6 +1092,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getTargetTool()
*/
@Override
public ITool getTargetTool() {
String[] targetToolIds = rootFolderInfo.getToolChain().getTargetToolList();
if (targetToolIds == null || targetToolIds.length == 0) return null;
@ -1106,6 +1120,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setToolCommand(org.eclipse.cdt.managedbuilder.core.ITool, java.lang.String)
*/
@Override
public String getToolCommand(ITool tool) {
// TODO: Do we need to verify that the tool is part of the configuration?
return tool.getToolCommand();
@ -1114,6 +1129,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setToolCommand(org.eclipse.cdt.managedbuilder.core.ITool, java.lang.String)
*/
@Override
public void setToolCommand(ITool tool, String command) {
// TODO: Do we need to verify that the tool is part of the configuration?
tool.setToolCommand(command);
@ -1122,6 +1138,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#setOption(org.eclipse.cdt.core.build.managed.IOption, boolean)
*/
@Override
public IOption setOption(IHoldsOptions holder, IOption option, boolean value) throws BuildException {
return getRootFolderInfo().setOption(holder, option, value);
}
@ -1129,6 +1146,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#setOption(org.eclipse.cdt.core.build.managed.IOption, java.lang.String)
*/
@Override
public IOption setOption(IHoldsOptions holder, IOption option, String value) throws BuildException {
return getRootFolderInfo().setOption(holder, option, value);
}
@ -1136,6 +1154,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#setOption(org.eclipse.cdt.core.build.managed.IOption, java.lang.String[])
*/
@Override
public IOption setOption(IHoldsOptions holder, IOption option, String[] value) throws BuildException {
return getRootFolderInfo().setOption(holder, option, value);
}
@ -1153,6 +1172,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
// rebuildNeeded = true;
}
@Override
public void removeResourceConfiguration(IResourceInfo resConfig) {
ManagedBuildManager.performValueHandlerEvent(resConfig,
IManagedOptionValueHandler.EVENT_CLOSE);
@ -1178,6 +1198,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getArtifactExtension()
*/
@Override
public String getArtifactExtension() {
String ext = getArtifactExtensionAttribute(true);
return ext != null ? ext : EMPTY_STRING;
@ -1197,6 +1218,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getArtifactName()
*/
@Override
public String getArtifactName() {
if (artifactName == null) {
// If I have a parent, ask it
@ -1214,6 +1236,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getBuildArguments()
*/
@Override
public String getBuildArguments() {
IToolChain tc = getToolChain();
IBuilder builder = tc.getBuilder();
@ -1226,6 +1249,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getBuildCommand()
*/
@Override
public String getBuildCommand() {
IToolChain tc = getToolChain();
IBuilder builder = tc.getBuilder();
@ -1240,6 +1264,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
*
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getPrebuildStep()
*/
@Override
public String getPrebuildStep() {
if (prebuildStep == null) {
// If I have a parent, ask it
@ -1259,6 +1284,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
*
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getPostbuildStep()
*/
@Override
public String getPostbuildStep() {
if (postbuildStep == null) {
// If I have a parent, ask it
@ -1278,6 +1304,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
*
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getPreannouncebuildStep()
*/
@Override
public String getPreannouncebuildStep() {
if (preannouncebuildStep == null) {
// If I have a parent, ask it
@ -1297,6 +1324,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
*
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getPostannouncebuildStep()
*/
@Override
public String getPostannouncebuildStep() {
if (postannouncebuildStep == null) {
// If I have a parent, ask it
@ -1316,6 +1344,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
*
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getCleanCommand()
*/
@Override
public String getCleanCommand() {
// Return the command used to remove files
if (cleanCommand == null) {
@ -1338,6 +1367,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#getDescription()
*/
@Override
public String getDescription() {
if (description == null) {
// If I have a parent, ask it
@ -1357,6 +1387,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
*
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getErrorParserIds()
*/
@Override
public String getErrorParserIds() {
if (errorParserIds != null) {
return errorParserIds;
@ -1392,6 +1423,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getErrorParserList()
*/
@Override
public String[] getErrorParserList() {
Set<String> set = contributeErrorParsers(null, true);
if(set != null){
@ -1428,6 +1460,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setArtifactExtension(java.lang.String)
*/
@Override
public void setArtifactExtension(String extension) {
if (extension == null && artifactExtension == null) return;
if (artifactExtension == null || extension == null || !artifactExtension.equals(extension)) {
@ -1449,6 +1482,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#setArtifactName(java.lang.String)
*/
@Override
public void setArtifactName(String name) {
if (name == null && artifactName == null) return;
if (artifactName == null || name == null || !artifactName.equals(name)) {
@ -1490,6 +1524,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setErrorParserIds()
*/
@Override
public void setErrorParserIds(String ids) {
String currentIds = getErrorParserIds();
if (ids == null && currentIds == null) return;
@ -1502,6 +1537,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setCleanCommand()
*/
@Override
public void setCleanCommand(String command) {
if (command == null && cleanCommand == null) return;
if (cleanCommand == null || command == null || !cleanCommand.equals(command)) {
@ -1513,6 +1549,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#setDescription(java.lang.String)
*/
@Override
public void setDescription(String description) {
if (description == null && this.description == null) return;
if (this.description == null || description == null || !description.equals(this.description)) {
@ -1524,6 +1561,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setBuildArguments()
*/
@Override
public void setBuildArguments(String makeArgs) {
IToolChain tc = getToolChain();
IBuilder builder = tc.getBuilder();
@ -1546,6 +1584,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setBuildCommand()
*/
@Override
public void setBuildCommand(String command) {
IToolChain tc = getToolChain();
IBuilder builder = tc.getBuilder();
@ -1568,7 +1607,8 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#setPrebuildStep(java.lang.String)
*/
public void setPrebuildStep(String step) {
@Override
public void setPrebuildStep(String step) {
if (step == null && prebuildStep == null) return;
if (prebuildStep == null || step == null || !prebuildStep.equals(step)) {
prebuildStep = step;
@ -1581,7 +1621,8 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#setPostbuildStep(java.lang.String)
*/
public void setPostbuildStep(String step) {
@Override
public void setPostbuildStep(String step) {
if (step == null && postbuildStep == null) return;
if (postbuildStep == null || step == null || !postbuildStep.equals(step)) {
postbuildStep = step;
@ -1593,7 +1634,8 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#setPreannouncebuildStep(java.lang.String)
*/
public void setPreannouncebuildStep(String announceStep) {
@Override
public void setPreannouncebuildStep(String announceStep) {
if (announceStep == null && preannouncebuildStep == null) return;
if (preannouncebuildStep == null || announceStep == null || !preannouncebuildStep.equals(announceStep)) {
preannouncebuildStep = announceStep;
@ -1605,7 +1647,8 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IConfiguration#setPostannouncebuildStep(java.lang.String)
*/
public void setPostannouncebuildStep(String announceStep) {
@Override
public void setPostannouncebuildStep(String announceStep) {
if (announceStep == null && postannouncebuildStep == null) return;
if (postannouncebuildStep == null || announceStep == null || !postannouncebuildStep.equals(announceStep)) {
postannouncebuildStep = announceStep;
@ -1617,6 +1660,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isSupported()
*/
@Override
public boolean isSupported(){
IFolderInfo foInfo = getRootFolderInfo();
if(foInfo != null)
@ -1627,6 +1671,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isHeaderFile(java.lang.String)
*/
@Override
public boolean isHeaderFile(String ext) {
return getRootFolderInfo().isHeaderFile(ext);
}
@ -1638,6 +1683,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isExtensionElement()
*/
@Override
public boolean isExtensionElement() {
return isExtensionConfig;
}
@ -1645,6 +1691,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isDirty()
*/
@Override
public boolean isDirty() {
// This shouldn't be called for an extension configuration
if (isExtensionConfig) return false;
@ -1665,10 +1712,12 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#needsRebuild()
*/
@Override
public boolean needsRebuild() {
return needsRebuild(true);
}
@Override
public boolean needsFullRebuild() {
return needsRebuild(false);
}
@ -1692,6 +1741,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setDirty(boolean)
*/
@Override
public void setDirty(boolean isDirty) {
// Override the dirty flag
this.isDirty = isDirty;
@ -1708,6 +1758,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setRebuildState(boolean)
*/
@Override
public void setRebuildState(boolean rebuild) {
if(isExtensionElement() && rebuild)
return;
@ -1731,6 +1782,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#hasOverriddenBuildCommand()
*/
@Override
public boolean hasOverriddenBuildCommand() {
IBuilder builder = getToolChain().getBuilder();
if (builder != null) {
@ -1785,21 +1837,24 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
((FolderInfo)getRootFolderInfo()).resetOptionSettings();
}
/*
/**
* Create a resource configuration object for the passed-in file
*/
@Override
public IResourceConfiguration createResourceConfiguration(IFile file)
{
return createFileInfo(file.getFullPath().removeFirstSegments(1));
}
@Override
public IFileInfo createFileInfo(IPath path){
String resourceName = path.lastSegment();
String id = ManagedBuildManager.calculateChildId(getId(), path.toString());
return createFileInfo(path, id, resourceName);
}
@Override
public IFileInfo createFileInfo(IPath path, String id, String name){
IResourceInfo info = getResourceInfo(path, false);
IFileInfo fileInfo = null;
@ -1812,6 +1867,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return fileInfo;
}
@Override
public IFileInfo createFileInfo(IPath path, IFolderInfo base, ITool baseTool, String id, String name){
if(base.getPath().equals(path))
return null;
@ -1823,6 +1879,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return fileInfo;
}
@Override
public IFileInfo createFileInfo(IPath path, IFileInfo base, String id, String name){
if(base.getPath().equals(path))
return null;
@ -1837,6 +1894,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getEnvironmentVariableSupplier()
*/
@Override
public IConfigurationEnvironmentVariableSupplier getEnvironmentVariableSupplier(){
IToolChain toolChain = getToolChain();
if(toolChain != null)
@ -1865,6 +1923,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuildMacroSupplier()
*/
@Override
public IConfigurationBuildMacroSupplier getBuildMacroSupplier(){
IToolChain toolChain = getToolChain();
if(toolChain != null)
@ -1876,6 +1935,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isTemporary()
*/
@Override
public boolean isTemporary(){
return isTemporary;
}
@ -1902,6 +1962,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
}
}
@Override
public ITool calculateTargetTool(){
ITool tool = getTargetTool();
@ -1924,15 +1985,17 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return tool;
}
@Override
public ITool getToolFromOutputExtension(String extension) {
return getRootFolderInfo().getToolFromOutputExtension(extension);
}
@Override
public ITool getToolFromInputExtension(String sourceExtension) {
return getRootFolderInfo().getToolFromInputExtension(sourceExtension);
}
/*
/**
* The resource delta passed to the builder is not always up-to-date
* for the given configuration because between two builds of the same configuration
* any number of other configuration builds may occur
@ -2004,7 +2067,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
prefs.getBoolean(pref, false) : defaultValue;
}
*/
/*
/**
* this method is used for enabling/disabling the internal builder
* for the given configuration
*
@ -2121,7 +2184,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return null;
}
/*
/**
* returns whether the internal builder is enabled
* @return boolean
*/
@ -2129,7 +2192,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return getBuilder().isInternalBuilder();
}
/*
/**
*
* sets the Internal Builder mode
*
@ -2144,7 +2207,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
}
}
/*
/**
* returns the Internal Builder mode
* if true, internal builder will ignore build errors while building,
* otherwise it will stop at the first build error
@ -2156,73 +2219,80 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
}
/**
*
* sets the Internal Builder Parallel mode
*
* @param parallel if true, internal builder will use parallel mode
*
* @deprecated since CDT 9.0. Use {@link #setParallelDef(boolean)}
*/
@Deprecated
public void setInternalBuilderParallel(boolean parallel){
if(getInternalBuilderParallel() == parallel)
return;
try {
getEditableBuilder().setParallelBuildOn(parallel);
} catch (CoreException e) {
}
setParallelDef(parallel);
}
/**
* returns the Internal Builder parallel mode
* if true, internal builder will work in parallel mode
* otherwise it will use only one thread
*
* @return boolean
*
* @deprecated since CDT 9.0. Use {@link #getParallelDef()}
*/
@Deprecated
public boolean getInternalBuilderParallel(){
return getBuilder().isParallelBuildOn();
return getParallelDef();
}
/**
* @param parallel if true, internal builder will use parallel mode
* Set parallel execution mode for the configuration's builder.
* @see Builder#setParallelBuildOn(boolean)
*
* @param parallel - the flag to enable or disable parallel mode.
*/
public void setParallelDef(boolean parallel){
if(getParallelDef() == parallel)
return;
int num = getParallelNumber();
if(num != 0){
setParallelNumber(-num);
} else {
if(parallel){
setParallelNumber(-1);
} else {
setParallelNumber(1);
}
try {
getEditableBuilder().setParallelBuildOn(parallel);
} catch (CoreException e) {
ManagedBuilderCorePlugin.log(e);
}
}
/**
* @return boolean
* Check if the configuration's builder is operating in parallel mode.
* @return {@code true} if parallel mode is enabled, {@code false} otherwise.
*/
public boolean getParallelDef(){
int num = getBuilder().getParallelizationNum();
return num <= 0;
return getBuilder().isParallelBuildOn();
}
/**
* sets number of Parallel threads
* Sets maximum number of parallel threads/jobs to be used by builder.
* Note that the number will be set only if the builder is in "parallel"
* mode.
*
* @param jobs - maximum number of jobs or threads. If the number is 0
* or negative, negative "optimal" number will be set, see
* {@link Builder#getOptimalParallelJobNum()}.
*/
public void setParallelNumber(int n){
public void setParallelNumber(int jobs){
try {
getEditableBuilder().setParallelizationNum(n);
getEditableBuilder().setParallelizationNum(jobs);
} catch (CoreException e) {
ManagedBuilderCorePlugin.log(e);
}
}
/**
* returns number of Parallel threads
* Returns maximum number of parallel threads/jobs used by the configuration's builder.
* Note that this function can return negative value to indicate "optimal" number.
*
* @return int
* @see #setParallelDef(boolean)
* @see Builder#getParallelizationNum()
*
* @return - maximum number of parallel threads or jobs used by the builder or negative number.
* For exact interpretation see table in {@link IMakeCommonBuildInfo#getParallelizationNum()}
*/
public int getParallelNumber(){
return getBuilder().getParallelizationNum();
@ -2246,14 +2316,17 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
// return prefs;
// }
@Override
public IResourceInfo[] getResourceInfos() {
return rcInfos.getResourceInfos();
}
@Override
public IResourceInfo getResourceInfo(IPath path, boolean exactPath) {
return rcInfos.getResourceInfo(path, exactPath);
}
@Override
public IResourceInfo getResourceInfoById(String id) {
IResourceInfo infos[] = rcInfos.getResourceInfos();
for(int i = 0; i < infos.length; i++){
@ -2263,6 +2336,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return null;
}
@Override
public IFolderInfo getRootFolderInfo() {
return rootFolderInfo;
}
@ -2272,22 +2346,26 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return new ResourceInfoContainer(cr, false);
}
@Override
public CConfigurationData getConfigurationData(){
return fCfgData;
}
@Override
public void removeResourceInfo(IPath path) {
IResourceInfo info = getResourceInfo(path, true);
if(info != null)
removeResourceConfiguration(info);
}
@Override
public IFolderInfo createFolderInfo(IPath path) {
String resourceName = path.lastSegment();
String id = ManagedBuildManager.calculateChildId(getId(), path.toString());
return createFolderInfo(path, id, resourceName);
}
@Override
public IFolderInfo createFolderInfo(IPath path, String id, String name) {
IResourceInfo info = getResourceInfo(path, false);
IFolderInfo folderInfo = null;
@ -2300,6 +2378,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return folderInfo;
}
@Override
public IFolderInfo createFolderInfo(IPath path, IFolderInfo base, String id, String name) {
if(base.getPath().equals(path))
return null;
@ -2312,6 +2391,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return folderInfo;
}
@Override
public ICSourceEntry[] getSourceEntries() {
if(sourceEntries == null || sourceEntries.length == 0){
if(parent != null && sourceEntries == null)
@ -2322,6 +2402,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return sourceEntries.clone();
}
@Override
public void setSourceEntries(ICSourceEntry[] entries) {
setSourceEntries(entries, true);
}
@ -2355,6 +2436,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
}
}
@Override
public void setErrorParserList(String[] ids) {
if(ids == null){
//reset
@ -2394,10 +2476,12 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
}
}
@Override
public CBuildData getBuildData() {
return getEditableBuilder().getBuildData();
}
@Override
public IBuilder getEditableBuilder(){
IToolChain tc = getToolChain();
IBuilder builder = tc.getBuilder();
@ -2409,10 +2493,12 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return builder;
}
@Override
public IBuilder getBuilder(){
return getToolChain().getBuilder();
}
@Override
public String getOutputPrefix(String outputExtension) {
// Treat null extensions as empty string
String ext = outputExtension == null ? new String() : outputExtension;
@ -2437,6 +2523,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
fCfgDes = cfgDes;
}
@Override
public IBuildObjectProperties getBuildProperties() {
if(buildProperties == null){
BuildObjectProperties parentProps = findBuildProperties();
@ -2467,6 +2554,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return supportsValue(type.getId(), value.getId());
}
@Override
public void propertiesChanged() {
if(isExtensionConfig)
return;
@ -2490,6 +2578,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return booleanExpressionCalculator;
}
@Override
public boolean isSystemObject() {
if(isTest)
return true;
@ -2500,10 +2589,12 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return false;
}
@Override
public String getOutputExtension(String resourceExtension) {
return getRootFolderInfo().getOutputExtension(resourceExtension);
}
@Override
public String getOutputFlag(String outputExt) {
// Treat null extension as an empty string
String ext = outputExt == null ? new String() : outputExt;
@ -2521,6 +2612,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return flags;
}
@Override
public IManagedCommandLineInfo generateToolCommandLineInfo( String sourceExtension, String[] flags,
String outputFlag, String outputPrefix, String outputName, String[] inputResources, IPath inputLocation, IPath outputLocation ){
ITool[] tools = getFilteredTools();
@ -2573,6 +2665,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return null;
}
@Override
public String[] getUserObjects(String extension) {
Vector<String> objs = new Vector<String>();
ITool tool = calculateTargetTool();
@ -2614,6 +2707,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return objs.toArray(new String[objs.size()]);
}
@Override
public String[] getLibs(String extension) {
Vector<String> libs = new Vector<String>();
ITool tool = calculateTargetTool();
@ -2668,6 +2762,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return libs.toArray(new String[libs.size()]);
}
@Override
public boolean buildsFileType(String srcExt) {
return getRootFolderInfo().buildsFileType(srcExt);
}
@ -2735,6 +2830,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
}
}
@Override
public boolean supportsBuild(boolean managed) {
return supportsBuild(managed, true);
}
@ -2755,6 +2851,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return true;
}
@Override
public boolean supportsType(String typeId) {
SupportedProperties props = findSupportedProperties();
boolean supports = false;
@ -2768,6 +2865,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return supports;
}
@Override
public boolean supportsValue(String typeId, String valueId) {
SupportedProperties props = findSupportedProperties();
boolean supports = false;
@ -2794,6 +2892,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
supportedProperties = new SupportedProperties(el);
}
@Override
public String[] getRequiredTypeIds() {
SupportedProperties props = findSupportedProperties();
List<String> list = new ArrayList<String>();
@ -2806,6 +2905,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return list.toArray(new String[list.size()]);
}
@Override
public String[] getSupportedTypeIds() {
SupportedProperties props = findSupportedProperties();
List<String> list = new ArrayList<String>();
@ -2818,6 +2918,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return list.toArray(new String[list.size()]);
}
@Override
public String[] getSupportedValueIds(String typeId) {
SupportedProperties props = findSupportedProperties();
List<String> list = new ArrayList<String>();
@ -2830,6 +2931,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return list.toArray(new String[list.size()]);
}
@Override
public boolean requiresType(String typeId) {
SupportedProperties props = findSupportedProperties();
boolean requires = false;
@ -2843,10 +2945,12 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return requires;
}
@Override
public boolean isManagedBuildOn() {
return getBuilder().isManagedBuildOn();
}
@Override
public void setManagedBuildOn(boolean on) throws BuildException {
try {
getEditableBuilder().setManagedBuildOn(on);
@ -2855,6 +2959,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
}
}
@Override
public void changeBuilder(IBuilder newBuilder, String id, String name){
changeBuilder(newBuilder, id, name, false);
}
@ -2884,6 +2989,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
}
}
@Override
public boolean isBuilderCompatible(IBuilder builder){
return builder.supportsBuild(isManagedBuildOn());
}
@ -2964,6 +3070,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return isPreferenceConfig;
}
@Override
public IBuildPropertyValue getBuildArtefactType() {
IBuildObjectProperties props = findBuildProperties();
if(props != null){
@ -2974,6 +3081,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
return null;
}
@Override
public void setBuildArtefactType(String id) throws BuildException {
IBuildObjectProperties props = getBuildProperties();
try {
@ -3026,34 +3134,42 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
}
}
@Override
public IRealBuildObjectAssociation getExtensionObject() {
return isExtensionConfig ? this : (Configuration)getParent();
}
@Override
public IRealBuildObjectAssociation[] getIdenticBuildObjects() {
return new Configuration[]{(Configuration)getExtensionObject()};
}
@Override
public IRealBuildObjectAssociation getRealBuildObject() {
return getExtensionObject();
}
@Override
public IRealBuildObjectAssociation getSuperClassObject() {
return (IRealBuildObjectAssociation)getParent();
}
@Override
public int getType() {
return OBJECT_CONFIGURATION;
}
@Override
public boolean isRealBuildObject() {
return getRealBuildObject() == this;
}
@Override
public String getUniqueRealName() {
return getName();
}
@Override
public boolean isExtensionBuildObject() {
return isExtensionElement();
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2002, 2010 IBM Corporation and others.
* Copyright (c) 2002, 2011 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -151,6 +151,7 @@ public class GeneratedMakefileBuilder extends ACBuilder {
return fullBuildNeeded;
}
@Override
public boolean visit(IResourceDelta delta) throws CoreException {
IResource resource = delta.getResource();
// If the project has changed, then a build is needed and we can stop
@ -231,6 +232,7 @@ public class GeneratedMakefileBuilder extends ACBuilder {
}
}
@Override
public boolean visit(IResourceDelta delta) throws CoreException {
IResource rc = delta.getResource();
@ -906,244 +908,242 @@ public class GeneratedMakefileBuilder extends ACBuilder {
}
IPath makeCommand = new Path(makeCmd);
if (makeCommand != null) {
String[] msgs = new String[2];
msgs[0] = makeCommand.toString();
msgs[1] = currentProject.getName();
monitor.subTask(ManagedMakeMessages.getFormattedString(MAKE, msgs));
String[] msgs = new String[2];
msgs[0] = makeCommand.toString();
msgs[1] = currentProject.getName();
monitor.subTask(ManagedMakeMessages.getFormattedString(MAKE, msgs));
// Get a build console for the project
StringBuffer buf = new StringBuffer();
IConsole console = CCorePlugin.getDefault().getConsole();
console.start(currentProject);
ConsoleOutputStream consoleOutStream = console.getOutputStream();
String[] consoleHeader = new String[3];
// Get a build console for the project
StringBuffer buf = new StringBuffer();
IConsole console = CCorePlugin.getDefault().getConsole();
console.start(currentProject);
ConsoleOutputStream consoleOutStream = console.getOutputStream();
String[] consoleHeader = new String[3];
switch (buildType) {
case FULL_BUILD:
case INCREMENTAL_BUILD:
consoleHeader[0] = ManagedMakeMessages.getResourceString(TYPE_INC);
break;
case CLEAN_BUILD:
consoleHeader[0] = ManagedMakeMessages.getResourceString(TYPE_CLEAN);
break;
}
consoleHeader[1] = info.getConfigurationName();
consoleHeader[2] = currentProject.getName();
buf.append(NEWLINE);
buf.append(ManagedMakeMessages.getFormattedString(CONSOLE_HEADER, consoleHeader)).append(NEWLINE);
buf.append(NEWLINE);
IConfiguration cfg = info.getDefaultConfiguration();
if(!cfg.isSupported()){
String msg = ManagedMakeMessages.getFormattedString(WARNING_UNSUPPORTED_CONFIGURATION,new String[] {cfg.getName(),cfg.getToolChain().getName()});
buf.append(msg).append(NEWLINE);
buf.append(NEWLINE);
}
consoleOutStream.write(buf.toString().getBytes());
consoleOutStream.flush();
// Remove all markers for this project
removeAllMarkers(currentProject);
// Get a launcher for the make command
String errMsg = null;
IBuilder builder = info.getDefaultConfiguration().getBuilder();
ICommandLauncher launcher = builder.getCommandLauncher();
launcher.setProject(currentProject);
launcher.showCommand(true);
// Set the environmennt
IBuildEnvironmentVariable variables[] = ManagedBuildManager.getEnvironmentVariableProvider().getVariables(cfg,true,true);
String[] env = null;
ArrayList<String> envList = new ArrayList<String>();
if (variables != null) {
for(int i = 0; i < variables.length; i++){
envList.add(variables[i].getName() + "=" + variables[i].getValue()); //$NON-NLS-1$
}
env = envList.toArray(new String[envList.size()]);
}
// Hook up an error parser manager
String[] errorParsers = info.getDefaultConfiguration().getErrorParserList();
ErrorParserManager epm = new ErrorParserManager(getProject(), workingDirectoryURI, this, errorParsers);
epm.setOutputStream(consoleOutStream);
// This variable is necessary to ensure that the EPM stream stay open
// until we explicitly close it. See bug#123302.
OutputStream epmOutputStream = epm.getOutputStream();
// Get the arguments to be passed to make from build model
ArrayList<String> makeArgs = new ArrayList<String>();
String arg = info.getBuildArguments();
if (arg.length() > 0) {
String[] args = arg.split("\\s"); //$NON-NLS-1$
for (int i = 0; i < args.length; ++i) {
makeArgs.add(args[i]);
}
}
String[] makeTargets;
String prebuildStep = info.getPrebuildStep();
//try to resolve the build macros in the prebuildStep
try{
prebuildStep = ManagedBuildManager.getBuildMacroProvider().resolveValueToMakefileFormat(
prebuildStep,
"", //$NON-NLS-1$
" ", //$NON-NLS-1$
IBuildMacroProvider.CONTEXT_CONFIGURATION,
cfg);
} catch (BuildMacroException e){
}
boolean prebuildStepPresent = (prebuildStep.length() > 0);
Process proc = null;
boolean isuptodate = false;
if (prebuildStepPresent) {
@SuppressWarnings("unchecked")
ArrayList<String> premakeArgs = (ArrayList<String>) makeArgs.clone();
String[] premakeTargets;
switch (buildType) {
case FULL_BUILD:
case INCREMENTAL_BUILD:
consoleHeader[0] = ManagedMakeMessages.getResourceString(TYPE_INC);
break;
case CLEAN_BUILD:
consoleHeader[0] = ManagedMakeMessages.getResourceString(TYPE_CLEAN);
break;
}
consoleHeader[1] = info.getConfigurationName();
consoleHeader[2] = currentProject.getName();
buf.append(NEWLINE);
buf.append(ManagedMakeMessages.getFormattedString(CONSOLE_HEADER, consoleHeader)).append(NEWLINE);
buf.append(NEWLINE);
IConfiguration cfg = info.getDefaultConfiguration();
if(!cfg.isSupported()){
String msg = ManagedMakeMessages.getFormattedString(WARNING_UNSUPPORTED_CONFIGURATION,new String[] {cfg.getName(),cfg.getToolChain().getName()});
buf.append(msg).append(NEWLINE);
buf.append(NEWLINE);
}
consoleOutStream.write(buf.toString().getBytes());
consoleOutStream.flush();
// Remove all markers for this project
removeAllMarkers(currentProject);
// Get a launcher for the make command
String errMsg = null;
IBuilder builder = info.getDefaultConfiguration().getBuilder();
ICommandLauncher launcher = builder.getCommandLauncher();
launcher.setProject(currentProject);
launcher.showCommand(true);
// Set the environmennt
IBuildEnvironmentVariable variables[] = ManagedBuildManager.getEnvironmentVariableProvider().getVariables(cfg,true,true);
String[] env = null;
ArrayList<String> envList = new ArrayList<String>();
if (variables != null) {
for(int i = 0; i < variables.length; i++){
envList.add(variables[i].getName() + "=" + variables[i].getValue()); //$NON-NLS-1$
}
env = envList.toArray(new String[envList.size()]);
}
// Hook up an error parser manager
String[] errorParsers = info.getDefaultConfiguration().getErrorParserList();
ErrorParserManager epm = new ErrorParserManager(getProject(), workingDirectoryURI, this, errorParsers);
epm.setOutputStream(consoleOutStream);
// This variable is necessary to ensure that the EPM stream stay open
// until we explicitly close it. See bug#123302.
OutputStream epmOutputStream = epm.getOutputStream();
// Get the arguments to be passed to make from build model
ArrayList<String> makeArgs = new ArrayList<String>();
String arg = info.getBuildArguments();
if (arg.length() > 0) {
String[] args = arg.split("\\s"); //$NON-NLS-1$
for (int i = 0; i < args.length; ++i) {
makeArgs.add(args[i]);
}
}
String[] makeTargets;
String prebuildStep = info.getPrebuildStep();
//try to resolve the build macros in the prebuildStep
try{
prebuildStep = ManagedBuildManager.getBuildMacroProvider().resolveValueToMakefileFormat(
prebuildStep,
"", //$NON-NLS-1$
" ", //$NON-NLS-1$
IBuildMacroProvider.CONTEXT_CONFIGURATION,
cfg);
} catch (BuildMacroException e){
}
boolean prebuildStepPresent = (prebuildStep.length() > 0);
Process proc = null;
boolean isuptodate = false;
if (prebuildStepPresent) {
@SuppressWarnings("unchecked")
ArrayList<String> premakeArgs = (ArrayList<String>) makeArgs.clone();
String[] premakeTargets;
switch (buildType) {
case INCREMENTAL_BUILD: {
// For an incremental build with a prebuild step:
// Check the status of the main build with "make -q main-build"
// If up to date:
// then: don't invoke the prebuild step, which should be run only if
// something needs to be built in the main build
// else: invoke the prebuild step and the main build step
premakeArgs.add("-q"); //$NON-NLS-1$
premakeArgs.add("main-build"); //$NON-NLS-1$
premakeTargets = premakeArgs.toArray(new String[premakeArgs.size()]);
proc = launcher.execute(makeCommand, premakeTargets, env, workingDirectory, monitor);
if (proc != null) {
try {
// Close the input of the process since we will never write to it
proc.getOutputStream().close();
} catch (IOException e) {
}
if (launcher.waitAndRead(epm.getOutputStream(), epm.getOutputStream(),
new SubProgressMonitor(monitor,
IProgressMonitor.UNKNOWN)) != ICommandLauncher.OK) {
errMsg = launcher.getErrorMessage();
}
} else {
errMsg = launcher.getErrorMessage();
}
if ((errMsg != null && errMsg.length() > 0) || proc == null) {
// Can't tell if the build is needed, so assume it is, and let any errors be triggered
// when the "real" build is invoked below
makeArgs.add("pre-build"); //$NON-NLS-1$
makeArgs.add("main-build"); //$NON-NLS-1$
} else {
// The "make -q" command launch was successful
if (proc.exitValue() == 0) {
// If the status value returned from "make -q" is 0, then the build state is up-to-date
isuptodate = true;
// Report that the build was up to date, and thus nothing needs to be built
String uptodateMsg = ManagedMakeMessages.getFormattedString(NOTHING_BUILT, currentProject.getName());
buf = new StringBuffer();
buf.append(NEWLINE);
buf.append(uptodateMsg).append(NEWLINE);
// Write message on the console
consoleOutStream.write(buf.toString().getBytes());
consoleOutStream.flush();
epmOutputStream.close();
consoleOutStream.close();
} else {
// The status value was other than 0, so press on with the build process
makeArgs.add("pre-build"); //$NON-NLS-1$
makeArgs.add("main-build"); //$NON-NLS-1$
}
}
break;
}
case FULL_BUILD: {
// makeArgs.add("clean"); //$NON-NLS-1$
makeArgs.add("pre-build"); //$NON-NLS-1$
makeArgs.add("main-build"); //$NON-NLS-1$
break;
}
case CLEAN_BUILD: {
makeArgs.add("clean"); //$NON-NLS-1$
break;
}
}
} else {
// No prebuild step
//
makeArgs.addAll(Arrays.asList(getMakeTargets(buildType)));
}
makeTargets = makeArgs.toArray(new String[makeArgs.size()]);
// Launch make - main invocation
if (!isuptodate) {
proc = launcher.execute(makeCommand, makeTargets, env, workingDirectory, monitor);
case INCREMENTAL_BUILD: {
// For an incremental build with a prebuild step:
// Check the status of the main build with "make -q main-build"
// If up to date:
// then: don't invoke the prebuild step, which should be run only if
// something needs to be built in the main build
// else: invoke the prebuild step and the main build step
premakeArgs.add("-q"); //$NON-NLS-1$
premakeArgs.add("main-build"); //$NON-NLS-1$
premakeTargets = premakeArgs.toArray(new String[premakeArgs.size()]);
proc = launcher.execute(makeCommand, premakeTargets, env, workingDirectory, monitor);
if (proc != null) {
try {
// Close the input of the process since we will never write to it
proc.getOutputStream().close();
} catch (IOException e) {
}
int state = launcher.waitAndRead(epm.getOutputStream(), epm.getOutputStream(),
if (launcher.waitAndRead(epm.getOutputStream(), epm.getOutputStream(),
new SubProgressMonitor(monitor,
IProgressMonitor.UNKNOWN));
if(state != ICommandLauncher.OK){
IProgressMonitor.UNKNOWN)) != ICommandLauncher.OK) {
errMsg = launcher.getErrorMessage();
if(state == ICommandLauncher.COMMAND_CANCELED){
//TODO: the better way of handling cancel is needed
//currently the rebuild state is set to true forcing the full rebuild
//on the next builder invocation
info.getDefaultConfiguration().setRebuildState(true);
}
}
// Force a resync of the projects without allowing the user to cancel.
// This is probably unkind, but short of this there is no way to insure
// the UI is up-to-date with the build results
monitor.subTask(ManagedMakeMessages
.getResourceString(REFRESH));
try {
//currentProject.refreshLocal(IResource.DEPTH_INFINITE, null);
// use the refresh scope manager to refresh
RefreshScopeManager refreshManager = RefreshScopeManager.getInstance();
IWorkspaceRunnable runnable = refreshManager.getRefreshRunnable(currentProject);
ResourcesPlugin.getWorkspace().run(runnable, null, IWorkspace.AVOID_UPDATE, null);
} catch (CoreException e) {
monitor.subTask(ManagedMakeMessages
.getResourceString(REFRESH_ERROR));
}
} else {
errMsg = launcher.getErrorMessage();
}
// Report either the success or failure of our mission
buf = new StringBuffer();
if (errMsg != null && errMsg.length() > 0) {
String errorDesc = ManagedMakeMessages.getResourceString(BUILD_ERROR);
buf.append(errorDesc).append(NEWLINE);
buf.append("(").append(errMsg).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
if ((errMsg != null && errMsg.length() > 0) || proc == null) {
// Can't tell if the build is needed, so assume it is, and let any errors be triggered
// when the "real" build is invoked below
makeArgs.add("pre-build"); //$NON-NLS-1$
makeArgs.add("main-build"); //$NON-NLS-1$
} else {
// Report a successful build
String successMsg = ManagedMakeMessages.getFormattedString(BUILD_FINISHED,
currentProject.getName());
buf.append(successMsg).append(NEWLINE);
// The "make -q" command launch was successful
if (proc.exitValue() == 0) {
// If the status value returned from "make -q" is 0, then the build state is up-to-date
isuptodate = true;
// Report that the build was up to date, and thus nothing needs to be built
String uptodateMsg = ManagedMakeMessages.getFormattedString(NOTHING_BUILT, currentProject.getName());
buf = new StringBuffer();
buf.append(NEWLINE);
buf.append(uptodateMsg).append(NEWLINE);
// Write message on the console
consoleOutStream.write(buf.toString().getBytes());
consoleOutStream.flush();
epmOutputStream.close();
consoleOutStream.close();
} else {
// The status value was other than 0, so press on with the build process
makeArgs.add("pre-build"); //$NON-NLS-1$
makeArgs.add("main-build"); //$NON-NLS-1$
}
}
break;
}
case FULL_BUILD: {
// makeArgs.add("clean"); //$NON-NLS-1$
makeArgs.add("pre-build"); //$NON-NLS-1$
makeArgs.add("main-build"); //$NON-NLS-1$
break;
}
case CLEAN_BUILD: {
makeArgs.add("clean"); //$NON-NLS-1$
break;
}
}
} else {
// No prebuild step
//
makeArgs.addAll(Arrays.asList(getMakeTargets(buildType)));
}
makeTargets = makeArgs.toArray(new String[makeArgs.size()]);
// Launch make - main invocation
if (!isuptodate) {
proc = launcher.execute(makeCommand, makeTargets, env, workingDirectory, monitor);
if (proc != null) {
try {
// Close the input of the process since we will never write to it
proc.getOutputStream().close();
} catch (IOException e) {
}
// Write message on the console
consoleOutStream.write(buf.toString().getBytes());
consoleOutStream.flush();
epmOutputStream.close();
int state = launcher.waitAndRead(epm.getOutputStream(), epm.getOutputStream(),
new SubProgressMonitor(monitor,
IProgressMonitor.UNKNOWN));
if(state != ICommandLauncher.OK){
errMsg = launcher.getErrorMessage();
// Generate any error markers that the build has discovered
monitor.subTask(ManagedMakeMessages.getResourceString(MARKERS));
addBuilderMarkers(epm);
consoleOutStream.close();
if(state == ICommandLauncher.COMMAND_CANCELED){
//TODO: the better way of handling cancel is needed
//currently the rebuild state is set to true forcing the full rebuild
//on the next builder invocation
info.getDefaultConfiguration().setRebuildState(true);
}
}
// Force a resync of the projects without allowing the user to cancel.
// This is probably unkind, but short of this there is no way to insure
// the UI is up-to-date with the build results
monitor.subTask(ManagedMakeMessages
.getResourceString(REFRESH));
try {
//currentProject.refreshLocal(IResource.DEPTH_INFINITE, null);
// use the refresh scope manager to refresh
RefreshScopeManager refreshManager = RefreshScopeManager.getInstance();
IWorkspaceRunnable runnable = refreshManager.getRefreshRunnable(currentProject);
ResourcesPlugin.getWorkspace().run(runnable, null, IWorkspace.AVOID_UPDATE, null);
} catch (CoreException e) {
monitor.subTask(ManagedMakeMessages
.getResourceString(REFRESH_ERROR));
}
} else {
errMsg = launcher.getErrorMessage();
}
// Report either the success or failure of our mission
buf = new StringBuffer();
if (errMsg != null && errMsg.length() > 0) {
String errorDesc = ManagedMakeMessages.getResourceString(BUILD_ERROR);
buf.append(errorDesc).append(NEWLINE);
buf.append("(").append(errMsg).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
} else {
// Report a successful build
String successMsg = ManagedMakeMessages.getFormattedString(BUILD_FINISHED,
currentProject.getName());
buf.append(successMsg).append(NEWLINE);
}
// Write message on the console
consoleOutStream.write(buf.toString().getBytes());
consoleOutStream.flush();
epmOutputStream.close();
// Generate any error markers that the build has discovered
monitor.subTask(ManagedMakeMessages.getResourceString(MARKERS));
addBuilderMarkers(epm);
consoleOutStream.close();
}
} catch (Exception e) {
forgetLastBuiltState();
@ -1196,7 +1196,7 @@ public class GeneratedMakefileBuilder extends ACBuilder {
boolean resumeOnErr,
IProgressMonitor monitor) {
boolean isParallel = ((Configuration)cfg).getInternalBuilderParallel();
boolean isParallel = ((Configuration)cfg).getParallelDef();
// Get the project and make sure there's a monitor to cancel the build
IProject currentProject = cfg.getOwner().getProject();

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2010 Intel Corporation and others.
* Copyright (c) 2007, 2011 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -44,6 +44,7 @@ import org.eclipse.cdt.managedbuilder.envvar.IConfigurationEnvironmentVariableSu
import org.eclipse.cdt.managedbuilder.macros.IConfigurationBuildMacroSupplier;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.osgi.framework.Version;
@ -91,6 +92,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#buildsFileType(java.lang.String)
*/
@Override
public boolean buildsFileType(String srcExt) {
return curr().buildsFileType(srcExt);
}
@ -98,6 +100,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#calculateTargetTool()
*/
@Override
public ITool calculateTargetTool() {
return curr().calculateTargetTool();
}
@ -105,6 +108,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#changeBuilder(org.eclipse.cdt.managedbuilder.core.IBuilder, java.lang.String, java.lang.String)
*/
@Override
public void changeBuilder(IBuilder newBuilder, String id, String name) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].changeBuilder(newBuilder, id, name);
@ -113,6 +117,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFileInfo(org.eclipse.core.runtime.IPath)
*/
@Override
public IFileInfo createFileInfo(IPath path) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.createFileInfo(1)"); //$NON-NLS-1$
@ -122,6 +127,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFileInfo(org.eclipse.core.runtime.IPath, java.lang.String, java.lang.String)
*/
@Override
public IFileInfo createFileInfo(IPath path, String id, String name) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.createFileInfo(3)"); //$NON-NLS-1$
@ -131,6 +137,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFileInfo(org.eclipse.core.runtime.IPath, org.eclipse.cdt.managedbuilder.core.IFolderInfo, org.eclipse.cdt.managedbuilder.core.ITool, java.lang.String, java.lang.String)
*/
@Override
public IFileInfo createFileInfo(IPath path, IFolderInfo base,
ITool baseTool, String id, String name) {
if (DEBUG)
@ -141,6 +148,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFileInfo(org.eclipse.core.runtime.IPath, org.eclipse.cdt.managedbuilder.core.IFileInfo, java.lang.String, java.lang.String)
*/
@Override
public IFileInfo createFileInfo(IPath path, IFileInfo base, String id, String name) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.createFileInfo(4)"); //$NON-NLS-1$
@ -150,6 +158,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFolderInfo(org.eclipse.core.runtime.IPath)
*/
@Override
public IFolderInfo createFolderInfo(IPath path) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.createFolderInfo()"); //$NON-NLS-1$
@ -159,6 +168,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFolderInfo(org.eclipse.core.runtime.IPath, java.lang.String, java.lang.String)
*/
@Override
public IFolderInfo createFolderInfo(IPath path, String id, String name) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.createFolderInfo(3)"); //$NON-NLS-1$
@ -168,6 +178,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createFolderInfo(org.eclipse.core.runtime.IPath, org.eclipse.cdt.managedbuilder.core.IFolderInfo, java.lang.String, java.lang.String)
*/
@Override
public IFolderInfo createFolderInfo(IPath path, IFolderInfo base, String id, String name) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.createFolderInfo(4)"); //$NON-NLS-1$
@ -177,6 +188,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createResourceConfiguration(org.eclipse.core.resources.IFile)
*/
@Override
public IResourceConfiguration createResourceConfiguration(IFile file) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.createResourceConfiguration()"); //$NON-NLS-1$
@ -186,6 +198,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#createToolChain(org.eclipse.cdt.managedbuilder.core.IToolChain, java.lang.String, java.lang.String, boolean)
*/
@Override
public IToolChain createToolChain(IToolChain superClass, String Id,
String name, boolean isExtensionElement) {
if (DEBUG)
@ -196,6 +209,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#generateToolCommandLineInfo(java.lang.String, java.lang.String[], java.lang.String, java.lang.String, java.lang.String, java.lang.String[], org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IPath)
*/
@Override
public IManagedCommandLineInfo generateToolCommandLineInfo(
String sourceExtension,
String[] flags,
@ -221,6 +235,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getArtifactExtension()
*/
@Override
public String getArtifactExtension() {
String s = fCfgs[0].getArtifactExtension();
for (int i=1; i<fCfgs.length; i++)
@ -239,6 +254,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getArtifactName()
*/
@Override
public String getArtifactName() {
String s = fCfgs[0].getArtifactName();
for (int i=1; i<fCfgs.length; i++)
@ -253,20 +269,30 @@ public class MultiConfiguration extends MultiItemsHolder implements
return s;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuildArguments()
/**
* @return build arguments if the arguments for all configurations match
* or {@code null} otherwise.
*/
@Override
public String getBuildArguments() {
String s = fCfgs[0].getBuildArguments();
for (int i=1; i<fCfgs.length; i++)
if (! s.equals(fCfgs[i].getBuildArguments()))
return EMPTY_STR;
return s;
String args0 = fCfgs[0].getBuildArguments();
if (args0 == null)
args0 = EMPTY_STR;
for (IConfiguration cfg : fCfgs) {
String args = cfg.getBuildArguments();
if (args == null)
args = EMPTY_STR;
if (!args0.equals(args))
return null;
}
return args0;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuildArtefactType()
*/
@Override
public IBuildPropertyValue getBuildArtefactType() {
IBuildPropertyValue b = fCfgs[0].getBuildArtefactType();
if (b == null)
@ -280,6 +306,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuildCommand()
*/
@Override
public String getBuildCommand() {
String s = fCfgs[0].getBuildCommand();
if (s == null || s.length() == 0)
@ -293,6 +320,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuildData()
*/
@Override
public CBuildData getBuildData() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getBuildData()"); //$NON-NLS-1$
@ -302,6 +330,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuildMacroSupplier()
*/
@Override
public IConfigurationBuildMacroSupplier getBuildMacroSupplier() {
IConfigurationBuildMacroSupplier ms = fCfgs[0].getBuildMacroSupplier();
if (ms == null)
@ -315,6 +344,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getBuilder()
*/
@Override
public IBuilder getBuilder() {
IBuilder b = fCfgs[0].getBuilder();
if (b == null)
@ -328,6 +358,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getCleanCommand()
*/
@Override
public String getCleanCommand() {
String s = fCfgs[0].getCleanCommand();
for (int i=1; i<fCfgs.length; i++)
@ -339,6 +370,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getConfigurationData()
*/
@Override
public CConfigurationData getConfigurationData() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getConfigurationData()"); //$NON-NLS-1$
@ -348,6 +380,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getDescription()
*/
@Override
public String getDescription() {
String s = fCfgs[0].getDescription();
for (int i=1; i<fCfgs.length; i++)
@ -359,6 +392,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getEditableBuilder()
*/
@Override
public IBuilder getEditableBuilder() {
return curr().getEditableBuilder();
}
@ -366,6 +400,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getEnvironmentVariableSupplier()
*/
@Override
public IConfigurationEnvironmentVariableSupplier getEnvironmentVariableSupplier() {
IConfigurationEnvironmentVariableSupplier vs = fCfgs[0].getEnvironmentVariableSupplier();
if (vs == null)
@ -380,6 +415,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getErrorParserIds()
*/
@Override
public String getErrorParserIds() {
String s = fCfgs[0].getErrorParserIds();
if (s == null || s.length() == 0)
@ -393,6 +429,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getErrorParserList()
*/
@Override
public String[] getErrorParserList() {
String[] s = fCfgs[0].getErrorParserList();
if (s == null || s.length == 0)
@ -406,6 +443,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getFilteredTools()
*/
@Override
public ITool[] getFilteredTools() {
ITool[] ts = curr().getFilteredTools();
return ts;
@ -414,6 +452,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getLibs(java.lang.String)
*/
@Override
public String[] getLibs(String extension) {
String[] s = fCfgs[0].getLibs(extension);
if (s == null || s.length == 0)
@ -427,6 +466,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getManagedProject()
*/
@Override
public IManagedProject getManagedProject() {
IManagedProject s = fCfgs[0].getManagedProject();
if (s == null)
@ -440,6 +480,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getOutputExtension(java.lang.String)
*/
@Override
public String getOutputExtension(String resourceExtension) {
String s = fCfgs[0].getOutputExtension(resourceExtension);
if (s == null || s.length() == 0)
@ -453,6 +494,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getOutputFlag(java.lang.String)
*/
@Override
public String getOutputFlag(String outputExt) {
String s = fCfgs[0].getOutputFlag(outputExt);
if (s == null || s.length() == 0)
@ -466,6 +508,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getOutputPrefix(java.lang.String)
*/
@Override
public String getOutputPrefix(String outputExtension) {
String s = fCfgs[0].getOutputPrefix(outputExtension);
if (s == null || s.length() == 0)
@ -479,6 +522,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getOwner()
*/
@Override
public IResource getOwner() {
IResource s = fCfgs[0].getOwner();
if (s == null)
@ -492,6 +536,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getParent()
*/
@Override
public IConfiguration getParent() {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.getParent()"); //$NON-NLS-1$
@ -501,6 +546,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getPostannouncebuildStep()
*/
@Override
public String getPostannouncebuildStep() {
String s = fCfgs[0].getPostannouncebuildStep();
if (s == null || s.length() == 0)
@ -514,6 +560,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getPostbuildStep()
*/
@Override
public String getPostbuildStep() {
String s = fCfgs[0].getPostbuildStep();
if (s == null || s.length() == 0)
@ -527,6 +574,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getPreannouncebuildStep()
*/
@Override
public String getPreannouncebuildStep() {
String s = fCfgs[0].getPreannouncebuildStep();
if (s == null || s.length() == 0)
@ -540,6 +588,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getPrebuildStep()
*/
@Override
public String getPrebuildStep() {
String s = fCfgs[0].getPrebuildStep();
if (s == null || s.length() == 0)
@ -553,6 +602,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getProjectType()
*/
@Override
public IProjectType getProjectType() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getProjectType()"); //$NON-NLS-1$
@ -562,6 +612,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getResourceConfiguration(java.lang.String)
*/
@Override
public IResourceConfiguration getResourceConfiguration(String path) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.getResourceConfiguration()"); //$NON-NLS-1$
@ -571,6 +622,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getResourceConfigurations()
*/
@Override
public IResourceConfiguration[] getResourceConfigurations() {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.getResourceConfigurations()"); //$NON-NLS-1$
@ -580,6 +632,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getResourceInfo(org.eclipse.core.runtime.IPath, boolean)
*/
@Override
public IResourceInfo getResourceInfo(IPath path, boolean exactPath) {
IResourceInfo ris[] = new IResourceInfo[fCfgs.length];
boolean isFolder = true;
@ -599,6 +652,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getResourceInfoById(java.lang.String)
*/
@Override
public IResourceInfo getResourceInfoById(String id) {
if (DEBUG)
System.out.println("Bad multi access: MultiConfiguration.getResourceInfoById()"); //$NON-NLS-1$
@ -608,6 +662,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getResourceInfos()
*/
@Override
public IResourceInfo[] getResourceInfos() {
ArrayList<IResourceInfo> ri = new ArrayList<IResourceInfo>();
for (int i=0; i<fCfgs.length; i++) {
@ -620,6 +675,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getRootFolderInfo()
*/
@Override
public IFolderInfo getRootFolderInfo() {
IFolderInfo ris[] = new IFolderInfo[fCfgs.length];
for (int i=0; i<fCfgs.length; i++)
@ -630,6 +686,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getSourceEntries()
*/
@Override
public ICSourceEntry[] getSourceEntries() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getSourceEntries()"); //$NON-NLS-1$
@ -639,6 +696,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getTargetTool()
*/
@Override
public ITool getTargetTool() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getTargetTool()"); //$NON-NLS-1$
@ -648,6 +706,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getTool(java.lang.String)
*/
@Override
public ITool getTool(String id) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getTool()"); //$NON-NLS-1$
@ -657,6 +716,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getToolChain()
*/
@Override
public IToolChain getToolChain() {
return curr().getToolChain();
}
@ -664,6 +724,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getToolCommand(org.eclipse.cdt.managedbuilder.core.ITool)
*/
@Override
public String getToolCommand(ITool tool) {
return curr().getToolCommand(tool);
}
@ -671,6 +732,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getToolFromInputExtension(java.lang.String)
*/
@Override
public ITool getToolFromInputExtension(String sourceExtension) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getToolFromInputExtension()"); //$NON-NLS-1$
@ -680,6 +742,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getToolFromOutputExtension(java.lang.String)
*/
@Override
public ITool getToolFromOutputExtension(String extension) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getToolFromOutputExtension()"); //$NON-NLS-1$
@ -689,6 +752,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getTools()
*/
@Override
public ITool[] getTools() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getTools()"); //$NON-NLS-1$
@ -698,6 +762,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getToolsBySuperClassId(java.lang.String)
*/
@Override
public ITool[] getToolsBySuperClassId(String id) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getToolsBySuperClassId()"); //$NON-NLS-1$
@ -707,6 +772,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getUserObjects(java.lang.String)
*/
@Override
public String[] getUserObjects(String extension) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getUserObjects()"); //$NON-NLS-1$
@ -716,6 +782,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#hasOverriddenBuildCommand()
*/
@Override
public boolean hasOverriddenBuildCommand() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i].hasOverriddenBuildCommand())
@ -726,6 +793,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isBuilderCompatible(org.eclipse.cdt.managedbuilder.core.IBuilder)
*/
@Override
public boolean isBuilderCompatible(IBuilder builder) {
for (int i=0; i<fCfgs.length; i++)
if (! fCfgs[i].isBuilderCompatible(builder))
@ -736,6 +804,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isDirty()
*/
@Override
public boolean isDirty() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i].isDirty())
@ -746,6 +815,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isExtensionElement()
*/
@Override
public boolean isExtensionElement() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.isExtensionElement()"); //$NON-NLS-1$
@ -755,6 +825,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isHeaderFile(java.lang.String)
*/
@Override
public boolean isHeaderFile(String ext) {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.isHeaderFile()"); //$NON-NLS-1$
@ -764,6 +835,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isManagedBuildOn()
*/
@Override
public boolean isManagedBuildOn() {
for (int i=0; i<fCfgs.length; i++)
if (! fCfgs[i].isManagedBuildOn())
@ -781,6 +853,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isSupported()
*/
@Override
public boolean isSupported() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i].isSupported())
@ -791,6 +864,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isSystemObject()
*/
@Override
public boolean isSystemObject() {
for (int i=0; i<fCfgs.length; i++)
if (! fCfgs[i].isSystemObject())
@ -801,6 +875,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#isTemporary()
*/
@Override
public boolean isTemporary() {
for (int i=0; i<fCfgs.length; i++)
if (! fCfgs[i].isTemporary())
@ -811,6 +886,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#needsFullRebuild()
*/
@Override
public boolean needsFullRebuild() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i].needsFullRebuild())
@ -821,6 +897,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#needsRebuild()
*/
@Override
public boolean needsRebuild() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i].needsRebuild())
@ -831,6 +908,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#removeResourceConfiguration(org.eclipse.cdt.managedbuilder.core.IResourceInfo)
*/
@Override
public void removeResourceConfiguration(IResourceInfo resConfig) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].removeResourceConfiguration(resConfig);
@ -839,6 +917,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#removeResourceInfo(org.eclipse.core.runtime.IPath)
*/
@Override
public void removeResourceInfo(IPath path) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].removeResourceInfo(path);
@ -847,6 +926,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setArtifactExtension(java.lang.String)
*/
@Override
public void setArtifactExtension(String extension) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setArtifactExtension(extension);
@ -855,6 +935,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setArtifactName(java.lang.String)
*/
@Override
public void setArtifactName(String name) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setArtifactName(name);
@ -863,6 +944,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setBuildArguments(java.lang.String)
*/
@Override
public void setBuildArguments(String makeArgs) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setBuildArguments(makeArgs);
@ -871,6 +953,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setBuildArtefactType(java.lang.String)
*/
@Override
public void setBuildArtefactType(String id) throws BuildException {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setBuildArtefactType(id);
@ -879,6 +962,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setBuildCommand(java.lang.String)
*/
@Override
public void setBuildCommand(String command) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setBuildCommand(command);
@ -887,6 +971,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setCleanCommand(java.lang.String)
*/
@Override
public void setCleanCommand(String command) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setCleanCommand(command);
@ -895,6 +980,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setDescription(java.lang.String)
*/
@Override
public void setDescription(String description) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setDescription(description);
@ -903,6 +989,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setDirty(boolean)
*/
@Override
public void setDirty(boolean isDirty) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setDirty(isDirty);
@ -911,6 +998,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setErrorParserIds(java.lang.String)
*/
@Override
public void setErrorParserIds(String ids) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setErrorParserIds(ids);
@ -919,6 +1007,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setErrorParserList(java.lang.String[])
*/
@Override
public void setErrorParserList(String[] ids) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setErrorParserList(ids);
@ -927,6 +1016,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setManagedBuildOn(boolean)
*/
@Override
public void setManagedBuildOn(boolean on) throws BuildException {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setManagedBuildOn(on);
@ -935,11 +1025,13 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setName(java.lang.String)
*/
@Override
public void setName(String name) {} // do nothing
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setOption(org.eclipse.cdt.managedbuilder.core.IHoldsOptions, org.eclipse.cdt.managedbuilder.core.IOption, boolean)
*/
@Override
public IOption setOption(IHoldsOptions parent, IOption option, boolean value)
throws BuildException {
IOption op = null;
@ -951,6 +1043,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setOption(org.eclipse.cdt.managedbuilder.core.IHoldsOptions, org.eclipse.cdt.managedbuilder.core.IOption, java.lang.String)
*/
@Override
public IOption setOption(IHoldsOptions parent, IOption option, String value)
throws BuildException {
IOption op = null;
@ -962,6 +1055,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setOption(org.eclipse.cdt.managedbuilder.core.IHoldsOptions, org.eclipse.cdt.managedbuilder.core.IOption, java.lang.String[])
*/
@Override
public IOption setOption(IHoldsOptions parent, IOption option,
String[] value) throws BuildException {
IOption op = null;
@ -973,6 +1067,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setPostannouncebuildStep(java.lang.String)
*/
@Override
public void setPostannouncebuildStep(String announceStep) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setPostannouncebuildStep(announceStep);
@ -981,6 +1076,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setPostbuildStep(java.lang.String)
*/
@Override
public void setPostbuildStep(String step) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setPostbuildStep(step);
@ -989,6 +1085,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setPreannouncebuildStep(java.lang.String)
*/
@Override
public void setPreannouncebuildStep(String announceStep) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setPreannouncebuildStep(announceStep);
@ -997,6 +1094,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setPrebuildStep(java.lang.String)
*/
@Override
public void setPrebuildStep(String step) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setPrebuildStep(step);
@ -1005,6 +1103,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setRebuildState(boolean)
*/
@Override
public void setRebuildState(boolean rebuild) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setRebuildState(rebuild);
@ -1013,6 +1112,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setSourceEntries(org.eclipse.cdt.core.settings.model.ICSourceEntry[])
*/
@Override
public void setSourceEntries(ICSourceEntry[] entries) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setSourceEntries(entries);
@ -1021,6 +1121,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#setToolCommand(org.eclipse.cdt.managedbuilder.core.ITool, java.lang.String)
*/
@Override
public void setToolCommand(ITool tool, String command) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].setToolCommand(tool, command);
@ -1029,6 +1130,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IConfiguration#supportsBuild(boolean)
*/
@Override
public boolean supportsBuild(boolean managed) {
for (int i=0; i<fCfgs.length; i++)
if (! fCfgs[i].supportsBuild(managed))
@ -1039,6 +1141,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getBaseId()
*/
@Override
public String getBaseId() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getBaseId()"); //$NON-NLS-1$
@ -1048,6 +1151,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getId()
*/
@Override
public String getId() {
return curr().getId() + "_etc"; //$NON-NLS-1$
}
@ -1055,6 +1159,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getManagedBuildRevision()
*/
@Override
public String getManagedBuildRevision() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getMngBuildRevision()"); //$NON-NLS-1$
@ -1064,6 +1169,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getName()
*/
@Override
public String getName() {
return "Multiple configurations"; //$NON-NLS-1$
}
@ -1071,6 +1177,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObject#getVersion()
*/
@Override
public Version getVersion() {
if (DEBUG)
System.out.println("Strange multi access: MultiConfiguration.getVersion()"); //$NON-NLS-1$
@ -1080,61 +1187,69 @@ public class MultiConfiguration extends MultiItemsHolder implements
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObject#setVersion(org.eclipse.core.runtime.PluginVersionIdentifier)
*/
@Override
public void setVersion(Version version) {} // do nothing
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuildObjectPropertiesContainer#getBuildProperties()
*/
@Override
public IBuildObjectProperties getBuildProperties() {
return curr().getBuildProperties();
}
@Override
public boolean getParallelDef() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration) {
if (!((Configuration)fCfgs[i]).getParallelDef())
for (IConfiguration cfg : fCfgs) {
if (cfg instanceof Configuration) {
if (!((Configuration)cfg).getParallelDef())
return false;
} else
return false;
}
return true; // all cfgs report true
}
public void setParallelDef(boolean def) {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration)
((Configuration)fCfgs[i]).setParallelDef(def);
@Override
public void setParallelDef(boolean parallel) {
for (IConfiguration cfg : fCfgs) {
if (cfg instanceof Configuration)
((Configuration)cfg).setParallelDef(parallel);
}
}
@Override
public int getParallelNumber() {
int res = -1;
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration) {
int x = ((Configuration)fCfgs[i]).getParallelNumber();
if (res == -1)
res = x;
else if (res != x)
int res = 0;
for (IConfiguration cfg : fCfgs) {
if (cfg instanceof Configuration) {
int num = ((Configuration)cfg).getParallelNumber();
Assert.isTrue(num != 0); // can't be 0, see IMakeCommonBuildInfo.getParallelizationNum()
if (res == 0)
res = num;
else if (res != num)
return 0; // values are different !
} else
return 0;
return (res == -1 ? 0: res); // all cfgs report true
}
return res; // all cfgs report same value
}
@Override
public void setParallelNumber(int num) {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration)
((Configuration)fCfgs[i]).setParallelNumber(num);
for (IConfiguration cfg : fCfgs) {
if (cfg instanceof Configuration)
((Configuration)cfg).setParallelNumber(num);
}
}
@Override
public boolean getInternalBuilderParallel() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration) {
if (!((Configuration)fCfgs[i]).getInternalBuilderParallel())
return false;
} else
return false;
return true; // all cfgs report true
return getParallelDef();
}
@Override
public boolean isInternalBuilderEnabled() {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration) {
@ -1145,6 +1260,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
return true; // all cfgs report true
}
@Override
public boolean canEnableInternalBuilder(boolean v) {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration) {
@ -1155,6 +1271,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
return true; // all cfgs report true
}
@Override
public void enableInternalBuilder(boolean v) {
for (int i=0; i<fCfgs.length; i++)
if (fCfgs[i] instanceof Configuration)
@ -1168,6 +1285,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
return fCfgs[curr];
}
@Override
public String getToolOutputPrefix() {
String s = fCfgs[0].calculateTargetTool().getOutputPrefix();
if (s == null || s.length() == 0)
@ -1178,11 +1296,13 @@ public class MultiConfiguration extends MultiItemsHolder implements
return s;
}
@Override
public void setOutputPrefixForPrimaryOutput(String pref) {
for (int i=0; i<fCfgs.length; i++)
fCfgs[i].calculateTargetTool().setOutputPrefixForPrimaryOutput(pref);
}
@Override
public IBuildProperty getBuildProperty(String id) {
IBuildProperty b = fCfgs[0].getBuildProperties().getProperty(id);
if (b == null )
@ -1196,6 +1316,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
}
// Performing conjunction of supported values for each cfg
@Override
public IBuildPropertyValue[] getSupportedValues(String id) {
IBuildPropertyValue[] a = fCfgs[0].getBuildProperties().getSupportedValues(id);
if (a == null || a.length == 0)
@ -1232,6 +1353,7 @@ public class MultiConfiguration extends MultiItemsHolder implements
}
}
@Override
public void setBuildProperty(String id, String val) {
try {
for (int i=0; i<fCfgs.length; i++)

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2004, 2010 QNX Software Systems and others.
* Copyright (c) 2004, 2011 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -12,6 +12,7 @@ package org.eclipse.cdt.newmake.core;
import java.util.Map;
import org.eclipse.cdt.managedbuilder.internal.core.Builder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
@ -42,10 +43,45 @@ public interface IMakeCommonBuildInfo {
void setStopOnError(boolean on) throws CoreException;
boolean supportsStopOnError(boolean on);
/**
* @return the current number of parallel jobs.
* The value of the number is encoded as follows:
* <pre>
* Status Returns
* No parallel 1
* Unlimited Integer.MAX (N/A for Internal Builder)
* Optimal -CPU# (negative number of processors)
* Specific >0 (positive number)
* </pre>
*/
int getParallelizationNum();
void setParallelizationNum(int num) throws CoreException;
/**
* Sets maximum number of parallel threads/jobs to be used by builder.
* Note that the number will be set only if the builder is in "parallel"
* mode.
*
* @param jobs - number of jobs according table {@link #getParallelizationNum()}.
* Any number <=0 is treated as setting "optimal" property,
* the value of the number itself is ignored.
*/
void setParallelizationNum(int jobs) throws CoreException;
/**
* @return {@code true} if builder supports parallel build,
* {@code false} otherwise.
*/
boolean supportsParallelBuild();
/**
* @return {@code true} if builder support for parallel build is enabled,
* {@code false} otherwise.
*/
boolean isParallelBuildOn();
/**
* Set parallel execution mode for the builder.
* @see Builder#setParallelBuildOn(boolean)
*
* @param on - the flag to enable or disable parallel mode.
*/
void setParallelBuildOn(boolean on) throws CoreException;
boolean isDefaultBuildCmd();

View file

@ -27,9 +27,10 @@ public class Messages extends NLS {
public static String BuilderSettingsTab_0;
public static String BuilderSettingsTab_1;
public static String BuilderSettingsTab_10;
public static String BuilderSettingsTab_11;
public static String BuilderSettingsTab_12;
public static String BuilderSettingsTab_13;
public static String BuilderSettingsTab_EnableParallelBuild;
public static String BuilderSettingsTab_UseOptimalJobs;
public static String BuilderSettingsTab_UseUnlimitedJobs;
public static String BuilderSettingsTab_UseParallelJobs;
public static String BuilderSettingsTab_14;
public static String BuilderSettingsTab_15;
public static String BuilderSettingsTab_16;

View file

@ -31,9 +31,10 @@ BuilderSettingsTab_7=&Generate Makefiles automatically
BuilderSettingsTab_8=&Expand Env. Variable Refs in Makefiles
BuilderSettingsTab_9=Build settings
BuilderSettingsTab_10=Stop on first build error
BuilderSettingsTab_11=Use parallel build
BuilderSettingsTab_12=Use optimal jobs number
BuilderSettingsTab_13=Use parallel jobs:
BuilderSettingsTab_EnableParallelBuild=Enable parallel build
BuilderSettingsTab_UseOptimalJobs=Use number of processors ({0})
BuilderSettingsTab_UseParallelJobs=Use parallel jobs:
BuilderSettingsTab_UseUnlimitedJobs=Use unlimited jobs
BuilderSettingsTab_14=Workbench Build Behavior
BuilderSettingsTab_15=Workbench build type:
BuilderSettingsTab_16=Make build target:

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2010 Intel Corporation and others.
* Copyright (c) 2007, 2011 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -11,6 +11,8 @@
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.ui.properties;
import java.text.MessageFormat;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICMultiConfigDescription;
import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder;
@ -18,12 +20,12 @@ import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.managedbuilder.core.IBuilder;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IMultiConfiguration;
import org.eclipse.cdt.managedbuilder.internal.buildmodel.BuildProcessManager;
import org.eclipse.cdt.managedbuilder.internal.core.Builder;
import org.eclipse.cdt.managedbuilder.internal.core.Configuration;
import org.eclipse.cdt.managedbuilder.internal.core.MultiConfiguration;
import org.eclipse.cdt.managedbuilder.internal.ui.Messages;
import org.eclipse.cdt.newmake.core.IMakeBuilderInfo;
import org.eclipse.cdt.newmake.core.IMakeCommonBuildInfo;
import org.eclipse.cdt.ui.newui.AbstractCPropertyTab;
import org.eclipse.cdt.ui.newui.ICPropertyProvider;
import org.eclipse.core.runtime.CoreException;
@ -51,6 +53,7 @@ import org.eclipse.swt.widgets.Widget;
* @noinstantiate This class is not intended to be instantiated by clients.
*/
public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
private static final int SPINNER_MAX_VALUE = 10000;
private static final int TRI_STATES_SIZE = 4;
// Widgets
@ -58,9 +61,10 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
private Button b_stopOnError; // 3
private Button b_parallel; // 3
private Button b_parallelOpt;
private Button b_parallelNum;
private Spinner parallelProcesses;
private Button b_parallelOptimal;
private Button b_parallelSpecific;
private Button b_parallelUnlimited;
private Spinner s_parallelNumber;
private Label title2;
private Button b_autoBuild; //3
@ -70,11 +74,11 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
private Button b_cmdClean; // 3
private Text t_cmdClean;
private IBuilder bldr;
private Builder bldr;
private IConfiguration icfg;
private boolean canModify = true;
protected final int cpuNumber = BuildProcessManager.checkCPUNumber();
protected final int cpuNumber = Runtime.getRuntime().availableProcessors();
@Override
public void createControls(Composite parent) {
@ -110,7 +114,7 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
gl.marginHeight = 0;
c2.setLayout(gl);
b_parallel = setupCheck(c2, Messages.BuilderSettingsTab_11, 1, GridData.BEGINNING);
b_parallel = setupCheck(c2, Messages.BuilderSettingsTab_EnableParallelBuild, 1, GridData.BEGINNING);
Composite c3 = new Composite(g3, SWT.NONE);
setupControl(c3, 1, GridData.FILL_BOTH);
@ -120,39 +124,60 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
gl.marginHeight = 0;
c3.setLayout(gl);
b_parallelOpt= new Button(c3, SWT.RADIO);
b_parallelOpt.setText(Messages.BuilderSettingsTab_12);
setupControl(b_parallelOpt, 2, GridData.BEGINNING);
((GridData)(b_parallelOpt.getLayoutData())).horizontalIndent = 15;
b_parallelOpt.addSelectionListener(new SelectionAdapter() {
b_parallelOptimal= new Button(c3, SWT.RADIO);
b_parallelOptimal.setText(MessageFormat.format(Messages.BuilderSettingsTab_UseOptimalJobs, 1));
setupControl(b_parallelOptimal, 2, GridData.BEGINNING);
((GridData)(b_parallelOptimal.getLayoutData())).horizontalIndent = 15;
b_parallelOptimal.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
setParallelDef(b_parallelOpt.getSelection());
updateButtons();
if (b_parallelOptimal.getSelection()) {
setParallelDef(true);
setParallelNumber(-1);
updateButtons();
}
}});
b_parallelNum= new Button(c3, SWT.RADIO);
b_parallelNum.setText(Messages.BuilderSettingsTab_13);
setupControl(b_parallelNum, 1, GridData.BEGINNING);
((GridData)(b_parallelNum.getLayoutData())).horizontalIndent = 15;
b_parallelNum.addSelectionListener(new SelectionAdapter() {
b_parallelSpecific= new Button(c3, SWT.RADIO);
b_parallelSpecific.setText(Messages.BuilderSettingsTab_UseParallelJobs);
setupControl(b_parallelSpecific, 1, GridData.BEGINNING);
((GridData)(b_parallelSpecific.getLayoutData())).horizontalIndent = 15;
b_parallelSpecific.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
setParallelDef(!b_parallelNum.getSelection());
updateButtons();
if (b_parallelSpecific.getSelection()) {
setParallelDef(true);
setParallelNumber(s_parallelNumber.getSelection());
updateButtons();
}
}});
parallelProcesses = new Spinner(c3, SWT.BORDER);
setupControl(parallelProcesses, 1, GridData.BEGINNING);
parallelProcesses.setValues(cpuNumber, 1, 10000, 0, 1, 10);
parallelProcesses.addSelectionListener(new SelectionAdapter () {
s_parallelNumber = new Spinner(c3, SWT.BORDER);
setupControl(s_parallelNumber, 1, GridData.BEGINNING);
s_parallelNumber.setValues(cpuNumber, 1, SPINNER_MAX_VALUE, 0, 1, 10);
s_parallelNumber.addSelectionListener(new SelectionAdapter () {
@Override
public void widgetSelected(SelectionEvent e) {
setParallelNumber(parallelProcesses.getSelection());
setParallelDef(true);
setParallelNumber(s_parallelNumber.getSelection());
updateButtons();
}
});
b_parallelUnlimited= new Button(c3, SWT.RADIO);
b_parallelUnlimited.setText(Messages.BuilderSettingsTab_UseUnlimitedJobs);
setupControl(b_parallelUnlimited, 2, GridData.BEGINNING);
((GridData)(b_parallelUnlimited.getLayoutData())).horizontalIndent = 15;
b_parallelUnlimited.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
if (b_parallelUnlimited.getSelection()) {
setParallelDef(true);
setParallelNumber(Integer.MAX_VALUE);
updateButtons();
}
}});
// Workbench behaviour group
AccessibleListener makeTargetLabelAccessibleListener = new AccessibleAdapter() {
@Override
@ -166,6 +191,7 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
b_autoBuild = setupCheck(g4, Messages.BuilderSettingsTab_17, 1, GridData.BEGINNING);
t_autoBuild = setupBlock(g4, b_autoBuild);
t_autoBuild.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
if (canModify)
setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_AUTO, t_autoBuild.getText());
@ -175,6 +201,7 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
b_cmdBuild = setupCheck(g4, Messages.BuilderSettingsTab_19, 1, GridData.BEGINNING);
t_cmdBuild = setupBlock(g4, b_cmdBuild);
t_cmdBuild.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
if (canModify)
setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_INCREMENTAL, t_cmdBuild.getText());
@ -183,6 +210,7 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
b_cmdClean = setupCheck(g4, Messages.BuilderSettingsTab_20, 1, GridData.BEGINNING);
t_cmdClean = setupBlock(g4, b_cmdClean);
t_cmdClean.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
if (canModify)
setBuildAttribute(IMakeBuilderInfo.BUILD_TARGET_CLEAN, t_cmdClean.getText());
@ -191,6 +219,7 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
}
/**
* Calculate enablements when multiple configurations selected on property page.
*
* @return:
* Mode 0:
@ -202,56 +231,55 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
* 0: isStopOnError
* 1: supportsStopOnError(true)
* 2: bld.supportsStopOnError(false)
* 3: cfg.getInternalBuilderParallel()
* 3: cfg.getParallelDef()
* Mode 2:
* 0: b.isAutoBuildEnable()
* 1: b.isIncrementalBuildEnabled()
* 2: b.isCleanBuildEnabled()
* 3: getParallelDef()
*/
static int[] calc3states(ICPropertyProvider p,
IConfiguration c,
int mode) {
if (p.isMultiCfg() &&
c instanceof ICMultiItemsHolder)
{
boolean p0 = (mode == 0);
boolean p1 = (mode == 1);
static int[] calc3states(ICPropertyProvider p, IConfiguration mcfg, int mode) {
if (p.isMultiCfg() && mcfg instanceof ICMultiItemsHolder) {
boolean m0 = (mode == 0);
boolean m1 = (mode == 1);
IConfiguration[] cfs = (IConfiguration[])((ICMultiItemsHolder)c).getItems();
IBuilder b = cfs[0].getBuilder();
int[] res = new int[TRI_STATES_SIZE];
boolean[] x = new boolean[TRI_STATES_SIZE];
x[0] = p0 ? b.isManagedBuildOn() :
(p1 ? b.isStopOnError() : b.isAutoBuildEnable());
x[1] = p0 ? b.isDefaultBuildCmd():
(p1 ? b.supportsStopOnError(true) : b.isIncrementalBuildEnabled() );
x[2] = p0 ? b.canKeepEnvironmentVariablesInBuildfile() :
(p1 ? b.supportsStopOnError(false) : b.isCleanBuildEnabled());
x[3] = p0 ? b.keepEnvironmentVariablesInBuildfile() :
( p1 ? ((Configuration)cfs[0]).getInternalBuilderParallel() : getParallelDef(c));
for (int i=1; i<cfs.length; i++) {
b = cfs[i].getBuilder();
if (x[0] != (p0 ? b.isManagedBuildOn() :
(p1 ? b.isStopOnError() : b.isAutoBuildEnable())))
IConfiguration[] cfgs = (IConfiguration[])((ICMultiItemsHolder)mcfg).getItems();
IBuilder bldr0 = cfgs[0].getBuilder();
int[] res = new int[TRI_STATES_SIZE];
boolean[] b = new boolean[TRI_STATES_SIZE];
b[0] = m0 ? bldr0.isManagedBuildOn() :
(m1 ? bldr0.isStopOnError() : bldr0.isAutoBuildEnable());
b[1] = m0 ? bldr0.isDefaultBuildCmd():
(m1 ? bldr0.supportsStopOnError(true) : bldr0.isIncrementalBuildEnabled() );
b[2] = m0 ? bldr0.canKeepEnvironmentVariablesInBuildfile() :
(m1 ? bldr0.supportsStopOnError(false) : bldr0.isCleanBuildEnabled());
b[3] = m0 ? bldr0.keepEnvironmentVariablesInBuildfile() :
(m1 ? ((Configuration)cfgs[0]).getParallelDef() : getParallelDef(mcfg));
for (int i=1; i<cfgs.length; i++) {
IBuilder bldr = cfgs[i].getBuilder();
if (b[0] != (m0 ? bldr.isManagedBuildOn() :
(m1 ? bldr.isStopOnError() : bldr.isAutoBuildEnable())))
res[0] = TRI_UNKNOWN;
if (x[1] != (p0 ? b.isDefaultBuildCmd() :
(p1 ? b.supportsStopOnError(true) : b.isIncrementalBuildEnabled())))
if (b[1] != (m0 ? bldr.isDefaultBuildCmd() :
(m1 ? bldr.supportsStopOnError(true) : bldr.isIncrementalBuildEnabled())))
res[1] = TRI_UNKNOWN;
if (x[2] != (p0 ? b.canKeepEnvironmentVariablesInBuildfile() :
(p1 ? b.supportsStopOnError(false) : b.isCleanBuildEnabled())))
if (b[2] != (m0 ? bldr.canKeepEnvironmentVariablesInBuildfile() :
(m1 ? bldr.supportsStopOnError(false) : bldr.isCleanBuildEnabled())))
res[2] = TRI_UNKNOWN;
if (x[3] != (p0 ? b.keepEnvironmentVariablesInBuildfile() :
(p1 ? ((Configuration)cfs[i]).getInternalBuilderParallel() : getParallelDef(c))))
if ((b[3] != (m0 ? bldr.keepEnvironmentVariablesInBuildfile() :
(m1 ? ((Configuration)cfgs[i]).getParallelDef() : getParallelDef(mcfg))))
|| ((IMultiConfiguration) mcfg).getParallelNumber() == 0) {
res[3] = TRI_UNKNOWN;
}
}
for (int i=0; i<TRI_STATES_SIZE; i++) {
if (res[i] != TRI_UNKNOWN)
res[i] = x[i] ? TRI_YES : TRI_NO;
res[i] = b[i] ? TRI_YES : TRI_NO;
}
return res;
} else
return null;
}
return null;
}
/**
@ -259,10 +287,11 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
*/
@Override
protected void updateButtons() {
bldr = icfg.getEditableBuilder();
bldr = (Builder) icfg.getEditableBuilder();
canModify = false;
int[] extStates = calc3states(page, icfg, 1);
// Stop on error
if (extStates != null) {
setTriSelection(b_stopOnError, extStates[0]);
b_stopOnError.setEnabled(
@ -274,41 +303,61 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
bldr.supportsStopOnError(true) &&
bldr.supportsStopOnError(false));
}
// parallel
if (extStates == null) // no extended states
setTriSelection(b_parallel, getInternalBuilderParallel());
else
setTriSelection(b_parallel, extStates[3]);
int n = getParallelNumber();
if (n < 0) n = -n;
parallelProcesses.setSelection(n);
// Parallel build
boolean isParallelSupported = bldr.supportsParallelBuild();
boolean isExternalBuilder = ! isInternalBuilderEnabled();
b_parallel.setVisible(bldr.supportsParallelBuild());
b_parallelOpt.setVisible(bldr.supportsParallelBuild());
b_parallelNum.setVisible(bldr.supportsParallelBuild());
parallelProcesses.setVisible(bldr.supportsParallelBuild());
b_parallel.setVisible(isParallelSupported);
b_parallelOptimal.setVisible(isParallelSupported);
b_parallelSpecific.setVisible(isParallelSupported);
b_parallelUnlimited.setVisible(isParallelSupported && isExternalBuilder);
s_parallelNumber.setVisible(isParallelSupported);
extStates = calc3states(page, icfg, 2);
if (extStates == null) {
setTriSelection(b_autoBuild, bldr.isAutoBuildEnable());
setTriSelection(b_cmdBuild, bldr.isIncrementalBuildEnabled());
setTriSelection(b_cmdClean, bldr.isCleanBuildEnabled());
b_parallelOpt.setSelection(getParallelDef(icfg));
b_parallelNum.setSelection(!getParallelDef(icfg));
} else {
setTriSelection(b_autoBuild, extStates[0]);
setTriSelection(b_cmdBuild, extStates[1]);
setTriSelection(b_cmdClean, extStates[2]);
if (extStates[3] == TRI_UNKNOWN) {
b_parallelOpt.setSelection(false);
b_parallelNum.setSelection(false);
if (isParallelSupported) {
if (extStates == null) {
setTriSelection(b_parallel, getParallelDef());
} else {
b_parallelOpt.setSelection(getParallelDef(icfg));
b_parallelNum.setSelection(!getParallelDef(icfg));
setTriSelection(b_parallel, extStates[3]);
}
boolean isParallelSelected = b_parallel.getSelection();
int optimalParallelNumber = bldr.getOptimalParallelJobNum();
b_parallelOptimal.setText(MessageFormat.format(Messages.BuilderSettingsTab_UseOptimalJobs, optimalParallelNumber));
b_parallelOptimal.setEnabled(isParallelSelected);
b_parallelSpecific.setEnabled(isParallelSelected);
b_parallelUnlimited.setEnabled(isParallelSelected && isExternalBuilder);
extStates = calc3states(page, icfg, 2);
if (extStates == null) {
setTriSelection(b_autoBuild, bldr.isAutoBuildEnable());
setTriSelection(b_cmdBuild, bldr.isIncrementalBuildEnabled());
setTriSelection(b_cmdClean, bldr.isCleanBuildEnabled());
} else { // multiple configurations selected
setTriSelection(b_autoBuild, extStates[0]);
setTriSelection(b_cmdBuild, extStates[1]);
setTriSelection(b_cmdClean, extStates[2]);
}
if ((extStates == null || extStates[3] != TRI_UNKNOWN) && isParallelSelected) {
// single configuration or matching multiple configurations here
int parallelNumber = getParallelNumber();
boolean isOptimal = parallelNumber <= 0;
boolean isUnlimited = parallelNumber == Integer.MAX_VALUE;
b_parallelOptimal.setSelection(isOptimal);
b_parallelSpecific.setSelection(!isOptimal && !isUnlimited);
b_parallelUnlimited.setSelection(isUnlimited);
s_parallelNumber.setEnabled(b_parallelSpecific.getEnabled() && b_parallelSpecific.getSelection());
s_parallelNumber.setSelection(s_parallelNumber.isEnabled() ? parallelNumber : optimalParallelNumber);
} else {
b_parallelOptimal.setSelection(true);
b_parallelSpecific.setSelection(false);
b_parallelUnlimited.setSelection(false);
s_parallelNumber.setEnabled(false);
s_parallelNumber.setSelection(optimalParallelNumber);
}
}
// Build commands
if (page.isMultiCfg()) {
MultiConfiguration mc = (MultiConfiguration)icfg;
t_autoBuild.setText(mc.getBuildAttribute(IBuilder.BUILD_TARGET_AUTO, EMPTY_STR));
@ -321,12 +370,6 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
}
boolean external = ! isInternalBuilderEnabled();
boolean parallel = b_parallel.getSelection();
b_parallelNum.setEnabled(parallel);
b_parallelOpt.setEnabled(parallel);
parallelProcesses.setEnabled(parallel & b_parallelNum.getSelection());
title2.setVisible(external);
t_autoBuild.setVisible(external);
((Control)t_autoBuild.getData()).setVisible(external);
@ -496,6 +539,14 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
return false;
}
private boolean getParallelDef() {
if (icfg instanceof Configuration)
return ((Configuration)icfg).getParallelDef();
if (icfg instanceof IMultiConfiguration)
return ((IMultiConfiguration)icfg).getParallelDef();
return false;
}
private void setParallelDef(boolean def) {
if (icfg instanceof Configuration)
((Configuration)icfg).setParallelDef(def);
@ -503,6 +554,9 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
((IMultiConfiguration)icfg).setParallelDef(def);
}
/**
* @see IMakeCommonBuildInfo#getParallelizationNum() for interpretation of the number.
*/
private int getParallelNumber() {
if (icfg instanceof Configuration)
return ((Configuration)icfg).getParallelNumber();
@ -517,14 +571,6 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
((IMultiConfiguration)icfg).setParallelNumber(num);
}
private boolean getInternalBuilderParallel() {
if (icfg instanceof Configuration)
return ((Configuration)icfg).getInternalBuilderParallel();
if (icfg instanceof IMultiConfiguration)
return ((IMultiConfiguration)icfg).getInternalBuilderParallel();
return false;
}
private boolean isInternalBuilderEnabled() {
if (icfg instanceof Configuration)
return ((Configuration)icfg).isInternalBuilderEnabled();

View file

@ -171,7 +171,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
canEnableInternalBuilder(true) &&
canEnableInternalBuilder(false));
t_buildCmd.setText(getMC());
t_buildCmd.setText(getMakeCommand());
if (page.isMultiCfg()) {
group_dir.setVisible(false);
@ -293,11 +293,14 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
/**
* @return make command
*/
private String getMC() {
String makeCommand = bldr.getCommand();
String makeArgs = bldr.getArguments();
if (makeArgs != null) { makeCommand += " " + makeArgs; } //$NON-NLS-1$
return makeCommand;
private String getMakeCommand() {
String makeCommand = icfg.getBuildCommand();
String makeArgs = icfg.getBuildArguments();
if (!makeCommand.isEmpty() && makeArgs != null) {
return makeCommand + " " + makeArgs; //$NON-NLS-1$
}
return EMPTY_STR;
}
/**
* Performs common settings for all controls