1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 06:02:11 +02:00

Bug 568397: Add separate text boxes for separate build command and args

Change-Id: I078a1db23a69dcbde503b1dd5e496705ecccc956
This commit is contained in:
Jonah Graham 2021-04-05 14:59:31 -04:00
parent e6d5c634b9
commit b6b66b5457
10 changed files with 297 additions and 114 deletions

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2 Bundle-ManifestVersion: 2
Bundle-Name: %pluginName Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.managedbuilder.core; singleton:=true Bundle-SymbolicName: org.eclipse.cdt.managedbuilder.core; singleton:=true
Bundle-Version: 9.2.100.qualifier Bundle-Version: 9.3.0.qualifier
Bundle-Activator: org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin Bundle-Activator: org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin
Bundle-Vendor: %providerName Bundle-Vendor: %providerName
Bundle-Localization: plugin Bundle-Localization: plugin

View file

@ -1085,18 +1085,20 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
@Override @Override
public String getArguments() { public String getArguments() {
String args = getArgumentsAttribute(); String args = getArgumentsAttribute();
String stopOnErrCmd = getStopOnErrCmd(isStopOnError()); if (isDefaultBuildArgsOnly()) {
int parallelNum = getParallelizationNum(); String stopOnErrCmd = getStopOnErrCmd(isStopOnError());
String parallelCmd = isParallelBuildOn() ? getParallelizationCmd(parallelNum) : EMPTY_STRING; int parallelNum = getParallelizationNum();
String parallelCmd = isParallelBuildOn() ? getParallelizationCmd(parallelNum) : EMPTY_STRING;
String reversedStopOnErrCmd = getStopOnErrCmd(!isStopOnError()); String reversedStopOnErrCmd = getStopOnErrCmd(!isStopOnError());
String reversedParallelBuildCmd = !isParallelBuildOn() ? getParallelizationCmd(parallelNum) : EMPTY_STRING; String reversedParallelBuildCmd = !isParallelBuildOn() ? getParallelizationCmd(parallelNum) : EMPTY_STRING;
args = removeCmd(args, reversedStopOnErrCmd); args = removeCmd(args, reversedStopOnErrCmd);
args = removeCmd(args, reversedParallelBuildCmd); args = removeCmd(args, reversedParallelBuildCmd);
args = addCmd(args, stopOnErrCmd); args = addCmd(args, stopOnErrCmd);
args = addCmd(args, parallelCmd); args = addCmd(args, parallelCmd);
}
return args != null ? args.trim() : null; return args != null ? args.trim() : null;
} }
@ -1877,6 +1879,16 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
&& superClass != null); && superClass != null);
} }
@Override
public boolean isDefaultBuildCmdOnly() {
return isExtensionBuilder || (command == null && superClass != null);
}
@Override
public boolean isDefaultBuildArgsOnly() {
return isExtensionBuilder || (args == null && superClass != null);
}
@Override @Override
public boolean isStopOnError() { public boolean isStopOnError() {
if (stopOnErr == null) { if (stopOnErr == null) {
@ -1936,6 +1948,28 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider
} }
} }
@Override
public void setUseDefaultBuildCmdOnly(boolean on) throws CoreException {
if (!isExtensionBuilder && superClass != null) {
if (on) {
command = null;
} else {
command = getCommand();
}
}
}
@Override
public void setUseDefaultBuildArgsOnly(boolean on) throws CoreException {
if (!isExtensionBuilder && superClass != null) {
if (on) {
args = null;
} else {
args = EMPTY_STRING;
}
}
}
public String getAutoBuildTargetAttribute() { public String getAutoBuildTargetAttribute() {
if (autoBuildTarget == null) { if (autoBuildTarget == null) {
if (superClass != null) if (superClass != null)

View file

@ -83,12 +83,41 @@ public interface IMakeCommonBuildInfo {
*/ */
void setParallelBuildOn(boolean on) throws CoreException; void setParallelBuildOn(boolean on) throws CoreException;
/**
* @deprecated Use the {@link #isDefaultBuildCmdOnly()} and {@link #isDefaultBuildArgsOnly()}
* @return
*/
@Deprecated
boolean isDefaultBuildCmd(); boolean isDefaultBuildCmd();
/**
* @since 9.3
*/
boolean isDefaultBuildCmdOnly();
/**
* @since 9.3
*/
boolean isDefaultBuildArgsOnly();
/**
* @deprecated Use the {@link #setUseDefaultBuildCmdOnly(boolean)} and {@link #setUseDefaultBuildArgsOnly(boolean)}
*/
@Deprecated
void setUseDefaultBuildCmd(boolean on) throws CoreException; void setUseDefaultBuildCmd(boolean on) throws CoreException;
IPath getBuildCommand(); IPath getBuildCommand();
/**
* @since 9.3
*/
void setUseDefaultBuildCmdOnly(boolean on) throws CoreException;
/**
* @since 9.3
*/
void setUseDefaultBuildArgsOnly(boolean on) throws CoreException;
/** /**
* @deprecated - use setBuildString(BUILD_COMMAND...) * @deprecated - use setBuildString(BUILD_COMMAND...)
*/ */

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2 Bundle-ManifestVersion: 2
Bundle-Name: %pluginName Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.managedbuilder.ui; singleton:=true Bundle-SymbolicName: org.eclipse.cdt.managedbuilder.ui; singleton:=true
Bundle-Version: 9.3.0.qualifier Bundle-Version: 9.3.100.qualifier
Bundle-Activator: org.eclipse.cdt.managedbuilder.ui.properties.ManagedBuilderUIPlugin Bundle-Activator: org.eclipse.cdt.managedbuilder.ui.properties.ManagedBuilderUIPlugin
Bundle-Vendor: %providerName Bundle-Vendor: %providerName
Bundle-Localization: plugin Bundle-Localization: plugin

View file

@ -23,6 +23,9 @@ public class Messages extends NLS {
public static String ArtifactTab_1; public static String ArtifactTab_1;
public static String ArtifactTab_2; public static String ArtifactTab_2;
public static String ArtifactTab_3; public static String ArtifactTab_3;
public static String BuildBehaviourTab_Build_arguments;
public static String BuildBehaviourTab_Use_custom_build_arguments;
public static String BuildBehaviourTab_Use_standard_build_arguments;
public static String BuilderSettingsTab_0; public static String BuilderSettingsTab_0;
public static String BuilderSettingsTab_1; public static String BuilderSettingsTab_1;
public static String BuilderSettingsTab_10; public static String BuilderSettingsTab_10;
@ -47,6 +50,7 @@ public class Messages extends NLS {
public static String BuilderSettingsTab_7; public static String BuilderSettingsTab_7;
public static String BuilderSettingsTab_8; public static String BuilderSettingsTab_8;
public static String BuilderSettingsTab_9; public static String BuilderSettingsTab_9;
public static String BuilderSettingsTab_Configure_Build_Arguments_In_the_Behavior_tab;
public static String BuildOptionSettingsUI_0; public static String BuildOptionSettingsUI_0;
public static String BuildPropertyPage_error_Unknown_tree_element; public static String BuildPropertyPage_error_Unknown_tree_element;
public static String BuildStepsTab_0; public static String BuildStepsTab_0;

View file

@ -14,6 +14,9 @@
# Roberto Oliveira - Removed an unused message # Roberto Oliveira - Removed an unused message
############################################################################### ###############################################################################
BuildBehaviourTab_Use_custom_build_arguments=Use custom build arguments
BuildBehaviourTab_Use_standard_build_arguments=Use standard build arguments
BuildBehaviourTab_Build_arguments=Build arguments:\u0020
BuilderSettingsTab_0=Builder BuilderSettingsTab_0=Builder
BuilderSettingsTab_1=Builder &type: BuilderSettingsTab_1=Builder &type:
BuilderSettingsTab_2=External builder BuilderSettingsTab_2=External builder
@ -38,6 +41,7 @@ BuilderSettingsTab_19=Build (Incremental build)
BuilderSettingsTab_20=Clean BuilderSettingsTab_20=Clean
BuilderSettingsTab_21=Build location BuilderSettingsTab_21=Build location
BuilderSettingsTab_22=Build &directory: BuilderSettingsTab_22=Build &directory:
BuilderSettingsTab_Configure_Build_Arguments_In_the_Behavior_tab=Configure build arguments in the Behavior tab.
BuildStepsTab_0=Command: BuildStepsTab_0=Command:
BuildStepsTab_1=Description: BuildStepsTab_1=Description:
BuildStepsTab_2=Pre-build steps BuildStepsTab_2=Pre-build steps

View file

@ -58,8 +58,12 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
private static final int SPINNER_MAX_VALUE = 10000; private static final int SPINNER_MAX_VALUE = 10000;
private static final int SPINNER_MIN_VALUE = 2; private static final int SPINNER_MIN_VALUE = 2;
private static final int TRI_STATES_SIZE = 4; private static final int TRI_STATES_SIZE = 7;
// Widgets // Widgets
private Button r_useStandardBuildArguments;
private Button r_useCustomBuildArguments;
private Text t_buildArguments;
//3 //3
private Button b_stopOnError; // 3 private Button b_stopOnError; // 3
private Button b_parallel; // 3 private Button b_parallel; // 3
@ -69,6 +73,8 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
private Button b_parallelUnlimited; private Button b_parallelUnlimited;
private Spinner s_parallelNumber; private Spinner s_parallelNumber;
private Group grp_buildSettings;
private Label title2; private Label title2;
private Button b_autoBuild; //3 private Button b_autoBuild; //3
private Text t_autoBuild; private Text t_autoBuild;
@ -89,37 +95,35 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
usercomp.setLayout(new GridLayout(1, false)); usercomp.setLayout(new GridLayout(1, false));
// Build setting group // Build setting group
Group g3 = setupGroup(usercomp, Messages.BuilderSettingsTab_9, 2, GridData.FILL_HORIZONTAL); grp_buildSettings = setupGroup(usercomp, Messages.BuilderSettingsTab_9, 2, GridData.FILL_HORIZONTAL);
GridLayout gl = new GridLayout(2, true); GridLayout gl = new GridLayout(2, true);
gl.verticalSpacing = 0; gl.verticalSpacing = 0;
gl.marginWidth = 0; gl.marginWidth = 0;
g3.setLayout(gl); grp_buildSettings.setLayout(gl);
Composite c1 = new Composite(g3, SWT.NONE); r_useStandardBuildArguments = setupRadio(grp_buildSettings,
Messages.BuildBehaviourTab_Use_standard_build_arguments, 3, GridData.BEGINNING);
Composite c1 = new Composite(grp_buildSettings, SWT.NONE);
setupControl(c1, 1, GridData.FILL_BOTH); setupControl(c1, 1, GridData.FILL_BOTH);
GridData gd = (GridData) c1.getLayoutData(); GridData gd = (GridData) c1.getLayoutData();
gd.verticalSpan = 2; gd.verticalSpan = 2;
gd.verticalIndent = 0; gd.verticalIndent = 0;
c1.setLayoutData(gd); c1.setLayoutData(gd);
gl = new GridLayout(1, false); gl = new GridLayout(1, false);
gl.verticalSpacing = 0;
gl.marginWidth = 0;
gl.marginHeight = 0;
c1.setLayout(gl); c1.setLayout(gl);
b_stopOnError = setupCheck(c1, Messages.BuilderSettingsTab_10, 1, GridData.BEGINNING); b_stopOnError = setupCheck(c1, Messages.BuilderSettingsTab_10, 1, GridData.BEGINNING);
((GridData) (b_stopOnError.getLayoutData())).horizontalIndent = 15;
Composite c2 = new Composite(g3, SWT.NONE); Composite c2 = new Composite(grp_buildSettings, SWT.NONE);
setupControl(c2, 1, GridData.FILL_BOTH); setupControl(c2, 1, GridData.FILL_BOTH);
gl = new GridLayout(1, false); gl = new GridLayout(1, false);
gl.verticalSpacing = 0;
gl.marginWidth = 0;
gl.marginHeight = 0;
c2.setLayout(gl); c2.setLayout(gl);
b_parallel = setupCheck(c2, Messages.BuilderSettingsTab_EnableParallelBuild, 1, GridData.BEGINNING); b_parallel = setupCheck(c2, Messages.BuilderSettingsTab_EnableParallelBuild, 1, GridData.BEGINNING);
Composite c3 = new Composite(g3, SWT.NONE); Composite c3 = new Composite(grp_buildSettings, SWT.NONE);
setupControl(c3, 1, GridData.FILL_BOTH); setupControl(c3, 1, GridData.FILL_BOTH);
gl = new GridLayout(2, false); gl = new GridLayout(2, false);
gl.verticalSpacing = 0; gl.verticalSpacing = 0;
@ -191,6 +195,24 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
} }
}); });
r_useCustomBuildArguments = setupRadio(grp_buildSettings, Messages.BuildBehaviourTab_Use_custom_build_arguments,
3, GridData.BEGINNING);
Composite c0 = setupComposite(grp_buildSettings, 3, GridData.FILL_BOTH);
setupControl(c0, 2, GridData.FILL_BOTH);
setupLabel(c0, Messages.BuildBehaviourTab_Build_arguments, 1, GridData.BEGINNING);
t_buildArguments = setupBlock(c0, r_useCustomBuildArguments);
t_buildArguments.addModifyListener(new ModifyListener() {
@Override
public void modifyText(ModifyEvent e) {
if (!canModify)
return;
String buildArgs = t_buildArguments.getText().trim();
if (!buildArgs.equals(bldr.getArguments())) {
setArguments(buildArgs);
}
}
});
// Workbench behaviour group // Workbench behaviour group
AccessibleListener makeTargetLabelAccessibleListener = new AccessibleAdapter() { AccessibleListener makeTargetLabelAccessibleListener = new AccessibleAdapter() {
@Override @Override
@ -240,19 +262,28 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
* @return: * @return:
* Mode 0: * Mode 0:
* 0: bld.isManagedBuildOn() * 0: bld.isManagedBuildOn()
* 1: bld.isDefaultBuildCmd() * 1: N/A
* 2: bld.canKeepEnvironmentVariablesInBuildfile() * 2: bld.canKeepEnvironmentVariablesInBuildfile()
* 3: bld.keepEnvironmentVariablesInBuildfile() * 3: bld.keepEnvironmentVariablesInBuildfile()
* 4: bld.isDefaultBuildCmdOnly()
* 5: bld.isDefaultBuildArgsOnly()
* 6: !bld.isDefaultBuildArgsOnly()
* Mode 1: * Mode 1:
* 0: isStopOnError * 0: isStopOnError
* 1: supportsStopOnError(true) * 1: supportsStopOnError(true)
* 2: bld.supportsStopOnError(false) * 2: bld.supportsStopOnError(false)
* 3: N/A * 3: N/A
* 4: N/A
* 5: bld.isDefaultBuildArgsOnly()
* 6: !bld.isDefaultBuildArgsOnly()
* Mode 2: * Mode 2:
* 0: b.isAutoBuildEnable() * 0: b.isAutoBuildEnable()
* 1: b.isIncrementalBuildEnabled() * 1: b.isIncrementalBuildEnabled()
* 2: b.isCleanBuildEnabled() * 2: b.isCleanBuildEnabled()
* 3: N/A * 3: N/A
* 4: N/A
* 5: N/A
* 6: N/A
*/ */
static int[] calc3states(ICPropertyProvider p, IConfiguration mcfg, int mode) { static int[] calc3states(ICPropertyProvider p, IConfiguration mcfg, int mode) {
if (p.isMultiCfg() && mcfg instanceof ICMultiItemsHolder) { if (p.isMultiCfg() && mcfg instanceof ICMultiItemsHolder) {
@ -264,17 +295,18 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
int[] res = new int[TRI_STATES_SIZE]; int[] res = new int[TRI_STATES_SIZE];
boolean[] b = new boolean[TRI_STATES_SIZE]; boolean[] b = new boolean[TRI_STATES_SIZE];
b[0] = m0 ? bldr0.isManagedBuildOn() : (m1 ? bldr0.isStopOnError() : bldr0.isAutoBuildEnable()); b[0] = m0 ? bldr0.isManagedBuildOn() : (m1 ? bldr0.isStopOnError() : bldr0.isAutoBuildEnable());
b[1] = m0 ? bldr0.isDefaultBuildCmd() b[1] = m0 ? true : (m1 ? bldr0.supportsStopOnError(true) : bldr0.isIncrementalBuildEnabled());
: (m1 ? bldr0.supportsStopOnError(true) : bldr0.isIncrementalBuildEnabled());
b[2] = m0 ? bldr0.canKeepEnvironmentVariablesInBuildfile() b[2] = m0 ? bldr0.canKeepEnvironmentVariablesInBuildfile()
: (m1 ? bldr0.supportsStopOnError(false) : bldr0.isCleanBuildEnabled()); : (m1 ? bldr0.supportsStopOnError(false) : bldr0.isCleanBuildEnabled());
b[3] = m0 ? bldr0.keepEnvironmentVariablesInBuildfile() : false; b[3] = m0 ? bldr0.keepEnvironmentVariablesInBuildfile() : false;
b[4] = m0 ? bldr0.isDefaultBuildCmdOnly() : false;
b[5] = (m0 || m1) ? bldr0.isDefaultBuildArgsOnly() : false;
b[6] = (m0 || m1) ? !bldr0.isDefaultBuildArgsOnly() : false;
for (int i = 1; i < cfgs.length; i++) { for (int i = 1; i < cfgs.length; i++) {
IBuilder bldr = cfgs[i].getBuilder(); IBuilder bldr = cfgs[i].getBuilder();
if (b[0] != (m0 ? bldr.isManagedBuildOn() : (m1 ? bldr.isStopOnError() : bldr.isAutoBuildEnable()))) if (b[0] != (m0 ? bldr.isManagedBuildOn() : (m1 ? bldr.isStopOnError() : bldr.isAutoBuildEnable())))
res[0] = TRI_UNKNOWN; res[0] = TRI_UNKNOWN;
if (b[1] != (m0 ? bldr.isDefaultBuildCmd() if (b[1] != (m0 ? true : (m1 ? bldr.supportsStopOnError(true) : bldr.isIncrementalBuildEnabled())))
: (m1 ? bldr.supportsStopOnError(true) : bldr.isIncrementalBuildEnabled())))
res[1] = TRI_UNKNOWN; res[1] = TRI_UNKNOWN;
if (b[2] != (m0 ? bldr.canKeepEnvironmentVariablesInBuildfile() if (b[2] != (m0 ? bldr.canKeepEnvironmentVariablesInBuildfile()
: (m1 ? bldr.supportsStopOnError(false) : bldr.isCleanBuildEnabled()))) : (m1 ? bldr.supportsStopOnError(false) : bldr.isCleanBuildEnabled())))
@ -282,6 +314,15 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
if (b[3] != (m0 ? bldr.keepEnvironmentVariablesInBuildfile() : false)) { if (b[3] != (m0 ? bldr.keepEnvironmentVariablesInBuildfile() : false)) {
res[3] = TRI_UNKNOWN; res[3] = TRI_UNKNOWN;
} }
if (b[4] != (m0 ? bldr.isDefaultBuildCmdOnly() : false)) {
res[4] = TRI_UNKNOWN;
}
if (b[5] != ((m0 || m1) ? bldr.isDefaultBuildArgsOnly() : false)) {
res[5] = TRI_UNKNOWN;
}
if (b[6] != ((m0 || m1) ? !bldr.isDefaultBuildArgsOnly() : false)) {
res[6] = TRI_UNKNOWN;
}
} }
for (int i = 0; i < TRI_STATES_SIZE; i++) { for (int i = 0; i < TRI_STATES_SIZE; i++) {
if (res[i] != TRI_UNKNOWN) if (res[i] != TRI_UNKNOWN)
@ -301,17 +342,45 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
bldr = (Builder) icfg.getEditableBuilder(); bldr = (Builder) icfg.getEditableBuilder();
canModify = false; canModify = false;
int[] extStates = calc3states(page, icfg, 1); int[] extStates = calc3states(page, icfg, 1);
boolean external = !isInternalBuilderEnabled();
// Stop on error // use standard build args
if (extStates != null) { if (extStates == null) { // no extended states available
setTriSelection(b_stopOnError, extStates[0]); setTriSelection(r_useStandardBuildArguments, bldr.isDefaultBuildArgsOnly());
b_stopOnError.setEnabled(extStates[1] == TRI_YES && extStates[2] == TRI_YES); setTriSelection(r_useCustomBuildArguments, !bldr.isDefaultBuildArgsOnly());
} else { } else {
setTriSelection(b_stopOnError, bldr.isStopOnError()); int standardTri = extStates[5];
b_stopOnError.setEnabled(bldr.supportsStopOnError(true) && bldr.supportsStopOnError(false)); int customTri = extStates[6];
if (standardTri == TRI_UNKNOWN || customTri == TRI_UNKNOWN) {
setTriSelection(r_useStandardBuildArguments, TRI_UNKNOWN);
setTriSelection(r_useCustomBuildArguments, TRI_UNKNOWN);
} else {
setTriSelection(r_useStandardBuildArguments, standardTri);
setTriSelection(r_useCustomBuildArguments, customTri);
}
}
t_buildArguments.setText(nonNull(icfg.getBuildArguments()));
r_useStandardBuildArguments.setEnabled(external);
r_useCustomBuildArguments.setEnabled(external);
if (external) {
checkPressed(r_useCustomBuildArguments, false); // do not update
} }
updateParallelBlock(); // Stop on error
boolean defaultBuildArguments = bldr.isDefaultBuildArgsOnly();
if (defaultBuildArguments) {
if (extStates != null) {
setTriSelection(b_stopOnError, extStates[0]);
b_stopOnError.setEnabled(extStates[1] == TRI_YES && extStates[2] == TRI_YES);
} else {
setTriSelection(b_stopOnError, bldr.isStopOnError());
b_stopOnError.setEnabled(bldr.supportsStopOnError(true) && bldr.supportsStopOnError(false));
}
} else {
b_stopOnError.setEnabled(defaultBuildArguments);
}
updateParallelBlock(defaultBuildArguments);
// Build commands // Build commands
extStates = calc3states(page, icfg, 2); extStates = calc3states(page, icfg, 2);
@ -337,7 +406,6 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
t_cmdClean.setText(bldr.getBuildAttribute(IBuilder.BUILD_TARGET_CLEAN, EMPTY_STR)); t_cmdClean.setText(bldr.getBuildAttribute(IBuilder.BUILD_TARGET_CLEAN, EMPTY_STR));
} }
boolean external = !isInternalBuilderEnabled();
title2.setVisible(external); title2.setVisible(external);
t_autoBuild.setVisible(external); t_autoBuild.setVisible(external);
((Control) t_autoBuild.getData()).setVisible(external); ((Control) t_autoBuild.getData()).setVisible(external);
@ -354,7 +422,7 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
canModify = true; canModify = true;
} }
private void updateParallelBlock() { private void updateParallelBlock(boolean defaultBuildArguments) {
// note: for multi-config selection bldr is from Active cfg // note: for multi-config selection bldr is from Active cfg
boolean isParallelSupported = bldr.supportsParallelBuild(); boolean isParallelSupported = bldr.supportsParallelBuild();
@ -399,30 +467,42 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
s_parallelNumber.setVisible(isParallelSupported); s_parallelNumber.setVisible(isParallelSupported);
if (isParallelSupported) { if (isParallelSupported) {
setTriSelection(b_parallel, triSelection); if (defaultBuildArguments) {
boolean isParallelSelected = b_parallel.getSelection(); b_parallel.setEnabled(true);
s_parallelNumber.setEnabled(true);
b_parallelOptimal setTriSelection(b_parallel, triSelection);
.setText(MessageFormat.format(Messages.BuilderSettingsTab_UseOptimalJobs, optimalParallelNumber)); boolean isParallelSelected = b_parallel.getSelection();
b_parallelOptimal.setEnabled(isParallelSelected);
b_parallelSpecific.setEnabled(isParallelSelected);
b_parallelUnlimited.setEnabled(isParallelSelected);
if (isParallelSelected) { b_parallelOptimal.setText(
boolean isOptimal = parallelizationNumInternal <= 0; MessageFormat.format(Messages.BuilderSettingsTab_UseOptimalJobs, optimalParallelNumber));
boolean isUnlimited = parallelizationNumInternal == Builder.UNLIMITED_JOBS; b_parallelOptimal.setEnabled(isParallelSelected);
b_parallelSpecific.setEnabled(isParallelSelected);
b_parallelUnlimited.setEnabled(isParallelSelected);
b_parallelOptimal.setSelection(isOptimal); if (isParallelSelected) {
b_parallelSpecific.setSelection(!isOptimal && !isUnlimited); boolean isOptimal = parallelizationNumInternal <= 0;
b_parallelUnlimited.setSelection(isUnlimited); boolean isUnlimited = parallelizationNumInternal == Builder.UNLIMITED_JOBS;
s_parallelNumber.setEnabled(b_parallelSpecific.getEnabled() && b_parallelSpecific.getSelection());
s_parallelNumber.setSelection(s_parallelNumber.isEnabled() ? parallelNumber : optimalParallelNumber); 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);
}
} else { } else {
b_parallelOptimal.setSelection(true); b_parallel.setEnabled(false);
b_parallelSpecific.setSelection(false); b_parallelOptimal.setEnabled(false);
b_parallelUnlimited.setSelection(false); b_parallelSpecific.setEnabled(false);
b_parallelUnlimited.setEnabled(false);
s_parallelNumber.setEnabled(false); s_parallelNumber.setEnabled(false);
s_parallelNumber.setSelection(optimalParallelNumber);
} }
} }
} }
@ -527,12 +607,16 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
static void copyBuilders(IBuilder b1, IBuilder b2) { static void copyBuilders(IBuilder b1, IBuilder b2) {
try { try {
b2.setUseDefaultBuildCmd(b1.isDefaultBuildCmd()); b2.setUseDefaultBuildCmdOnly(b1.isDefaultBuildCmdOnly());
if (!b1.isDefaultBuildCmd()) { b2.setUseDefaultBuildArgsOnly(b1.isDefaultBuildArgsOnly());
if (!b1.isDefaultBuildCmdOnly()) {
b2.setCommand(b1.getCommand()); b2.setCommand(b1.getCommand());
b2.setArguments(b1.getArguments());
} else { } else {
b2.setCommand(null); b2.setCommand(null);
}
if (!b1.isDefaultBuildArgsOnly()) {
b2.setArguments(b1.getArguments());
} else {
b2.setArguments(null); b2.setArguments(null);
} }
b2.setStopOnError(b1.isStopOnError()); b2.setStopOnError(b1.isStopOnError());
@ -582,6 +666,18 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
updateData(getResDesc()); updateData(getResDesc());
} }
private void setArguments(String makeArgs) {
if (icfg instanceof IMultiConfiguration) {
IConfiguration[] cfs = (IConfiguration[]) ((IMultiConfiguration) icfg).getItems();
for (int i = 0; i < cfs.length; i++) {
IBuilder b = cfs[i].getEditableBuilder();
b.setArguments(makeArgs);
}
} else {
icfg.getEditableBuilder().setArguments(makeArgs);
}
}
private void setParallelDef(boolean def) { private void setParallelDef(boolean def) {
if (icfg instanceof Configuration) if (icfg instanceof Configuration)
((Configuration) icfg).setParallelDef(def); ((Configuration) icfg).setParallelDef(def);
@ -626,7 +722,11 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
IConfiguration[] cfs = (IConfiguration[]) ((IMultiConfiguration) icfg).getItems(); IConfiguration[] cfs = (IConfiguration[]) ((IMultiConfiguration) icfg).getItems();
for (int i = 0; i < cfs.length; i++) { for (int i = 0; i < cfs.length; i++) {
IBuilder bld = cfs[i].getEditableBuilder(); IBuilder bld = cfs[i].getEditableBuilder();
if (b == b_autoBuild) { if (b == r_useStandardBuildArguments) {
bld.setUseDefaultBuildArgsOnly(val);
} else if (b == r_useCustomBuildArguments) {
bld.setUseDefaultBuildArgsOnly(!val);
} else if (b == b_autoBuild) {
bld.setAutoBuildEnable(val); bld.setAutoBuildEnable(val);
} else if (b == b_cmdBuild) { } else if (b == b_cmdBuild) {
bld.setIncrementalBuildEnable(val); bld.setIncrementalBuildEnable(val);
@ -639,7 +739,11 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
} }
} }
} else { } else {
if (b == b_autoBuild) { if (b == r_useStandardBuildArguments) {
bldr.setUseDefaultBuildArgsOnly(val);
} else if (b == r_useCustomBuildArguments) {
bldr.setUseDefaultBuildArgsOnly(!val);
} else if (b == b_autoBuild) {
bldr.setAutoBuildEnable(val); bldr.setAutoBuildEnable(val);
} else if (b == b_cmdBuild) { } else if (b == b_cmdBuild) {
bldr.setIncrementalBuildEnable(val); bldr.setIncrementalBuildEnable(val);
@ -655,4 +759,14 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab {
ManagedBuilderUIPlugin.log(e); ManagedBuilderUIPlugin.log(e);
} }
} }
/**
* Return an empty string is parameter is null
*/
private String nonNull(String maybeNullString) {
if (maybeNullString == null) {
return EMPTY_STR;
}
return maybeNullString;
}
} }

View file

@ -48,7 +48,7 @@ import org.eclipse.swt.widgets.Widget;
public class BuilderSettingsTab extends AbstractCBuildPropertyTab { public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
// Widgets // Widgets
//1 //1
private Button b_useDefault; private Button b_useDefaultBuildCommand;
private Combo c_builderType; private Combo c_builderType;
private Text t_buildCmd; private Text t_buildCmd;
//2 //2
@ -85,25 +85,25 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
} }
}); });
b_useDefault = setupCheck(g1, Messages.BuilderSettingsTab_4, 3, GridData.BEGINNING); b_useDefaultBuildCommand = setupCheck(g1, Messages.BuilderSettingsTab_4, 3, GridData.BEGINNING);
setupLabel(g1, Messages.BuilderSettingsTab_5, 1, GridData.BEGINNING); setupLabel(g1, Messages.BuilderSettingsTab_5, 1, GridData.BEGINNING);
t_buildCmd = setupBlock(g1, b_useDefault); t_buildCmd = setupBlock(g1, b_useDefaultBuildCommand);
t_buildCmd.addModifyListener(new ModifyListener() { t_buildCmd.addModifyListener(new ModifyListener() {
@Override @Override
public void modifyText(ModifyEvent e) { public void modifyText(ModifyEvent e) {
if (!canModify) if (!canModify)
return; return;
String fullCommand = t_buildCmd.getText().trim(); String buildCommand = t_buildCmd.getText().trim();
String buildCommand = parseMakeCommand(fullCommand); if (!buildCommand.equals(bldr.getCommand())) {
String buildArgs = fullCommand.substring(buildCommand.length()).trim();
if (!buildCommand.equals(bldr.getCommand()) || !buildArgs.equals(bldr.getArguments())) {
setCommand(buildCommand); setCommand(buildCommand);
setArguments(buildArgs);
} }
} }
}); });
setupLabel(g1, Messages.BuilderSettingsTab_Configure_Build_Arguments_In_the_Behavior_tab, 2,
GridData.BEGINNING);
Group g2 = setupGroup(usercomp, Messages.BuilderSettingsTab_6, 2, GridData.FILL_HORIZONTAL); Group g2 = setupGroup(usercomp, Messages.BuilderSettingsTab_6, 2, GridData.FILL_HORIZONTAL);
((GridLayout) (g2.getLayout())).makeColumnsEqualWidth = true; ((GridLayout) (g2.getLayout())).makeColumnsEqualWidth = true;
@ -151,7 +151,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
b_genMakefileAuto.setEnabled(icfg.supportsBuild(true)); b_genMakefileAuto.setEnabled(icfg.supportsBuild(true));
if (extStates == null) { // no extended states available if (extStates == null) { // no extended states available
BuildBehaviourTab.setTriSelection(b_genMakefileAuto, bldr.isManagedBuildOn()); BuildBehaviourTab.setTriSelection(b_genMakefileAuto, bldr.isManagedBuildOn());
BuildBehaviourTab.setTriSelection(b_useDefault, bldr.isDefaultBuildCmd()); BuildBehaviourTab.setTriSelection(b_useDefaultBuildCommand, bldr.isDefaultBuildCmdOnly());
// b_expandVars.setGrayed(false); // b_expandVars.setGrayed(false);
if (!bldr.canKeepEnvironmentVariablesInBuildfile()) if (!bldr.canKeepEnvironmentVariablesInBuildfile())
b_expandVars.setEnabled(false); b_expandVars.setEnabled(false);
@ -161,7 +161,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
} }
} else { } else {
BuildBehaviourTab.setTriSelection(b_genMakefileAuto, extStates[0]); BuildBehaviourTab.setTriSelection(b_genMakefileAuto, extStates[0]);
BuildBehaviourTab.setTriSelection(b_useDefault, extStates[1]); BuildBehaviourTab.setTriSelection(b_useDefaultBuildCommand, extStates[4]);
if (extStates[2] != BuildBehaviourTab.TRI_YES) if (extStates[2] != BuildBehaviourTab.TRI_YES)
b_expandVars.setEnabled(false); b_expandVars.setEnabled(false);
else { else {
@ -172,7 +172,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
c_builderType.select(isInternalBuilderEnabled() ? 1 : 0); c_builderType.select(isInternalBuilderEnabled() ? 1 : 0);
c_builderType.setEnabled(canEnableInternalBuilder(true) && canEnableInternalBuilder(false)); c_builderType.setEnabled(canEnableInternalBuilder(true) && canEnableInternalBuilder(false));
t_buildCmd.setText(getMakeCommand()); t_buildCmd.setText(nonNull(icfg.getBuildCommand()));
if (page.isMultiCfg()) { if (page.isMultiCfg()) {
group_dir.setVisible(false); group_dir.setVisible(false);
@ -187,16 +187,16 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
} }
boolean external = (c_builderType.getSelectionIndex() == 0); boolean external = (c_builderType.getSelectionIndex() == 0);
b_useDefault.setEnabled(external); b_useDefaultBuildCommand.setEnabled(external);
t_buildCmd.setEnabled(external); t_buildCmd.setEnabled(external);
((Control) t_buildCmd.getData()).setEnabled(external & !b_useDefault.getSelection()); ((Control) t_buildCmd.getData()).setEnabled(external & !b_useDefaultBuildCommand.getSelection());
b_genMakefileAuto.setEnabled(external && icfg.supportsBuild(true)); b_genMakefileAuto.setEnabled(external && icfg.supportsBuild(true));
if (b_expandVars.getEnabled()) if (b_expandVars.getEnabled())
b_expandVars.setEnabled(external && b_genMakefileAuto.getSelection()); b_expandVars.setEnabled(external && b_genMakefileAuto.getSelection());
if (external) { // just set relatet text widget state, if (external) { // just set relatet text widget state,
checkPressed(b_useDefault, false); // do not update checkPressed(b_useDefaultBuildCommand, false); // do not update
} }
canModify = true; canModify = true;
} }
@ -278,7 +278,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
if (b.getData() instanceof Text) { if (b.getData() instanceof Text) {
Text t = (Text) b.getData(); Text t = (Text) b.getData();
if (b == b_useDefault) { if (b == b_useDefaultBuildCommand) {
val = !val; val = !val;
} }
t.setEnabled(val); t.setEnabled(val);
@ -292,7 +292,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
if (!needUpdate) if (!needUpdate)
return; return;
if (b == b_useDefault) { if (b == b_useDefaultBuildCommand) {
setUseDefaultBuildCmd(!val); setUseDefaultBuildCmd(!val);
} else if (b == b_genMakefileAuto) { } else if (b == b_genMakefileAuto) {
setManagedBuild(val); setManagedBuild(val);
@ -303,16 +303,13 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
} }
/** /**
* @return make command * Return an empty string is parameter is null
*/ */
private String getMakeCommand() { private String nonNull(String maybeNullString) {
String makeCommand = icfg.getBuildCommand(); if (maybeNullString == null) {
String makeArgs = icfg.getBuildArguments(); return EMPTY_STR;
if (!makeCommand.isEmpty() && makeArgs != null) {
return makeCommand + " " + makeArgs; //$NON-NLS-1$
} }
return EMPTY_STR; return maybeNullString;
} }
/** /**
@ -332,20 +329,6 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
BuildBehaviourTab.apply(src, dst, page.isMultiCfg()); BuildBehaviourTab.apply(src, dst, page.isMultiCfg());
} }
/* (non-Javadoc)
*
* @param string
* @return
*/
private String parseMakeCommand(String rawCommand) {
String[] result = rawCommand.split("\\s"); //$NON-NLS-1$
if (result != null && result.length > 0)
return result[0];
else
return rawCommand;
}
// This page can be displayed for project only // This page can be displayed for project only
@Override @Override
public boolean canBeVisible() { public boolean canBeVisible() {
@ -400,10 +383,10 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
for (int i = 0; i < cfs.length; i++) { for (int i = 0; i < cfs.length; i++) {
IBuilder b = cfs[i].getEditableBuilder(); IBuilder b = cfs[i].getEditableBuilder();
if (b != null) if (b != null)
b.setUseDefaultBuildCmd(val); b.setUseDefaultBuildCmdOnly(val);
} }
} else { } else {
icfg.getEditableBuilder().setUseDefaultBuildCmd(val); icfg.getEditableBuilder().setUseDefaultBuildCmdOnly(val);
} }
} catch (CoreException e) { } catch (CoreException e) {
ManagedBuilderUIPlugin.log(e); ManagedBuilderUIPlugin.log(e);
@ -435,18 +418,6 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab {
} }
} }
private void setArguments(String makeArgs) {
if (icfg instanceof IMultiConfiguration) {
IConfiguration[] cfs = (IConfiguration[]) ((IMultiConfiguration) icfg).getItems();
for (int i = 0; i < cfs.length; i++) {
IBuilder b = cfs[i].getEditableBuilder();
b.setArguments(makeArgs);
}
} else {
icfg.getEditableBuilder().setArguments(makeArgs);
}
}
private void setBuildPath(String path) { private void setBuildPath(String path) {
if (icfg instanceof IMultiConfiguration) { if (icfg instanceof IMultiConfiguration) {
IConfiguration[] cfs = (IConfiguration[]) ((IMultiConfiguration) icfg).getItems(); IConfiguration[] cfs = (IConfiguration[]) ((IMultiConfiguration) icfg).getItems();

View file

@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2 Bundle-ManifestVersion: 2
Bundle-Name: %pluginName Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.ui; singleton:=true Bundle-SymbolicName: org.eclipse.cdt.ui; singleton:=true
Bundle-Version: 7.1.100.qualifier Bundle-Version: 7.2.0.qualifier
Bundle-Activator: org.eclipse.cdt.ui.CUIPlugin Bundle-Activator: org.eclipse.cdt.ui.CUIPlugin
Bundle-Vendor: %providerName Bundle-Vendor: %providerName
Bundle-Localization: plugin Bundle-Localization: plugin

View file

@ -378,6 +378,16 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
return g; return g;
} }
/**
* @since 7.2
*/
protected Composite setupComposite(Composite c, int cols, int mode) {
Composite c1 = new Composite(c, SWT.NONE);
c1.setLayout(new GridLayout(cols, false));
setupControl(c1, 1, mode);
return c1;
}
protected Button setupCheck(Composite c, String name, int span, int mode) { protected Button setupCheck(Composite c, String name, int span, int mode) {
Button b = new Button(c, SWT.CHECK); Button b = new Button(c, SWT.CHECK);
b.setText(name); b.setText(name);
@ -392,6 +402,23 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab {
return b; return b;
} }
/**
* @since 7.2
*/
protected Button setupRadio(Composite c, String name, int span, int mode) {
Button b = new Button(c, SWT.RADIO);
b.setText(name);
setupControl(b, span, mode);
b.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
((Button) event.widget).setGrayed(false);
checkPressed(event);
}
});
return b;
}
/** /**
* Selection handler for checkbox created * Selection handler for checkbox created
* by methods "setupCheck()" or "setupTri()" * by methods "setupCheck()" or "setupTri()"