fix bug 11068. make sbsv2 variant appender configuration specific RCL_2_4
authortimkelly
Thu, 15 Apr 2010 17:45:19 -0500
branchRCL_2_4
changeset 1222 63523a35c9b2
parent 1219 4881c5997074
child 1224 b0d232312e83
fix bug 11068. make sbsv2 variant appender configuration specific
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/EpocEngineHelper.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/PKGViewPathHelper.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/builder/CarbideCPPBuilder.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/project/ICarbideProjectInfo.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideBuildConfiguration.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideBuildData.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideProjectInfo.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideProjectModifier.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideSBSv2Builder.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ISBSv2BuildConfigInfo.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/SBSv2BuilderInfo.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/BuildSettingsUI.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/CarbideBuildConfigurationsPage.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/CarbideCPPProjectSettingsPage.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/SBSv2BuildConfigTabComposite.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/messages.properties
core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/SBSv2Utils.java
core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/SymbianBuildContext.java
core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/sdk/core/ISymbianBuildContext.java
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/EpocEngineHelper.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/EpocEngineHelper.java	Thu Apr 15 17:45:19 2010 -0500
@@ -16,30 +16,78 @@
 */
 package com.nokia.carbide.cdt.builder;
 
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Plugin;
+
 import com.nokia.carbide.cdt.builder.builder.CarbideCPPBuilder;
-import com.nokia.carbide.cdt.builder.project.*;
-import com.nokia.carbide.cpp.epoc.engine.*;
-import com.nokia.carbide.cpp.epoc.engine.image.*;
-import com.nokia.carbide.cpp.epoc.engine.model.bldinf.*;
+import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
+import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo;
+import com.nokia.carbide.cdt.builder.project.ISISBuilderInfo;
+import com.nokia.carbide.cdt.internal.builder.CarbideBuildConfiguration;
+import com.nokia.carbide.cdt.internal.builder.ISBSv2BuildConfigInfo;
+import com.nokia.carbide.cpp.epoc.engine.BldInfDataRunnableAdapter;
+import com.nokia.carbide.cpp.epoc.engine.BldInfViewRunnableAdapter;
+import com.nokia.carbide.cpp.epoc.engine.EpocEnginePlugin;
+import com.nokia.carbide.cpp.epoc.engine.ImageMakefileDataRunnableAdapter;
+import com.nokia.carbide.cpp.epoc.engine.MMPDataRunnableAdapter;
+import com.nokia.carbide.cpp.epoc.engine.MMPViewRunnableAdapter;
+import com.nokia.carbide.cpp.epoc.engine.PKGViewRunnableAdapter;
+import com.nokia.carbide.cpp.epoc.engine.image.IBitmapSource;
+import com.nokia.carbide.cpp.epoc.engine.image.IImageSource;
+import com.nokia.carbide.cpp.epoc.engine.image.IMultiImageSource;
+import com.nokia.carbide.cpp.epoc.engine.model.bldinf.IBldInfData;
+import com.nokia.carbide.cpp.epoc.engine.model.bldinf.IBldInfView;
+import com.nokia.carbide.cpp.epoc.engine.model.bldinf.IExport;
 import com.nokia.carbide.cpp.epoc.engine.model.bldinf.IExtension;
+import com.nokia.carbide.cpp.epoc.engine.model.bldinf.IMMPReference;
+import com.nokia.carbide.cpp.epoc.engine.model.bldinf.IMakMakeReference;
+import com.nokia.carbide.cpp.epoc.engine.model.bldinf.IMakefileReference;
 import com.nokia.carbide.cpp.epoc.engine.model.makefile.image.IImageMakefileData;
-import com.nokia.carbide.cpp.epoc.engine.model.mmp.*;
+import com.nokia.carbide.cpp.epoc.engine.model.mmp.EMMPLanguage;
+import com.nokia.carbide.cpp.epoc.engine.model.mmp.EMMPStatement;
+import com.nokia.carbide.cpp.epoc.engine.model.mmp.IMMPAIFInfo;
+import com.nokia.carbide.cpp.epoc.engine.model.mmp.IMMPBitmap;
+import com.nokia.carbide.cpp.epoc.engine.model.mmp.IMMPData;
+import com.nokia.carbide.cpp.epoc.engine.model.mmp.IMMPResource;
+import com.nokia.carbide.cpp.epoc.engine.model.mmp.IMMPView;
+import com.nokia.carbide.cpp.epoc.engine.model.mmp.IMMPViewConfiguration;
 import com.nokia.carbide.cpp.epoc.engine.preprocessor.AcceptedNodesViewFilter;
 import com.nokia.carbide.cpp.epoc.engine.preprocessor.AllNodesViewFilter;
+import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils;
 import com.nokia.carbide.cpp.internal.api.sdk.SymbianBuildContext;
 import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
 import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
-import com.nokia.carbide.internal.api.cpp.epoc.engine.model.pkg.*;
-import com.nokia.cpp.internal.api.utils.core.*;
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.*;
-
-import java.io.*;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.model.pkg.EPKGLanguage;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.model.pkg.IPKGEmbeddedSISFile;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.model.pkg.IPKGInstallFile;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.model.pkg.IPKGView;
+import com.nokia.carbide.internal.api.cpp.epoc.engine.model.pkg.PKGModelHelper;
+import com.nokia.cpp.internal.api.utils.core.CommonPathFinder;
+import com.nokia.cpp.internal.api.utils.core.FileUtils;
+import com.nokia.cpp.internal.api.utils.core.Logging;
+import com.nokia.cpp.internal.api.utils.core.TextUtils;
 
 public class EpocEngineHelper {
 
@@ -815,6 +863,13 @@
 					}
 					
 					String releasePlatform = buildConfig.getSDK().getBSFCatalog().getReleasePlatform(buildConfig.getBasePlatformForVariation());
+					if (CarbideBuilderPlugin.getBuildManager().isCarbideSBSv2Project(buildConfig.getCarbideProject().getProject())){ 
+						// Test is this is an SBSv2 build binary variant (changes the output directory) 
+						ISBSv2BuildConfigInfo sbsv2Info = ((CarbideBuildConfiguration)buildConfig).getSBSv2BuildConfigInfo(); 
+						if ( sbsv2Info != null && SBSv2Utils.getVariantOutputDirModifier(sbsv2Info.getSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT)) != null && !releasePlatform.contains(".") ){ 
+							releasePlatform = releasePlatform + SBSv2Utils.getVariantOutputDirModifier(sbsv2Info.getSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT)); 
+						}
+					}
 					IPath path = buildConfig.getSDK().getReleaseRoot().append(releasePlatform).append(buildConfig.getTargetString());
 
 					// if targetpath is non-null and this is an EKA1 emulator config then add it
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/PKGViewPathHelper.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/PKGViewPathHelper.java	Thu Apr 15 17:45:19 2010 -0500
@@ -22,6 +22,9 @@
 
 import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
 import com.nokia.carbide.cdt.builder.project.ISISBuilderInfo;
+import com.nokia.carbide.cdt.internal.builder.CarbideBuildConfiguration;
+import com.nokia.carbide.cdt.internal.builder.ISBSv2BuildConfigInfo;
+import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils;
 import com.nokia.carbide.internal.api.cpp.epoc.engine.model.pkg.IPKGView;
 import com.nokia.cpp.internal.api.utils.core.Check;
 
@@ -69,7 +72,14 @@
 		this.pkgFilePath = view.getModel().getPath();
 		this.buildConfig = buildConfig;
 		this.epocRoot = new Path(buildConfig.getSDK().getEPOCROOT());
-		this.platform = buildConfig.getPlatformString();
+		this.platform = buildConfig.getPlatformString();		
+		if (CarbideBuilderPlugin.getBuildManager().isCarbideSBSv2Project(buildConfig.getCarbideProject().getProject())){
+			// Test is this is an SBSv2 build binary variant (changes the output directory)
+			ISBSv2BuildConfigInfo sbsv2Info = ((CarbideBuildConfiguration)buildConfig).getSBSv2BuildConfigInfo();
+			if ( sbsv2Info != null && SBSv2Utils.getVariantOutputDirModifier(sbsv2Info.getSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT)) != null && !platform.contains(".") ){
+				this.platform = this.platform + SBSv2Utils.getVariantOutputDirModifier(sbsv2Info.getSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT));
+			}
+		} 
 		this.target = buildConfig.getTargetString();
 		this.mainDirectory = pkgFilePath.removeLastSegments(1);
 	}
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/builder/CarbideCPPBuilder.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/builder/CarbideCPPBuilder.java	Thu Apr 15 17:45:19 2010 -0500
@@ -59,12 +59,13 @@
 import com.nokia.carbide.cdt.builder.project.IROMBuilderInfo;
 import com.nokia.carbide.cdt.builder.project.ISISBuilderInfo;
 import com.nokia.carbide.cdt.internal.api.builder.SISBuilderInfo2;
+import com.nokia.carbide.cdt.internal.builder.CarbideBuildConfiguration;
 import com.nokia.carbide.cdt.internal.builder.CarbideSBSv1Builder;
 import com.nokia.carbide.cdt.internal.builder.CarbideSBSv2Builder;
 import com.nokia.carbide.cdt.internal.builder.ICarbideBuilder;
+import com.nokia.carbide.cdt.internal.builder.ISBSv2BuildConfigInfo;
 import com.nokia.carbide.cdt.internal.builder.ui.BuilderPreferencePage;
 import com.nokia.carbide.cdt.internal.builder.ui.MMPSelectionDialog;
-import com.nokia.carbide.cdt.internal.builder.ui.Messages;
 import com.nokia.carbide.cpp.epoc.engine.EpocEnginePlugin;
 import com.nokia.carbide.cpp.epoc.engine.MMPDataRunnableAdapter;
 import com.nokia.carbide.cpp.epoc.engine.PKGViewRunnableAdapter;
@@ -74,6 +75,7 @@
 import com.nokia.carbide.cpp.epoc.engine.model.mmp.IMMPData;
 import com.nokia.carbide.cpp.epoc.engine.model.mmp.IMMPResource;
 import com.nokia.carbide.cpp.epoc.engine.preprocessor.AcceptedNodesViewFilter;
+import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils;
 import com.nokia.carbide.cpp.internal.qt.core.QtCorePlugin;
 import com.nokia.carbide.cpp.internal.x86build.X86BuildPlugin;
 import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
@@ -1919,7 +1921,15 @@
     			pkgFileStr.contains(PKG_SYMBOL_TARGET) ) {
     				// need to create a new PKG file, resolved...
     				pkgFileStr = pkgFileStr.replace(PKG_SYMBOL_EPOCROOT, context.getSDK().getEPOCROOT());
-    				pkgFileStr = pkgFileStr.replace(PKG_SYMBOL_PLATFORM, context.getPlatformString());
+    				String platSubst = context.getPlatformString().toLowerCase(); 
+    				if (context instanceof CarbideBuildConfiguration){ 
+    					// Test is this is an SBSv2 build binary variant (changes the output directory)
+    					ISBSv2BuildConfigInfo sbsv2Info = ((CarbideBuildConfiguration)context).getSBSv2BuildConfigInfo(); 
+    					if (sbsv2Info != null && SBSv2Utils.getVariantOutputDirModifier(sbsv2Info.getSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT)) != null){ 
+    						platSubst = platSubst + SBSv2Utils.getVariantOutputDirModifier(sbsv2Info.getSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT)); 
+    					}
+    				}
+    				pkgFileStr = pkgFileStr.replace(PKG_SYMBOL_PLATFORM, platSubst); 
     				pkgFileStr = pkgFileStr.replace(PKG_SYMBOL_TARGET, context.getTargetString());
     				
     				IPath tmpPKGPath = pkgFile.removeLastSegments(1);
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/project/ICarbideProjectInfo.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/project/ICarbideProjectInfo.java	Thu Apr 15 17:45:19 2010 -0500
@@ -297,13 +297,4 @@
 	 * @since 2.2
 	 */
 	public String extraSBSv2Args();
-	
-	/**
-	 * Appends arbitrary text to a default Carbide/Raptor configuration (the -c parameter). The default name is always given, e.g. armv5_urel, but users can 
-	 * append whatever they want to change the behavior of the build. 
-	 * @return the string to append the text to for the Raptor -c parameter
-	 * 
-	 * @since 2.6
-	 */
-	public String buildConfigAppender();
 }
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideBuildConfiguration.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideBuildConfiguration.java	Thu Apr 15 17:45:19 2010 -0500
@@ -70,10 +70,6 @@
 	
 	// SBSv2 only config settings
 	protected final static String SBSV2_DATA_ID = "SBSV2_DATA_ID"; //$NON-NLS-1$
-	protected final static String ATRRIB_CONFIG_BASE_PLATFORM = "CONFIG_BASE_PLATFORM"; //$NON-NLS-1$
-	protected final static String ATTRIB_CONFIG_TARGET = "CONFIG_TARGET"; //$NON-NLS-1$
-	protected final static String ATTRIB_SBSV2_BUILD_ALIAS = "SBSV2_BUILD_ALIAS"; //$NON-NLS-1$
-	protected final static String ATTRIB_SBSV2_CONFIG_DISPLAY_STRING = "SBSV2_CONFIG_DISPLAY_STRING"; //$NON-NLS-1$
 
 	protected TrackedResource projectTracker;
 	protected List<ISISBuilderInfo> sisBuilderInfoList;
@@ -81,7 +77,8 @@
 	protected BuildArgumentsInfo buildArgumentsInfo;
 	protected BuildConfigurationData buildConfigData;
 	protected ROMBuilderInfo romBuilderInfo;
-
+	protected SBSv2BuilderInfo sbsv2BuilderInfo; 
+	
 	public CarbideBuildConfiguration(IProject project, ISymbianBuildContext context) {
 		super(context.getSDK(), context.getPlatformString(), context.getTargetString(), context.getSBSv2Alias());
 		projectTracker = new TrackedResource(project);
@@ -90,6 +87,9 @@
 		buildArgumentsInfo = new BuildArgumentsInfo(getSDK());
 		buildConfigData = new BuildConfigurationData(this);
 		romBuilderInfo = new ROMBuilderInfo(getSDK());
+		if (context.getSBSv2Alias() != null){ 
+			sbsv2BuilderInfo = new SBSv2BuilderInfo(context); 
+		}
 	}
 	
 	public void loadFromStorage(ICConfigurationDescription projDes) throws CoreException {
@@ -111,6 +111,8 @@
 					loadBuildArgsFromStorage(se);
 				} else if (se.getName().equals(ROM_BUILDER_DATA_ID)) {
 					romBuilderInfo.loadFromStorage(se);
+				} else if (se.getName().equals(SBSV2_DATA_ID)){ 
+					sbsv2BuilderInfo.loadFromStorage(se); 
 				}
 			}
 		} else {
@@ -133,17 +135,10 @@
 			romBuilderInfo.saveToStorage(rootStorage.createChild(ROM_BUILDER_DATA_ID));
 			
 			if (getSBSv2Alias() != null){
-				saveSBSv2DataToStorage(rootStorage.createChild(SBSV2_DATA_ID));
+				sbsv2BuilderInfo.saveToStorage(rootStorage.createChild(SBSV2_DATA_ID));
 			}
 		}
 	}
-	
-	private void saveSBSv2DataToStorage(ICStorageElement createChild) {
-		createChild.setAttribute(ATRRIB_CONFIG_BASE_PLATFORM, getPlatformString());
-		createChild.setAttribute(ATTRIB_CONFIG_TARGET, getTargetString());
-		createChild.setAttribute(ATTRIB_SBSV2_BUILD_ALIAS, getSBSv2Alias());
-		createChild.setAttribute(ATTRIB_SBSV2_CONFIG_DISPLAY_STRING, getDisplayString());
-	}
 
 	private void loadBuildArgsFromStorage(ICStorageElement rootStorage) {
 		String value = rootStorage.getAttribute(BuildArgumentsInfo.BLDMAKEBLDFILESARGSSTORAGE);
@@ -434,4 +429,12 @@
 		return false;
 	} 
 	
+	public ISBSv2BuildConfigInfo getSBSv2BuildConfigInfo(){ 
+		return sbsv2BuilderInfo; 
+	}
+	
+	public ISBSv2BuildConfigInfo getSBSv2ConfigInfo() { 
+		return sbsv2BuilderInfo; 
+	}
+	
 }
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideBuildData.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideBuildData.java	Thu Apr 15 17:45:19 2010 -0500
@@ -24,6 +24,7 @@
 
 import com.nokia.carbide.cdt.builder.CarbideBuilderPlugin;
 import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
+import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils;
 
 /**
  * Part of the new CDT 4.0 project model requirements.  All this class
@@ -58,7 +59,14 @@
 
 	@Override
 	public ICOutputEntry[] getOutputDirectories() {
-		IPath outputPath = carbideBuildConfig.getSDK().getReleaseRoot().append(carbideBuildConfig.getPlatformString()).append(carbideBuildConfig.getTargetString());
+		String thePlatform = carbideBuildConfig.getPlatformString();
+		if (CarbideBuilderPlugin.getBuildManager().isCarbideSBSv2Project(carbideBuildConfig.getCarbideProject().getProject())){
+			ISBSv2BuildConfigInfo sbsv2Info = ((CarbideBuildConfiguration)carbideBuildConfig).getSBSv2BuildConfigInfo();
+			if ( sbsv2Info != null && SBSv2Utils.getVariantOutputDirModifier(sbsv2Info.getSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT)) != null ){
+				thePlatform = thePlatform + SBSv2Utils.getVariantOutputDirModifier(sbsv2Info.getSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT));
+			}
+		} 
+		IPath outputPath = carbideBuildConfig.getSDK().getReleaseRoot().append(thePlatform).append(carbideBuildConfig.getTargetString());
 		return new ICOutputEntry[]{new COutputEntry(outputPath, null, 0)};
 	}
 
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideProjectInfo.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideProjectInfo.java	Thu Apr 15 17:45:19 2010 -0500
@@ -61,7 +61,6 @@
 	protected boolean overrideMakeEngine;
 	protected String makeEngineToUse;
 	protected String extraSBSv2Args;
-	protected String buildAliasAppender;
 	
 	// for internal plugin use
 	public static final String OVERRIDE_WORKSPACE_SETTINGS_KEY = "overrideWorkspaceSettings"; //$NON-NLS-1$
@@ -80,7 +79,6 @@
 	public static final String OVERRIDE_MAKE_ENGINE = "overrideMakeEngine"; //$NON-NLS-1$
 	public static final String MAKE_ENGINE_TO_USE = "makeEngineToUse"; //$NON-NLS-1$
 	public static final String EXTRA_SBSV2_ARGS = "extraSBSv2Args"; //$NON-NLS-1$
-	public static final String BUILD_ALIAS_APPENDER = "buildAliasAppendText"; //$NON-NLS-1$
 	
 	public CarbideProjectInfo(IProject project) {
 		this.projectTracker = new TrackedResource(project);
@@ -230,11 +228,6 @@
 					if (orig != null){
 						extraSBSv2Args = orig;
 					}
-					orig = storage.getAttribute(BUILD_ALIAS_APPENDER);
-					if (orig != null){
-						buildAliasAppender = orig;
-					}
-					 
 				}
 			}
 		}
@@ -267,7 +260,6 @@
 		overrideMakeEngine = BuilderPreferencePage.overrideDefaultMakeEngine();
 		makeEngineToUse = BuilderPreferencePage.makeEngine();
 		extraSBSv2Args = BuilderPreferencePage.extraSBSv2ArgsTextStore();
-		buildAliasAppender = ""; // project setting only
 	}
 
 	public List<ICarbideBuildConfiguration> getBuildConfigurations() {
@@ -533,11 +525,6 @@
 		return BuilderPreferencePage.extraSBSv2ArgsTextStore();
 	}
 	
-	public String buildConfigAppender() {
-		// This is a project setting only, i.e. no workspace setting to override
-		return buildAliasAppender;
-	}
-	
 	/*
 	 * The following methods are non-API
 	 */
@@ -597,7 +584,4 @@
 		return extraSBSv2Args;
 	}
 	
-	public String buildAliasAppendTextValue() {
-		return buildAliasAppender;
-	}
 }
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideProjectModifier.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideProjectModifier.java	Thu Apr 15 17:45:19 2010 -0500
@@ -219,8 +219,6 @@
 						makeEngineToUse = settingValue;
 					} else if (settingName.equals(EXTRA_SBSV2_ARGS)) {
 						extraSBSv2Args = settingValue;
-					} else if (settingName.equals(BUILD_ALIAS_APPENDER)) {
-						buildAliasAppender = settingValue;
 					}
 					
 					// now write it to the file
@@ -310,7 +308,6 @@
 					storage.setAttribute(OVERRIDE_MAKE_ENGINE, overrideMakeEngine ? "true" : "false");
 					storage.setAttribute(MAKE_ENGINE_TO_USE, makeEngineToUse);
 					storage.setAttribute(EXTRA_SBSV2_ARGS, extraSBSv2Args);
-					storage.setAttribute(BUILD_ALIAS_APPENDER, buildAliasAppender);
 				}
 			}
 		} catch (CoreException e) {
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideSBSv2Builder.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideSBSv2Builder.java	Thu Apr 15 17:45:19 2010 -0500
@@ -47,7 +47,6 @@
     
     private static final IPath SBS_BAT = new Path("sbs.bat"); //$NON-NLS-1$
     
-    
     public boolean buildAllComponents(ICarbideBuildConfiguration buildConfig, List<IPath> normalMakMakePaths, List<IPath> testMakMakePaths, CarbideCommandLauncher launcher, IProgressMonitor monitor) {
 		
 		SubMonitor progress = SubMonitor.convert(monitor, 3);
@@ -93,7 +92,15 @@
     
     /** Get the build-able configuration from the command line (i.e. build alias). This is passed after the sbs -c parameter */ 
     protected String getConfigName(ICarbideBuildConfiguration buildConfig) {
-    	return buildConfig.getSBSv2Alias(); 
+    	String buildAlias = buildConfig.getSBSv2Alias(); 
+    	ISBSv2BuildConfigInfo sbsv2Info = ((CarbideBuildConfiguration)buildConfig).getSBSv2BuildConfigInfo();
+    	if (sbsv2Info != null){ 
+    		String variant = sbsv2Info.getSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT);
+    		if (variant != null && variant.length() > 1){
+    			buildAlias = buildAlias + variant;
+    		}
+    	}
+    	return buildAlias;
     }
     
 	public boolean buildComponent(ICarbideBuildConfiguration buildConfig, IPath componentPath, boolean isTest, CarbideCommandLauncher launcher, IProgressMonitor monitor) {
@@ -512,10 +519,6 @@
 			configName = configName + ".test"; //$NON-NLS-1$
 		}
 		
-		if (cpi.buildConfigAppender() != null && cpi.buildConfigAppender().length() > 0){
-			configName = configName + cpi.buildConfigAppender();
-		}
-		
 		args.add(configName);
 		
 		//TODO this causes output to go to stdout, but only at the end of the build.  should we specify a logfile name and tail the file?
@@ -598,10 +601,6 @@
 				configName = "error_retrieving_build_alias";
 		}
 		
-		if (cpi.buildConfigAppender() != null && cpi.buildConfigAppender().length() > 0){
-			configName = configName + cpi.buildConfigAppender();
-		}
-		
 		String[] sbsArgs = new String[] {"--source-target=" + file.toOSString(), COMPILE_ARG, configName, COMPONENT_ARG, fullMMPPath.toFile().getName()};
 		launcher.setErrorParserManager(buildConfig.getCarbideProject().getINFWorkingDirectory(), buildConfig.getErrorParserList());
 		
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ISBSv2BuildConfigInfo.java	Thu Apr 15 17:45:19 2010 -0500
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+package com.nokia.carbide.cdt.internal.builder;
+
+/**
+ * Interface to SBSv2 build configuration specific data
+ */
+public interface ISBSv2BuildConfigInfo {
+
+	// Data attribute id's saved in .cproject file
+	public final static String ATRRIB_CONFIG_BASE_PLATFORM = "CONFIG_BASE_PLATFORM"; //$NON-NLS-1$ 
+	public final static String ATTRIB_CONFIG_TARGET = "CONFIG_TARGET"; //$NON-NLS-1$ 
+	public final static String ATTRIB_SBSV2_BUILD_ALIAS = "SBSV2_BUILD_ALIAS"; //$NON-NLS-1$ 
+	public final static String ATTRIB_SBSV2_CONFIG_DISPLAY_STRING = "SBSV2_CONFIG_DISPLAY_STRING"; //$NON-NLS-1$ 
+	public final static String ATTRIB_SBSV2_VARIANT = "ATTRIB_SBSV2_VARIANT";
+	
+	/** Retrieve a specfic .cproject SBSv2 data value from a given ID */
+	String getSBSv2Setting(String id);
+	
+	/** 
+	 * Set a specific SBSv2 configuration specific data value
+	 * @param id
+	 * @param value
+	 */
+	void setSBSv2Setting(String id, String value);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/SBSv2BuilderInfo.java	Thu Apr 15 17:45:19 2010 -0500
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+package com.nokia.carbide.cdt.internal.builder;
+
+import java.util.HashMap;
+
+import org.eclipse.cdt.core.settings.model.ICStorageElement;
+
+import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
+
+public class SBSv2BuilderInfo implements ISBSv2BuildConfigInfo {
+
+	HashMap<String, String> sbsv2ConfigDataMap = new HashMap<String, String>();
+	
+//	private static String TRUE  = "true";
+//	private static String FALSE = "false";
+	
+	ISymbianBuildContext context;
+	
+	public SBSv2BuilderInfo(ISymbianBuildContext context) {
+		sbsv2ConfigDataMap.put(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_BUILD_ALIAS, context.getSBSv2Alias());
+		sbsv2ConfigDataMap.put(ISBSv2BuildConfigInfo.ATRRIB_CONFIG_BASE_PLATFORM, context.getBasePlatformForVariation());
+		sbsv2ConfigDataMap.put(ISBSv2BuildConfigInfo.ATTRIB_CONFIG_TARGET, context.getTargetString());
+		sbsv2ConfigDataMap.put(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_CONFIG_DISPLAY_STRING, context.getDisplayString());
+		sbsv2ConfigDataMap.put(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT, "");
+		this.context = context;
+	}
+	
+	public void loadFromStorage(ICStorageElement rootStorage) {
+			
+		String value = rootStorage.getAttribute(ATRRIB_CONFIG_BASE_PLATFORM);
+		if (value != null) {
+			sbsv2ConfigDataMap.put(ATRRIB_CONFIG_BASE_PLATFORM, value);
+		}
+		
+		value = rootStorage.getAttribute(ATTRIB_SBSV2_VARIANT);
+		if (value != null) {
+			sbsv2ConfigDataMap.put(ATTRIB_SBSV2_VARIANT, value);
+		}
+		
+		value = rootStorage.getAttribute(ATTRIB_CONFIG_TARGET);
+		if (value != null) {
+			sbsv2ConfigDataMap.put(ATTRIB_CONFIG_TARGET, value);
+		}
+		
+		value = rootStorage.getAttribute(ATTRIB_SBSV2_BUILD_ALIAS);
+		if (value != null) {
+			sbsv2ConfigDataMap.put(ATTRIB_SBSV2_BUILD_ALIAS, value);
+		}
+		
+		value = rootStorage.getAttribute(ATTRIB_SBSV2_CONFIG_DISPLAY_STRING);
+		if (value != null) {
+			sbsv2ConfigDataMap.put(ATTRIB_SBSV2_CONFIG_DISPLAY_STRING, value);
+		}
+		
+	}
+	
+	public void saveToStorage(ICStorageElement rootStorage) {
+		
+		String value = sbsv2ConfigDataMap.get(ATRRIB_CONFIG_BASE_PLATFORM);
+		if (value != null && value.trim().length() > 0){
+			rootStorage.setAttribute(ATRRIB_CONFIG_BASE_PLATFORM, value);
+		}
+		
+		value = sbsv2ConfigDataMap.get(ATTRIB_SBSV2_VARIANT);
+		if (value != null && value.trim().length() > 0){
+			rootStorage.setAttribute(ATTRIB_SBSV2_VARIANT, value);
+		}
+		
+		value = sbsv2ConfigDataMap.get(ATTRIB_CONFIG_TARGET);
+		if (value != null && value.trim().length() > 0){
+			rootStorage.setAttribute(ATTRIB_CONFIG_TARGET, value);
+		}
+		
+		value = sbsv2ConfigDataMap.get(ATTRIB_SBSV2_BUILD_ALIAS);
+		if (value != null && value.trim().length() > 0){
+			rootStorage.setAttribute(ATTRIB_SBSV2_BUILD_ALIAS, value);
+		}
+		
+		value = sbsv2ConfigDataMap.get(ATTRIB_SBSV2_CONFIG_DISPLAY_STRING);
+		if (value != null && value.trim().length() > 0){
+			rootStorage.setAttribute(ATTRIB_SBSV2_CONFIG_DISPLAY_STRING, value);
+		}
+
+	}
+
+	public String getSBSv2Setting(String id) {
+		return sbsv2ConfigDataMap.get(id);
+	}
+
+	public void setSBSv2Setting(String id, String value) {
+		sbsv2ConfigDataMap.put(id, value);
+	}
+
+}
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/BuildSettingsUI.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/BuildSettingsUI.java	Thu Apr 15 17:45:19 2010 -0500
@@ -65,9 +65,7 @@
 	private Text makeEngineText;
 	private Label extraArgsLabel;
 	private Text  extraArgsText;
-	private Label buildAliasLabel;     // project setting only
-	private Text  buildAliasText; // project setting only
-	
+
 	public BuildSettingsUI(Shell shell, boolean wantsSBSv2, boolean projectSetting) {
 		this.shell = shell;
 		this.wantsSBSv2 = wantsSBSv2;
@@ -258,17 +256,6 @@
 		extraArgsText.setToolTipText(Messages.getString("BuildSettingsUI.ExtraArgsToolTipText")); //$NON-NLS-1$
 		extraArgsText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
 		
-		if (projectSetting){
-			buildAliasLabel = new Label(content, SWT.NONE);
-			buildAliasLabel.setText(Messages.getString("BuildSettingsUI.AlliasAppendLabel")); //$NON-NLS-1$
-			buildAliasLabel.setToolTipText(Messages.getString("BuildSettingsUI.AlliasAppendToolTipText"));  //$NON-NLS-1$
-			GridData buildAliasGridData = new GridData();
-			buildAliasLabel.setLayoutData(buildAliasGridData);
-			
-			buildAliasText = new Text(content, SWT.BORDER);
-			buildAliasText.setToolTipText(Messages.getString("BuildSettingsUI.AlliasAppendToolTipText")); //$NON-NLS-1$
-			buildAliasText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-		}
 		overrideDefaultMakeEngineCheck = new Button(content, SWT.CHECK);
 		overrideDefaultMakeEngineCheck.setText(Messages.getString("BuildSettingsUI.OverrideMakeEngineLabel")); //$NON-NLS-1$
 		overrideDefaultMakeEngineCheck.setToolTipText(Messages.getString("BuildSettingsUI.OverrideMakeEngineToolTip")); //$NON-NLS-1$
@@ -470,14 +457,6 @@
 		extraArgsText.setText(args);
 	}
 	
-	public String getBuildAliasAppendText() {
-		return buildAliasText.getText();
-	}
-
-	public void setBuildAliasAppendText(String args) {
-		buildAliasText.setText(args);
-	}
-	
 	public boolean getDontPromtTrackDeps(){
 		if (!projectSetting){
 			return dontCheckForExternalDependencies.getSelection();
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/CarbideBuildConfigurationsPage.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/CarbideBuildConfigurationsPage.java	Thu Apr 15 17:45:19 2010 -0500
@@ -154,6 +154,9 @@
 	// rom builder tab
 	ROMBuilderTabComposite romBuilderTabComposite;
 	
+	// SBSv2 config data tab
+	SBSv2BuildConfigTabComposite sbsv2BuildConfigTabComposite;
+	
 	// Configuration management/switching
 	private IProject project;
 	private BuildConfigCombo buildConfigurationCombo;
@@ -224,6 +227,20 @@
 		data.verticalIndent = 18;
 		control.setLayoutData(data);
 
+		//////////////////// SBSv2 Config Data Tab /////////////
+		if (CarbideBuilderPlugin.getBuildManager().isCarbideSBSv2Project(project)) {
+			
+			TabItem sbsV2TabItem = new TabItem(tabFolder, SWT.NONE);
+			sbsV2TabItem.setText(Messages.getString("CarbideBuildConfigurationsPage.SBSv2_Tab")); //$NON-NLS-1$
+			sbsV2TabItem.setToolTipText(Messages.getString("CarbideBuildConfigurationsPage.Environement_Tab_ToolTip")); //$NON-NLS-1$
+			
+			sbsv2BuildConfigTabComposite = new SBSv2BuildConfigTabComposite(sbsV2TabItem);
+			sbsv2BuildConfigTabComposite.createControls();
+			sbsV2TabItem.setControl(sbsv2BuildConfigTabComposite);
+		}
+		////////////////////////////////////////////////////////
+		
+		
 		////////////////////// Environment Tab ////////////////
 		TabItem envTabItem = new TabItem(tabFolder, SWT.NONE);
 		envTabItem.setText(Messages.getString("CarbideBuildConfigurationsPage.Environment_Tab")); //$NON-NLS-1$
@@ -364,6 +381,9 @@
 				ICarbideBuildConfiguration config = cpi.getDefaultConfiguration();
 				if (config != null) {
 					sisFilesBlock.initData(config);
+					if (CarbideBuilderPlugin.getBuildManager().isCarbideSBSv2Project(project)) {
+						sbsv2BuildConfigTabComposite.initData(config);
+					}
 					if (argumentsTabcomposite != null) {
 						argumentsTabcomposite.initData(config);
 					}
@@ -638,7 +658,9 @@
 		
 		// Compare each of the settings to see if they are the same
 		boolean sisSettingsEqual = sisFilesBlock.compareConfigurationSettings(selectedConfig, writeToConfig);
-
+		
+		boolean sbsv2ConfigEqual = sbsv2BuildConfigTabComposite.compareConfigurationSettings(selectedConfig, writeToConfig);
+		
 		// Compare envVars settings
 		boolean envVarsSettingsEqual = envVarList.size() == envVarListOrig.size() && envVarList.equals(envVarListOrig);
 		if (!envVarsSettingsEqual && writeToConfig) {
@@ -654,7 +676,7 @@
 
 		boolean romBuilderSettingsEqual = romBuilderTabComposite.compareConfigurationSettings(selectedConfig, writeToConfig);
 
-		return sisSettingsEqual && envVarsSettingsEqual && argsSettingsEqual && pathsAndSynmbolsSettingsEqual && romBuilderSettingsEqual;
+		return sisSettingsEqual && sbsv2ConfigEqual && envVarsSettingsEqual && argsSettingsEqual && pathsAndSynmbolsSettingsEqual && romBuilderSettingsEqual;
 	}
 	
 	private void saveConfigurationSettings(ICarbideBuildConfiguration config) {
@@ -957,6 +979,9 @@
 		ICarbideBuildConfiguration lastConfig = cpi.getNamedConfiguration(lastSelectedConfigName);
 		if (lastConfig != null) {
 			sisFilesBlock.initData(lastConfig);
+			if (CarbideBuilderPlugin.getBuildManager().isCarbideSBSv2Project(project)) {
+				sbsv2BuildConfigTabComposite.initData(lastConfig);
+			}
 			setUpEnvVarsTable(new String[0], null); // refresh env vars info
 			if (argumentsTabcomposite != null) {
 				argumentsTabcomposite.initData(lastConfig);
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/CarbideCPPProjectSettingsPage.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/CarbideCPPProjectSettingsPage.java	Thu Apr 15 17:45:19 2010 -0500
@@ -272,9 +272,7 @@
 
 				cpi.writeProjectSetting(CarbideProjectInfo.MAKE_ENGINE_TO_USE, buildSettingsUI.getMakeEngine());
 				
-				cpi.writeProjectSetting(CarbideProjectInfo.EXTRA_SBSV2_ARGS, buildSettingsUI.getExtraSBSv2Args());
-				
-				cpi.writeProjectSetting(CarbideProjectInfo.BUILD_ALIAS_APPENDER, buildSettingsUI.getBuildAliasAppendText());
+				cpi.writeProjectSetting(CarbideProjectInfo.EXTRA_SBSV2_ARGS, buildSettingsUI.getExtraSBSv2Args());				
 			}
 
 			List<String> checkedComponents = getCheckedComponentFilenames();
@@ -330,7 +328,6 @@
         		buildSettingsUI.setOverrideDefaultMakeEngine(cpi.overrideMakeEngineProjectValue());
         		buildSettingsUI.setMakeEngineText(cpi.makeEngineProjectValue());
         		buildSettingsUI.setExtraSBSv2Args(cpi.extraSBSv2ArgsProjectValue());
-        		buildSettingsUI.setBuildAliasAppendText(cpi.buildAliasAppendTextValue());
     		}
     		
     		initMMPSelectionUI(cpi);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/SBSv2BuildConfigTabComposite.java	Thu Apr 15 17:45:19 2010 -0500
@@ -0,0 +1,134 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+package com.nokia.carbide.cdt.internal.builder.ui;
+
+import java.io.File;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+
+import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
+import com.nokia.carbide.cdt.internal.builder.CarbideBuildConfiguration;
+import com.nokia.carbide.cdt.internal.builder.ISBSv2BuildConfigInfo;
+import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+
+public class SBSv2BuildConfigTabComposite extends Composite {
+	
+	private static final String configCmdLabelPrefixText = "Configuration Command: -c "; // $NON-NLS-N$
+	private static final String releaseTreeLabelPrefixText = "Release Tree: "; // $NON-NLS-N$
+	
+	Text variantEdit;
+	
+	Label configCmdLabel;
+	Label releaseTreeLabel;
+	private ICarbideBuildConfiguration config;
+	
+	public SBSv2BuildConfigTabComposite(TabItem tabItem) {
+		super(tabItem.getParent(), SWT.NONE);
+	}
+
+	public void createControls() {
+		setLayout(new GridLayout(2, false));
+
+		Label variantLabel = new Label(this, SWT.NONE);
+		variantLabel.setText(Messages.getString("CarbideSBSv2ConfigTab.VariantLabel")); //$NON-NLS-1$
+		variantLabel.setToolTipText(Messages.getString("CarbideSBSv2ConfigTab.VariantLabel_ToolTip")); //$NON-NLS-1$
+
+		variantEdit = new Text(this, SWT.BORDER);
+		variantEdit.setToolTipText(Messages.getString("CarbideSBSv2ConfigTab.VariantLabel_ToolTip")); //$NON-NLS-1$
+		variantEdit.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		SelectionListener listener;
+		variantEdit.addKeyListener( new KeyListener() {
+			
+			public void keyReleased(KeyEvent e) {
+				setVaraintDetailsText();
+			}
+			
+			public void keyPressed(KeyEvent e) {
+				// ignore
+			}
+		});
+		
+		Group emulatorBuildOptionsGroup;
+		emulatorBuildOptionsGroup = new Group(this, SWT.NONE);
+		emulatorBuildOptionsGroup.setLayout(new GridLayout(1, false));
+		GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1);
+		emulatorBuildOptionsGroup.setLayoutData(gd);
+		emulatorBuildOptionsGroup.setText("Build Variant Details"); //$NON-NLS-1$
+
+		configCmdLabel = new Label(emulatorBuildOptionsGroup, SWT.CHECK);
+		configCmdLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		releaseTreeLabel = new Label(emulatorBuildOptionsGroup, SWT.CHECK);
+		releaseTreeLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+	}
+	
+	public void initData(ICarbideBuildConfiguration buildConfig) {
+		this.config = buildConfig;
+		ISBSv2BuildConfigInfo sbsv2ConfigInfo = ((CarbideBuildConfiguration)buildConfig).getSBSv2ConfigInfo();
+		if (sbsv2ConfigInfo.getSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT) != null){
+			variantEdit.setText(sbsv2ConfigInfo.getSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT));
+		}
+		
+		setVaraintDetailsText();
+	}
+	
+	private void setVaraintDetailsText() {
+		
+		String configCmdText = configCmdLabelPrefixText;
+		if (config != null){
+			configCmdText += config.getSBSv2Alias() + variantEdit.getText();
+		}
+		configCmdLabel.setText(configCmdText);
+
+		String variantText = SBSv2Utils.getVariantOutputDirModifier(variantEdit.getText());
+		if (variantText == null) variantText = "";	
+		String relTreeText = releaseTreeLabelPrefixText;
+		if (config != null){
+			relTreeText += " " + config.getSDK().getEPOCROOT() + "epoc32" + File.separator + "release" + File.separator + config.getPlatformString().toLowerCase() + variantText + File.separator + config.getTargetString().toLowerCase();
+		}
+		releaseTreeLabel.setText(relTreeText);
+	}
+
+	
+
+	public boolean compareConfigurationSettings(ICarbideBuildConfiguration selectedConfig, boolean writeToConfig) {
+		boolean settingsEqual = true;
+		
+		ISBSv2BuildConfigInfo currSBSv2Info = ((CarbideBuildConfiguration)selectedConfig).getSBSv2ConfigInfo();
+		settingsEqual = currSBSv2Info.getSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT).equals(variantEdit.getText());
+		
+		if (!settingsEqual && writeToConfig) {
+			currSBSv2Info.setSBSv2Setting(ISBSv2BuildConfigInfo.ATTRIB_SBSV2_VARIANT, variantEdit.getText());
+		}
+		
+		return settingsEqual;
+	}
+	
+	public void performDefaults(ISymbianSDK sdk) {
+		variantEdit.setText("");
+	}
+}
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/messages.properties	Thu Apr 15 15:32:21 2010 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ui/messages.properties	Thu Apr 15 17:45:19 2010 -0500
@@ -36,6 +36,12 @@
 CarbideBuildConfigurationsPage.Browse_Key_ToolTip=Look for the key in the file system.
 CarbideBuildConfigurationsPage.Additional_Options=Additional Options:
 CarbideBuildConfigurationsPage.Additional_Options_ToolTip=Any other command-line options you want to pass to signsis.
+
+CarbideBuildConfigurationsPage.SBSv2_Tab=SBSv2
+CarbideBuildConfigurationsPage.SBSv2_Tab_ToolTip=SBSv2 Build Configuration Specific Information
+CarbideSBSv2ConfigTab.VariantLabel=Apply variant to build configuration
+CarbideSBSv2ConfigTab.VariantLabel_ToolTip=Appends the text box value to the -c argument to construct a variant build configuration.
+
 CarbideBuildConfigurationsPage.Environment_Tab=Environment
 CarbideBuildConfigurationsPage.Environement_Tab_ToolTip=This tab controls how the Windows environment is set up for each build process invoked.
 CarbideBuildConfigurationsPage.Env_Vars_Group=Environment Variabes (Bold items override the default value)
@@ -98,8 +104,6 @@
 BuildSettingsUI.ExtraArgsLabelToolTip=Pass additional arguments to the sbs command-line.
 BuildSettingsUI.ExtraArgsText=Additional SBSv2 arguments
 BuildSettingsUI.ExtraArgsToolTipText=Add any extra arguments to be passed to sbs.bat here.
-BuildSettingsUI.AlliasAppendLabel=Append to Build Configuration
-BuildSettingsUI.AlliasAppendToolTipText=Appends the text to the default -c SBS parameter exactly as entered in the edit box.
 BuildSettingsUI.KeepGoingLabel=Keep going
 BuildSettingsUI.KeepGoingToolTip=Continue building, even if some build commands fail
 BuildSettingsUI.MakeEngineLabel=Make engine
--- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/SBSv2Utils.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/SBSv2Utils.java	Thu Apr 15 17:45:19 2010 -0500
@@ -410,4 +410,30 @@
     	return contexts; 
     }
     
+    /**
+	 * If a variant is defined and it changes the output directory, return the directory name.
+	 * For example, armv5_udeb.phone1 would return '.phone1'. If not variant that changes the release tree, then null
+	 * NOTE: This method deals with variant text applied to the end of a build alias, specifically testing for
+	 * variant text defined in the SBSv2 Build Configuration tab.
+	 * @return null if not a variant or the value to append to the platform release tree directory
+	 * @see com.nokia.carbide.cdt.internal.builder.ui#SBSv2BuildConfigTab
+	 */
+	public static String getVariantOutputDirModifier(String variantText) {
+		
+		String[] ignoredVariants =  { "generic", "tracecompiler", "trace", "test", "savespace", 
+				"bfc", "smp", "rvct2_2", "rvct4_0", "rvct3_1", "gcce4_3_2", "remove_freeze" };
+		
+		String newOutputDir = null;
+		if (variantText != null && variantText.length() > 1){
+			String[] variantTok = variantText.split("\\.");
+			if (variantTok.length > 1){
+				for (String ignore : ignoredVariants){
+					if (variantTok[1].toLowerCase().equals(ignore))
+						return null;
+				}
+				newOutputDir = "." + variantTok[1];
+			}
+		}
+		return newOutputDir;
+	}
 }
--- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/SymbianBuildContext.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/SymbianBuildContext.java	Thu Apr 15 17:45:19 2010 -0500
@@ -626,12 +626,4 @@
 	public String getSBSv2Alias() {  
 		return sbsv2Alias;
 	} 
-	
-	public void setSBSv2Alias(String sbsv2Alias) { 
-		this.sbsv2Alias = sbsv2Alias; 
-	}
-	
-	public void setDisplayString(String newDisplayName) { 
-		this.displayString = newDisplayName; 
-	}
 }
--- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/sdk/core/ISymbianBuildContext.java	Thu Apr 15 15:32:21 2010 -0500
+++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/sdk/core/ISymbianBuildContext.java	Thu Apr 15 17:45:19 2010 -0500
@@ -151,7 +151,4 @@
 	 */
 	public String getSBSv2Alias();
 	
-	public void setSBSv2Alias(String newAlias);
-	
-	public void setDisplayString(String newDisplayName);
 }