diff --git a/build/org.eclipse.cdt.managedbuilder.core/META-INF/MANIFEST.MF b/build/org.eclipse.cdt.managedbuilder.core/META-INF/MANIFEST.MF index 953da0f2dd9..542c4b327cf 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/META-INF/MANIFEST.MF +++ b/build/org.eclipse.cdt.managedbuilder.core/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName 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-Vendor: %providerName Bundle-Localization: plugin diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java index c17582647f7..50992a5e876 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Builder.java @@ -1085,18 +1085,20 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider @Override public String getArguments() { String args = getArgumentsAttribute(); - String stopOnErrCmd = getStopOnErrCmd(isStopOnError()); - int parallelNum = getParallelizationNum(); - String parallelCmd = isParallelBuildOn() ? getParallelizationCmd(parallelNum) : EMPTY_STRING; + if (isDefaultBuildArgsOnly()) { + String stopOnErrCmd = getStopOnErrCmd(isStopOnError()); + int parallelNum = getParallelizationNum(); + String parallelCmd = isParallelBuildOn() ? getParallelizationCmd(parallelNum) : EMPTY_STRING; - String reversedStopOnErrCmd = getStopOnErrCmd(!isStopOnError()); - String reversedParallelBuildCmd = !isParallelBuildOn() ? getParallelizationCmd(parallelNum) : EMPTY_STRING; + String reversedStopOnErrCmd = getStopOnErrCmd(!isStopOnError()); + String reversedParallelBuildCmd = !isParallelBuildOn() ? getParallelizationCmd(parallelNum) : EMPTY_STRING; - args = removeCmd(args, reversedStopOnErrCmd); - args = removeCmd(args, reversedParallelBuildCmd); + args = removeCmd(args, reversedStopOnErrCmd); + args = removeCmd(args, reversedParallelBuildCmd); - args = addCmd(args, stopOnErrCmd); - args = addCmd(args, parallelCmd); + args = addCmd(args, stopOnErrCmd); + args = addCmd(args, parallelCmd); + } return args != null ? args.trim() : null; } @@ -1877,6 +1879,16 @@ public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider && superClass != null); } + @Override + public boolean isDefaultBuildCmdOnly() { + return isExtensionBuilder || (command == null && superClass != null); + } + + @Override + public boolean isDefaultBuildArgsOnly() { + return isExtensionBuilder || (args == null && superClass != null); + } + @Override public boolean isStopOnError() { 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() { if (autoBuildTarget == null) { if (superClass != null) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/newmake/core/IMakeCommonBuildInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/newmake/core/IMakeCommonBuildInfo.java index 5637fa7618e..9587d907cdd 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/newmake/core/IMakeCommonBuildInfo.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/newmake/core/IMakeCommonBuildInfo.java @@ -83,12 +83,41 @@ public interface IMakeCommonBuildInfo { */ void setParallelBuildOn(boolean on) throws CoreException; + /** + * @deprecated Use the {@link #isDefaultBuildCmdOnly()} and {@link #isDefaultBuildArgsOnly()} + * @return + */ + @Deprecated 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; 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...) */ diff --git a/build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF b/build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF index df49c1b88e8..96dc2d99f68 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF +++ b/build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName 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-Vendor: %providerName Bundle-Localization: plugin diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.java index 3a388ebe293..aca82d55614 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.java @@ -23,6 +23,9 @@ public class Messages extends NLS { public static String ArtifactTab_1; public static String ArtifactTab_2; 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_1; public static String BuilderSettingsTab_10; @@ -47,6 +50,7 @@ public class Messages extends NLS { public static String BuilderSettingsTab_7; public static String BuilderSettingsTab_8; public static String BuilderSettingsTab_9; + public static String BuilderSettingsTab_Configure_Build_Arguments_In_the_Behavior_tab; public static String BuildOptionSettingsUI_0; public static String BuildPropertyPage_error_Unknown_tree_element; public static String BuildStepsTab_0; diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.properties b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.properties index 2ef411bac4d..d10945519a4 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.properties +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/Messages.properties @@ -14,6 +14,9 @@ # 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_1=Builder &type: BuilderSettingsTab_2=External builder @@ -38,6 +41,7 @@ BuilderSettingsTab_19=Build (Incremental build) BuilderSettingsTab_20=Clean BuilderSettingsTab_21=Build location BuilderSettingsTab_22=Build &directory: +BuilderSettingsTab_Configure_Build_Arguments_In_the_Behavior_tab=Configure build arguments in the Behavior tab. BuildStepsTab_0=Command: BuildStepsTab_1=Description: BuildStepsTab_2=Pre-build steps diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildBehaviourTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildBehaviourTab.java index af690ef55ef..2151ada3d06 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildBehaviourTab.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildBehaviourTab.java @@ -58,8 +58,12 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { private static final int SPINNER_MAX_VALUE = 10000; 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 + private Button r_useStandardBuildArguments; + private Button r_useCustomBuildArguments; + private Text t_buildArguments; + //3 private Button b_stopOnError; // 3 private Button b_parallel; // 3 @@ -69,6 +73,8 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { private Button b_parallelUnlimited; private Spinner s_parallelNumber; + private Group grp_buildSettings; + private Label title2; private Button b_autoBuild; //3 private Text t_autoBuild; @@ -89,37 +95,35 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { usercomp.setLayout(new GridLayout(1, false)); // 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); gl.verticalSpacing = 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); GridData gd = (GridData) c1.getLayoutData(); gd.verticalSpan = 2; gd.verticalIndent = 0; c1.setLayoutData(gd); gl = new GridLayout(1, false); - gl.verticalSpacing = 0; - gl.marginWidth = 0; - gl.marginHeight = 0; c1.setLayout(gl); 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); gl = new GridLayout(1, false); - gl.verticalSpacing = 0; - gl.marginWidth = 0; - gl.marginHeight = 0; c2.setLayout(gl); 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); gl = new GridLayout(2, false); 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 AccessibleListener makeTargetLabelAccessibleListener = new AccessibleAdapter() { @Override @@ -240,19 +262,28 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { * @return: * Mode 0: * 0: bld.isManagedBuildOn() - * 1: bld.isDefaultBuildCmd() + * 1: N/A * 2: bld.canKeepEnvironmentVariablesInBuildfile() * 3: bld.keepEnvironmentVariablesInBuildfile() + * 4: bld.isDefaultBuildCmdOnly() + * 5: bld.isDefaultBuildArgsOnly() + * 6: !bld.isDefaultBuildArgsOnly() * Mode 1: * 0: isStopOnError * 1: supportsStopOnError(true) * 2: bld.supportsStopOnError(false) * 3: N/A + * 4: N/A + * 5: bld.isDefaultBuildArgsOnly() + * 6: !bld.isDefaultBuildArgsOnly() * Mode 2: * 0: b.isAutoBuildEnable() * 1: b.isIncrementalBuildEnabled() * 2: b.isCleanBuildEnabled() * 3: N/A + * 4: N/A + * 5: N/A + * 6: N/A */ static int[] calc3states(ICPropertyProvider p, IConfiguration mcfg, int mode) { if (p.isMultiCfg() && mcfg instanceof ICMultiItemsHolder) { @@ -264,17 +295,18 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { 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[1] = m0 ? true : (m1 ? bldr0.supportsStopOnError(true) : bldr0.isIncrementalBuildEnabled()); b[2] = m0 ? bldr0.canKeepEnvironmentVariablesInBuildfile() : (m1 ? bldr0.supportsStopOnError(false) : bldr0.isCleanBuildEnabled()); 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++) { IBuilder bldr = cfgs[i].getBuilder(); if (b[0] != (m0 ? bldr.isManagedBuildOn() : (m1 ? bldr.isStopOnError() : bldr.isAutoBuildEnable()))) res[0] = TRI_UNKNOWN; - if (b[1] != (m0 ? bldr.isDefaultBuildCmd() - : (m1 ? bldr.supportsStopOnError(true) : bldr.isIncrementalBuildEnabled()))) + if (b[1] != (m0 ? true : (m1 ? bldr.supportsStopOnError(true) : bldr.isIncrementalBuildEnabled()))) res[1] = TRI_UNKNOWN; if (b[2] != (m0 ? bldr.canKeepEnvironmentVariablesInBuildfile() : (m1 ? bldr.supportsStopOnError(false) : bldr.isCleanBuildEnabled()))) @@ -282,6 +314,15 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { if (b[3] != (m0 ? bldr.keepEnvironmentVariablesInBuildfile() : false)) { 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++) { if (res[i] != TRI_UNKNOWN) @@ -301,17 +342,45 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { bldr = (Builder) icfg.getEditableBuilder(); canModify = false; int[] extStates = calc3states(page, icfg, 1); + boolean external = !isInternalBuilderEnabled(); - // Stop on error - if (extStates != null) { - setTriSelection(b_stopOnError, extStates[0]); - b_stopOnError.setEnabled(extStates[1] == TRI_YES && extStates[2] == TRI_YES); + // use standard build args + if (extStates == null) { // no extended states available + setTriSelection(r_useStandardBuildArguments, bldr.isDefaultBuildArgsOnly()); + setTriSelection(r_useCustomBuildArguments, !bldr.isDefaultBuildArgsOnly()); } else { - setTriSelection(b_stopOnError, bldr.isStopOnError()); - b_stopOnError.setEnabled(bldr.supportsStopOnError(true) && bldr.supportsStopOnError(false)); + int standardTri = extStates[5]; + 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 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)); } - boolean external = !isInternalBuilderEnabled(); title2.setVisible(external); t_autoBuild.setVisible(external); ((Control) t_autoBuild.getData()).setVisible(external); @@ -354,7 +422,7 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { canModify = true; } - private void updateParallelBlock() { + private void updateParallelBlock(boolean defaultBuildArguments) { // note: for multi-config selection bldr is from Active cfg boolean isParallelSupported = bldr.supportsParallelBuild(); @@ -399,30 +467,42 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { s_parallelNumber.setVisible(isParallelSupported); if (isParallelSupported) { - setTriSelection(b_parallel, triSelection); - boolean isParallelSelected = b_parallel.getSelection(); + if (defaultBuildArguments) { + b_parallel.setEnabled(true); + s_parallelNumber.setEnabled(true); - b_parallelOptimal - .setText(MessageFormat.format(Messages.BuilderSettingsTab_UseOptimalJobs, optimalParallelNumber)); - b_parallelOptimal.setEnabled(isParallelSelected); - b_parallelSpecific.setEnabled(isParallelSelected); - b_parallelUnlimited.setEnabled(isParallelSelected); + setTriSelection(b_parallel, triSelection); + boolean isParallelSelected = b_parallel.getSelection(); - if (isParallelSelected) { - boolean isOptimal = parallelizationNumInternal <= 0; - boolean isUnlimited = parallelizationNumInternal == Builder.UNLIMITED_JOBS; + b_parallelOptimal.setText( + MessageFormat.format(Messages.BuilderSettingsTab_UseOptimalJobs, optimalParallelNumber)); + b_parallelOptimal.setEnabled(isParallelSelected); + b_parallelSpecific.setEnabled(isParallelSelected); + b_parallelUnlimited.setEnabled(isParallelSelected); - 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); + if (isParallelSelected) { + boolean isOptimal = parallelizationNumInternal <= 0; + boolean isUnlimited = parallelizationNumInternal == Builder.UNLIMITED_JOBS; + + 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 { - b_parallelOptimal.setSelection(true); - b_parallelSpecific.setSelection(false); - b_parallelUnlimited.setSelection(false); + b_parallel.setEnabled(false); + b_parallelOptimal.setEnabled(false); + b_parallelSpecific.setEnabled(false); + b_parallelUnlimited.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) { try { - b2.setUseDefaultBuildCmd(b1.isDefaultBuildCmd()); - if (!b1.isDefaultBuildCmd()) { + b2.setUseDefaultBuildCmdOnly(b1.isDefaultBuildCmdOnly()); + b2.setUseDefaultBuildArgsOnly(b1.isDefaultBuildArgsOnly()); + if (!b1.isDefaultBuildCmdOnly()) { b2.setCommand(b1.getCommand()); - b2.setArguments(b1.getArguments()); } else { b2.setCommand(null); + } + if (!b1.isDefaultBuildArgsOnly()) { + b2.setArguments(b1.getArguments()); + } else { b2.setArguments(null); } b2.setStopOnError(b1.isStopOnError()); @@ -582,6 +666,18 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { 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) { if (icfg instanceof Configuration) ((Configuration) icfg).setParallelDef(def); @@ -626,7 +722,11 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { IConfiguration[] cfs = (IConfiguration[]) ((IMultiConfiguration) icfg).getItems(); for (int i = 0; i < cfs.length; i++) { 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); } else if (b == b_cmdBuild) { bld.setIncrementalBuildEnable(val); @@ -639,7 +739,11 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { } } } 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); } else if (b == b_cmdBuild) { bldr.setIncrementalBuildEnable(val); @@ -655,4 +759,14 @@ public class BuildBehaviourTab extends AbstractCBuildPropertyTab { ManagedBuilderUIPlugin.log(e); } } + + /** + * Return an empty string is parameter is null + */ + private String nonNull(String maybeNullString) { + if (maybeNullString == null) { + return EMPTY_STR; + } + return maybeNullString; + } } diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuilderSettingsTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuilderSettingsTab.java index 569c6c6d026..f246a2c7820 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuilderSettingsTab.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuilderSettingsTab.java @@ -48,7 +48,7 @@ import org.eclipse.swt.widgets.Widget; public class BuilderSettingsTab extends AbstractCBuildPropertyTab { // Widgets //1 - private Button b_useDefault; + private Button b_useDefaultBuildCommand; private Combo c_builderType; private Text t_buildCmd; //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); - t_buildCmd = setupBlock(g1, b_useDefault); + t_buildCmd = setupBlock(g1, b_useDefaultBuildCommand); t_buildCmd.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { if (!canModify) return; - String fullCommand = t_buildCmd.getText().trim(); - String buildCommand = parseMakeCommand(fullCommand); - String buildArgs = fullCommand.substring(buildCommand.length()).trim(); - if (!buildCommand.equals(bldr.getCommand()) || !buildArgs.equals(bldr.getArguments())) { + String buildCommand = t_buildCmd.getText().trim(); + if (!buildCommand.equals(bldr.getCommand())) { 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); ((GridLayout) (g2.getLayout())).makeColumnsEqualWidth = true; @@ -151,7 +151,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab { b_genMakefileAuto.setEnabled(icfg.supportsBuild(true)); if (extStates == null) { // no extended states available BuildBehaviourTab.setTriSelection(b_genMakefileAuto, bldr.isManagedBuildOn()); - BuildBehaviourTab.setTriSelection(b_useDefault, bldr.isDefaultBuildCmd()); + BuildBehaviourTab.setTriSelection(b_useDefaultBuildCommand, bldr.isDefaultBuildCmdOnly()); // b_expandVars.setGrayed(false); if (!bldr.canKeepEnvironmentVariablesInBuildfile()) b_expandVars.setEnabled(false); @@ -161,7 +161,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab { } } else { BuildBehaviourTab.setTriSelection(b_genMakefileAuto, extStates[0]); - BuildBehaviourTab.setTriSelection(b_useDefault, extStates[1]); + BuildBehaviourTab.setTriSelection(b_useDefaultBuildCommand, extStates[4]); if (extStates[2] != BuildBehaviourTab.TRI_YES) b_expandVars.setEnabled(false); else { @@ -172,7 +172,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab { c_builderType.select(isInternalBuilderEnabled() ? 1 : 0); c_builderType.setEnabled(canEnableInternalBuilder(true) && canEnableInternalBuilder(false)); - t_buildCmd.setText(getMakeCommand()); + t_buildCmd.setText(nonNull(icfg.getBuildCommand())); if (page.isMultiCfg()) { group_dir.setVisible(false); @@ -187,16 +187,16 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab { } boolean external = (c_builderType.getSelectionIndex() == 0); - b_useDefault.setEnabled(external); + b_useDefaultBuildCommand.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)); if (b_expandVars.getEnabled()) b_expandVars.setEnabled(external && b_genMakefileAuto.getSelection()); if (external) { // just set relatet text widget state, - checkPressed(b_useDefault, false); // do not update + checkPressed(b_useDefaultBuildCommand, false); // do not update } canModify = true; } @@ -278,7 +278,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab { if (b.getData() instanceof Text) { Text t = (Text) b.getData(); - if (b == b_useDefault) { + if (b == b_useDefaultBuildCommand) { val = !val; } t.setEnabled(val); @@ -292,7 +292,7 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab { if (!needUpdate) return; - if (b == b_useDefault) { + if (b == b_useDefaultBuildCommand) { setUseDefaultBuildCmd(!val); } else if (b == b_genMakefileAuto) { 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() { - String makeCommand = icfg.getBuildCommand(); - String makeArgs = icfg.getBuildArguments(); - - if (!makeCommand.isEmpty() && makeArgs != null) { - return makeCommand + " " + makeArgs; //$NON-NLS-1$ + private String nonNull(String maybeNullString) { + if (maybeNullString == null) { + return EMPTY_STR; } - return EMPTY_STR; + return maybeNullString; } /** @@ -332,20 +329,6 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab { 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 @Override public boolean canBeVisible() { @@ -400,10 +383,10 @@ public class BuilderSettingsTab extends AbstractCBuildPropertyTab { for (int i = 0; i < cfs.length; i++) { IBuilder b = cfs[i].getEditableBuilder(); if (b != null) - b.setUseDefaultBuildCmd(val); + b.setUseDefaultBuildCmdOnly(val); } } else { - icfg.getEditableBuilder().setUseDefaultBuildCmd(val); + icfg.getEditableBuilder().setUseDefaultBuildCmdOnly(val); } } catch (CoreException 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) { if (icfg instanceof IMultiConfiguration) { IConfiguration[] cfs = (IConfiguration[]) ((IMultiConfiguration) icfg).getItems(); diff --git a/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF index 84741452b5f..90c70d3113f 100644 --- a/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF +++ b/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName 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-Vendor: %providerName Bundle-Localization: plugin diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractCPropertyTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractCPropertyTab.java index 380a73cf3de..47fb72c7b4f 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractCPropertyTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/AbstractCPropertyTab.java @@ -378,6 +378,16 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab { 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) { Button b = new Button(c, SWT.CHECK); b.setText(name); @@ -392,6 +402,23 @@ public abstract class AbstractCPropertyTab implements ICPropertyTab { 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 * by methods "setupCheck()" or "setupTri()"