diff --git a/build/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd b/build/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd index ad30370a0d1..d9b7428496f 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd +++ b/build/org.eclipse.cdt.managedbuilder.core/schema/ManagedBuildTools.exsd @@ -214,6 +214,13 @@ Additional special types exist to flag options of special relevance to the build + + + + An optional value, used only with options of type Boolean, that specifies the actual command that will be passed to the tool on the command line when the value of the Boolean option is False. + + + diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java index 7fb38de4693..12a6cf5dbe4 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOption.java @@ -27,6 +27,7 @@ public interface IOption extends IBuildObject { // Schema attribute names for option elements public static final String CATEGORY = "category"; //$NON-NLS-1$ public static final String COMMAND = "command"; //$NON-NLS-1$ + public static final String COMMAND_FALSE = "commandFalse"; //$NON-NLS-1$ public static final String DEFAULT_VALUE = "defaultValue"; //$NON-NLS-1$ public static final String ENUM_VALUE = "enumeratedOptionValue"; //$NON-NLS-1$ public static final String IS_DEFAULT = "isDefault"; //$NON-NLS-1$ @@ -88,6 +89,13 @@ public interface IOption extends IBuildObject { */ public String getCommand(); + /** + * Answers a String containing the actual command line + * option associated with a Boolean option when the value is False + * @return String + */ + public String getCommandFalse(); + /** * Answers the user-defined preprocessor symbols. * diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java index d7746dd6031..40719eb2b04 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Option.java @@ -33,6 +33,7 @@ public class Option extends BuildObject implements IOption { private List builtIns; private IOptionCategory category; private String command; + private String commandFalse; private String defaultEnumName; private Map enumCommands; private ITool tool; @@ -62,6 +63,9 @@ public class Option extends BuildObject implements IOption { // Get the command defined for the option command = element.getAttribute(COMMAND); + // Get the command defined for a Boolean option when the value is False + commandFalse = element.getAttribute(COMMAND_FALSE); + // Options hold different types of values String valueTypeStr = element.getAttribute(VALUE_TYPE); if (valueTypeStr == null) @@ -184,6 +188,13 @@ public class Option extends BuildObject implements IOption { return command; } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.build.managed.IOption#getCommandFalse() + */ + public String getCommandFalse() { + return commandFalse; + } + /* (non-Javadoc) * @see org.eclipse.cdt.core.build.managed.IOption#getDefinedSymbols() */ diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java index 14c8b07bd91..1479e5e1581 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionReference.java @@ -248,6 +248,13 @@ public class OptionReference implements IOption { return option.getCommand(); } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.build.managed.IOption#getCommandFalse() + */ + public String getCommandFalse() { + return option.getCommandFalse(); + } + /* (non-Javadoc) * @see org.eclipse.cdt.core.build.managed.IOption#getDefinedSymbols() */ diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java index 4f468825b0a..5981fd9f0c4 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java @@ -206,8 +206,15 @@ public class Tool extends BuildObject implements ITool, IOptionCategory { IOption option = opts[index]; switch (option.getValueType()) { case IOption.BOOLEAN : + String boolCmd; if (option.getBooleanValue()) { - buf.append(option.getCommand() + WHITE_SPACE); + boolCmd = option.getCommand(); + } else { + // Note: getCommandFalse is new with CDT 2.0 + boolCmd = option.getCommandFalse(); + } + if (boolCmd != null && boolCmd.length() > 0) { + buf.append(boolCmd + WHITE_SPACE); } break; @@ -219,8 +226,10 @@ public class Tool extends BuildObject implements ITool, IOptionCategory { break; case IOption.STRING : + String strCmd = option.getCommand(); String val = option.getStringValue(); - if (val.length() > 0) { + if (val.length() > 0) { + if (strCmd != null) buf.append(strCmd); buf.append(val + WHITE_SPACE); } break; diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java index 0311ece8459..4f9546bbefc 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java @@ -279,8 +279,15 @@ public class ToolReference implements IToolReference { IOption option = opts[index]; switch (option.getValueType()) { case IOption.BOOLEAN : + String boolCmd; if (option.getBooleanValue()) { - buf.append(option.getCommand() + WHITE_SPACE); + boolCmd = option.getCommand(); + } else { + // Note: getCommandFalse is new with CDT 2.0 + boolCmd = option.getCommandFalse(); + } + if (boolCmd != null && boolCmd.length() > 0) { + buf.append(boolCmd + WHITE_SPACE); } break; @@ -292,8 +299,10 @@ public class ToolReference implements IToolReference { break; case IOption.STRING : + String strCmd = option.getCommand(); String val = option.getStringValue(); if (val.length() > 0) { + if (strCmd != null) buf.append(strCmd); buf.append(val + WHITE_SPACE); } break;