core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/model/SBSv1BuildInfo.java
branchC3_BUILDER_WORK
changeset 1462 b38491fd06da
parent 1434 79471fd1fd69
child 1479 a654857ddb87
equal deleted inserted replaced
1460:26f585ac8a88 1462:b38491fd06da
    12 */
    12 */
    13 
    13 
    14 package com.nokia.carbide.cpp.internal.sdk.core.model;
    14 package com.nokia.carbide.cpp.internal.sdk.core.model;
    15 
    15 
    16 import java.io.File;
    16 import java.io.File;
       
    17 import java.io.FileReader;
    17 import java.io.IOException;
    18 import java.io.IOException;
    18 import java.net.URL;
    19 import java.io.Reader;
    19 import java.util.ArrayList;
    20 import java.util.ArrayList;
    20 import java.util.Collections;
    21 import java.util.Collections;
    21 import java.util.Date;
    22 import java.util.HashMap;
    22 import java.util.Iterator;
    23 import java.util.Iterator;
    23 import java.util.List;
    24 import java.util.List;
       
    25 import java.util.Map;
    24 import java.util.Set;
    26 import java.util.Set;
       
    27 import java.util.regex.Matcher;
    25 
    28 
    26 import org.eclipse.core.runtime.IPath;
    29 import org.eclipse.core.runtime.IPath;
    27 import org.eclipse.core.runtime.Path;
    30 import org.eclipse.core.runtime.Path;
    28 import org.osgi.framework.Version;
       
    29 
    31 
    30 import com.nokia.carbide.cpp.internal.api.sdk.BuildContextSBSv1;
    32 import com.nokia.carbide.cpp.internal.api.sdk.BuildContextSBSv1;
    31 import com.nokia.carbide.cpp.internal.api.sdk.BuildPlat;
    33 import com.nokia.carbide.cpp.internal.api.sdk.BuildPlat;
    32 import com.nokia.carbide.cpp.internal.api.sdk.ISBSv1BuildInfo;
    34 import com.nokia.carbide.cpp.internal.api.sdk.ISBSv1BuildInfo;
    33 import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils;
    35 import com.nokia.carbide.cpp.internal.api.sdk.SBSv2Utils;
    34 import com.nokia.carbide.cpp.internal.sdk.core.gen.Devices.DefaultType;
       
    35 import com.nokia.carbide.cpp.internal.sdk.core.gen.Devices.DeviceType;
       
    36 import com.nokia.carbide.cpp.sdk.core.IBSFCatalog;
    36 import com.nokia.carbide.cpp.sdk.core.IBSFCatalog;
    37 import com.nokia.carbide.cpp.sdk.core.IBSFPlatform;
    37 import com.nokia.carbide.cpp.sdk.core.IBSFPlatform;
    38 import com.nokia.carbide.cpp.sdk.core.ISBVCatalog;
    38 import com.nokia.carbide.cpp.sdk.core.ISBVCatalog;
    39 import com.nokia.carbide.cpp.sdk.core.ISBVPlatform;
    39 import com.nokia.carbide.cpp.sdk.core.ISBVPlatform;
    40 import com.nokia.carbide.cpp.sdk.core.ISDKManager;
    40 import com.nokia.carbide.cpp.sdk.core.ISDKManager;
    41 import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
    41 import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
    42 import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
    42 import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
    43 import com.nokia.carbide.cpp.sdk.core.ISymbianSDKFeatures;
    43 import com.nokia.carbide.cpp.sdk.core.ISymbianSDKFeatures;
    44 import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
    44 import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
       
    45 import com.nokia.cpp.internal.api.utils.core.PathUtils;
    45 
    46 
    46 /**
    47 /**
    47  * SBSv1 specific build information.
    48  * SBSv1 specific build information.
    48  *
    49  *
    49  */
    50  */
    50 public class SBSv1BuildInfo implements ISBSv1BuildInfo {
    51 public class SBSv1BuildInfo implements ISBSv1BuildInfo {
    51 
    52 
    52 	private Date createDate;
    53 	private ISymbianSDK sdk;
    53 	private File licenseFile;
       
    54 	private File prefixFile;
       
    55 	private Version sdkVersion;
       
    56 	private String sdkOSBranch;
       
    57 	private String sdkDescription;
       
    58 	private String publisherName;
       
    59 	private URL publisherURL;
       
    60 	private IBSFCatalog bsfCatalog;
    54 	private IBSFCatalog bsfCatalog;
    61 	private ISBVCatalog sbvCatalog;
    55 	private ISBVCatalog sbvCatalog;
       
    56 	private boolean wasScanned = false;
    62 	private List<ISymbianBuildContext> binaryVariantContextList = new ArrayList<ISymbianBuildContext>(0);
    57 	private List<ISymbianBuildContext> binaryVariantContextList = new ArrayList<ISymbianBuildContext>(0);
    63 	private List<ISymbianBuildContext> bsfContextList = new ArrayList<ISymbianBuildContext>(0);
    58 	private List<ISymbianBuildContext> bsfContextList = new ArrayList<ISymbianBuildContext>(0);
    64 
    59 	private Map<String, List<String>> cachedPlatformMacros = new HashMap<String, List<String>>();
    65 	public List<ISymbianBuildContext> getFilteredBuildConfigurations(ISymbianSDK sdk) {
    60 
    66 		// This is probably a bug, but the filtering only uses SBSv1 preferences if SBSv1 is enabled...
    61 	public SBSv1BuildInfo(ISymbianSDK sdk) {
    67 		List<ISymbianBuildContext> filteredContexts;
    62 		this.sdk = sdk;
    68 		if (SBSv2Utils.enableSBSv1Support()) {
    63 	}
    69 			filteredContexts = getSBSv1FilteredBuildConfigurations(sdk);
    64 
    70 		} else {
    65 	public void clearPlatformMacros() {
    71 			// be optimistic in this case... SBSv3? ;)
    66 		cachedPlatformMacros.clear();
    72 			filteredContexts = getAllBuildConfigurations(sdk);
    67 	}
    73 		}
    68 
    74 		return filteredContexts;
    69 	public List<String> getAvailablePlatforms() {
       
    70 		ISDKManager sdkMgr = SDKCorePlugin.getSDKManager();
       
    71 		return sdkMgr.getSymbianMacroStore().getSupportedPlatforms(((SymbianSDK)sdk).getOSVersion(), "", getBSFCatalog());
    75 	}
    72 	}
    76 
    73 
    77 	@SuppressWarnings("rawtypes")
    74 	@SuppressWarnings("rawtypes")
    78 	public List<ISymbianBuildContext> getAllBuildConfigurations(ISymbianSDK sdk) {
    75 	public List<ISymbianBuildContext> getAllBuildConfigurations() {
    79 		Set sdkFeatures = sdk.getSupportedFeatures();
    76 		Set sdkFeatures = sdk.getSupportedFeatures();
    80 		List<ISymbianBuildContext> buildTargets = new ArrayList<ISymbianBuildContext>();
    77 		List<ISymbianBuildContext> buildTargets = new ArrayList<ISymbianBuildContext>();
    81 		
    78 		
    82 		// note that this gets variant platforms but not regular BSF's
    79 		// note that this gets variant platforms but not regular BSF's
    83 		List <String>buildPlats =  getAvailablePlatforms(sdk);
    80 		List <String>buildPlats =  getAvailablePlatforms();
    84 		
    81 		
    85 		if (buildPlats.size() == 0){
    82 		if (buildPlats.size() == 0){
    86 			return Collections.emptyList();
    83 			return Collections.emptyList();
    87 		}
    84 		}
    88 		// TODO: Hard code build context hack
    85 		// TODO: Hard code build context hack
   106 			buildTargets.add(new BuildContextSBSv1(sdk, currPlat, ISymbianBuildContext.RELEASE_TARGET));
   103 			buildTargets.add(new BuildContextSBSv1(sdk, currPlat, ISymbianBuildContext.RELEASE_TARGET));
   107 		}
   104 		}
   108 		
   105 		
   109 		ISDKManager sdkMgr = SDKCorePlugin.getSDKManager();
   106 		ISDKManager sdkMgr = SDKCorePlugin.getSDKManager();
   110 		if (sdkMgr.getBSFScannerEnabled()){
   107 		if (sdkMgr.getBSFScannerEnabled()){
   111 			buildTargets.addAll(getBSFPlatformContexts(sdk));
   108 			buildTargets.addAll(getBSFPlatformContexts());
   112 			buildTargets.addAll(getBinaryVariationPlatformContexts(sdk)); // Symbian Binary Variation (.var)
   109 			buildTargets.addAll(getBinaryVariationPlatformContexts()); // Symbian Binary Variation (.var)
   113 		}
   110 		}
   114 		
   111 		
   115 		return buildTargets;
   112 		return buildTargets;
   116 	}
   113 	}
   117 
   114 
   118 	public List<String> getPlatformMacros(ISymbianSDK sdk, String platform) {
   115 	public IBSFCatalog getBSFCatalog() {
   119 		if (sdk instanceof SymbianSDK) {
   116 		synchronized (sdk) {
   120 			return ((SymbianSDK)sdk).getPlatformMacros(platform);
   117 			if (bsfCatalog == null) {
   121 		}
   118 				bsfCatalog = BSFCatalogFactory.createCatalog(sdk);
   122 		return null;
   119 			}
   123 	}
   120 		}
   124 
   121 		return bsfCatalog;
   125 	public List<String> getVendorSDKMacros(ISymbianSDK sdk) {
   122 	}
   126 		ISDKManager sdkMgr = SDKCorePlugin.getSDKManager();
   123 
   127 		return sdkMgr.getSymbianMacroStore().getVendorMacros(getSDKVersion(sdk), getName(sdk));
   124 	public List<ISymbianBuildContext> getFilteredBuildConfigurations() {
   128 	}
   125 		// This is probably a bug, but the filtering only uses SBSv1 preferences if SBSv1 is enabled...
   129 
   126 		List<ISymbianBuildContext> filteredContexts;
   130 	public List<String> getAvailablePlatforms(ISymbianSDK sdk) {
   127 		if (SBSv2Utils.enableSBSv1Support()) {
   131 		ISDKManager sdkMgr = SDKCorePlugin.getSDKManager();
   128 			filteredContexts = getSBSv1FilteredBuildConfigurations();
   132 		return sdkMgr.getSymbianMacroStore().getSupportedPlatforms(((SymbianSDK)sdk).getOSVersion(), getSDKOSBranch(sdk), getBSFCatalog(sdk));
   129 		} else {
   133 	}
   130 			// be optimistic in this case... SBSv3? ;)
   134 
   131 			filteredContexts = getAllBuildConfigurations();
   135 	public String getName(ISymbianSDK sdk) {
   132 		}
   136 		if (sdk instanceof SymbianSDK) {
   133 		return filteredContexts;
   137 			DeviceType deviceEntry = ((SymbianSDK)sdk).getDeviceEntry();
   134 	}
   138 			if (deviceEntry != null) {
   135 
   139 				return deviceEntry.getName();
   136 	public List<String> getPlatformMacros(String platform) {
   140 			}
   137 		List<String> platformMacros = cachedPlatformMacros.get(platform.toUpperCase());
   141 		}
   138 		if (platformMacros == null) {
   142 		return "";
   139 			synchronized (cachedPlatformMacros) {
   143 	}
   140 				IBSFCatalog bsfCatalog = getBSFCatalog();
   144 
   141 				ISDKManager sdkMgr = SDKCorePlugin.getSDKManager();
   145 	public String getVendor(ISymbianSDK sdk) {
   142 				platformMacros = sdkMgr.getSymbianMacroStore().getPlatformMacros(sdk.getOSVersion(), "", bsfCatalog, platform);
   146 		String[] parts = getName(sdk).split("\\.");
   143 				cachedPlatformMacros.put(platform.toUpperCase(), platformMacros);
   147 		if (parts.length == 3)
   144 			}
   148 			return parts[1];
   145 		}
   149 		
   146 		return platformMacros;
   150 		return "";
   147 	}
   151 	}
   148 
   152 
   149 	/**
   153 	public String getFamily(ISymbianSDK sdk) {
   150 	 * Get the full path to the prefix file defined under \epoc32\tools\variant\variant.cfg
   154 		String[] parts = getName(sdk).split("\\.");
   151 	 * @return A path object, or null if the variant.cfg does not exist. This routine does not check to see if the returned path exists.
   155 		if (parts.length == 3){
   152 	 */
   156 			if (getSDKVersion(sdk).getMajor() == 5 && getName(sdk).equalsIgnoreCase(NOKIA_SF_SDK_NAME)){
   153 	public IPath getPrefixFromVariantCfg(){
   157 				// A vendor of "symbian" and SDK major version 5 is the same as prior naming for "com.nokia.s60" & 5th Edition.
   154 		File epocRoot = new File(sdk.getEPOCROOT());
   158 				// Return "s60" so that project template generation continues to work as it's a S60 5th ed. SDK. 
   155 		File variantCfg;
   159 				return ISBSv1BuildInfo.S60_FAMILY_ID;
   156 		variantCfg = new File(epocRoot, SymbianSDK.SPP_VARIANT_CFG_FILE);
   160 			} else {
   157 		if (!variantCfg.exists()) {
   161 				return parts[2];
   158 			variantCfg = new File(epocRoot, SymbianSDK.VARIANT_CFG_FILE);
   162 			}
   159 			if (!variantCfg.exists())
   163 		}
   160 				return null;
   164 		
   161 		}
   165 		return "";
   162 		
   166 	}
   163 		String variantDir = null;
   167 
   164 		String variantFile = null;
   168 	public Version getSDKVersion(ISymbianSDK sdk) {
   165 		try {
   169 		if (sdkVersion == null){
   166 			char[] cbuf = new char[(int) variantCfg.length()];
   170 			return new Version("0.0");
   167 			Reader reader = new FileReader(variantCfg);
   171 		}
   168 			reader.read(cbuf);
   172 		return sdkVersion;
   169 			reader.close();
   173 	}
   170 			String[] lines = new String(cbuf).split("\r\n|\r|\n");
   174 
   171 			for (int i = 0; i < lines.length; i++) {
   175 	public File getPrefixFile(ISymbianSDK sdk) {
   172 				// skip comments and blank lines
   176 		return prefixFile;
   173 				String line = SymbianSDK.removeComments(lines[i]);
   177 	}
   174 				if (line.matches("\\s*#.*") || line.trim().length() == 0) 
   178 
   175 					continue;
   179 	public IPath getToolsPath(ISymbianSDK sdk) {
   176 				
   180 		String epocRoot = sdk.getEPOCROOT();
   177 				// parse the variant line, which is an EPOCROOT-relative
   181 		if (epocRoot.length() > 0) {
   178 				// path to a bldvariant.hrh file
   182 			IPath epoc32ToolsPath = new Path(epocRoot).append("epoc32/tools");
   179 				Matcher matcher = SymbianSDK.VARIANT_HRH_LINE_PATTERN.matcher(line);
   183 			// try to canonicalize it so it matches actual file system case
   180 				if (matcher.matches()) {
   184 			try {
   181 					variantDir = matcher.group(1);
   185 				epoc32ToolsPath = new Path(epoc32ToolsPath.toFile().getCanonicalPath());
   182 					variantFile = matcher.group(3); 
   186 			} catch (IOException e) {
   183 					File variantFullPathFile = new File(epocRoot, variantDir + File.separator + variantFile);
   187 			}
   184 					IPath variantFilePath = new Path(PathUtils.convertPathToUnix(variantFullPathFile.getAbsolutePath()));
   188 			return epoc32ToolsPath;
   185 					return variantFilePath;
   189 		}
   186 				}
   190 		return null;
   187 			}
   191 	}
   188 		} catch (IOException e) {
   192 
   189 		}
   193 	public IPath getReleaseRoot(ISymbianSDK sdk) {
   190 		
   194 		String epocRoot = sdk.getEPOCROOT();
   191 		return null; // can't find the file...
   195 		if (epocRoot.length() > 0) {
   192 	}
   196 			IPath epoc32RelPath = new Path(epocRoot).append("epoc32/release");
   193 
   197 			// try to canonicalize it so it matches actual file system case
   194 	public ISBVCatalog getSBVCatalog() {
   198 			try {
   195 		synchronized (sdk) {
   199 				epoc32RelPath = new Path(epoc32RelPath.toFile().getCanonicalPath());
   196 			if (sbvCatalog == null) {
   200 			} catch (IOException e) {
   197 				sbvCatalog = SBVCatalogFactory.createCatalog(sdk);
   201 			}
   198 			}
   202 			return epoc32RelPath;
   199 		}
   203 		}
   200 		return sbvCatalog;
   204 		return null;
   201 	}
   205 	}
   202 
   206 
   203 	public List<String> getTargetTypeMacros(String targettype) {
   207 	public IPath getIncludePath(ISymbianSDK sdk) {
       
   208 		String epocRoot = sdk.getEPOCROOT();
       
   209 		if (epocRoot.length() > 0) {
       
   210 			IPath epoc32IncPath = new Path(epocRoot).append("epoc32/include");
       
   211 			// try to canonicalize it so it matches actual file system case
       
   212 			try {
       
   213 				epoc32IncPath = new Path(epoc32IncPath.toFile().getCanonicalPath());
       
   214 			} catch (IOException e) {
       
   215 			}
       
   216 			return epoc32IncPath;
       
   217 		}
       
   218 		return null;
       
   219 	}
       
   220 
       
   221 	public String getSDKDescription(ISymbianSDK sdk) {
       
   222 		if (sdkDescription == null){
       
   223 			return "";
       
   224 		}
       
   225 		return sdkDescription;
       
   226 	}
       
   227 
       
   228 	public Date getCreationDate(ISymbianSDK sdk) {
       
   229 		return createDate;
       
   230 	}
       
   231 
       
   232 	public File getLicenseFile(ISymbianSDK sdk) {
       
   233 		return licenseFile;
       
   234 	}
       
   235 
       
   236 	public String getSDKOSBranch(ISymbianSDK sdk) {
       
   237 		if (sdkOSBranch == null){
       
   238 			return "";
       
   239 		}
       
   240 		return sdkOSBranch;
       
   241 	}
       
   242 
       
   243 	public URL getPublisherURL(ISymbianSDK sdk) {
       
   244 		return publisherURL;
       
   245 	}
       
   246 
       
   247 	public String getPublisherName(ISymbianSDK sdk) {
       
   248 		return publisherName;
       
   249 	}
       
   250 
       
   251 	public List<String> getTargetTypeMacros(ISymbianSDK sdk, String targettype) {
       
   252 		// this is based on \epoc32\tools\trgtype.pm which changes from
   204 		// this is based on \epoc32\tools\trgtype.pm which changes from
   253 		// OS version to OS version, but largely remains constant with
   205 		// OS version to OS version, but largely remains constant with
   254 		// regards to the basic type.
   206 		// regards to the basic type.
   255 		List<String> macros = new ArrayList<String>();
   207 		List<String> macros = new ArrayList<String>();
   256 		
   208 		
   273 			macros.add("__DLL__");
   225 			macros.add("__DLL__");
   274 		}
   226 		}
   275 		return macros;
   227 		return macros;
   276 	}
   228 	}
   277 
   229 
   278 	public IBSFCatalog getBSFCatalog(ISymbianSDK sdk) {
   230 	public List<String> getVendorSDKMacros() {
   279 		synchronized (sdk) {
   231 		ISDKManager sdkMgr = SDKCorePlugin.getSDKManager();
   280 			if (bsfCatalog == null) {
   232 		return sdkMgr.getSymbianMacroStore().getVendorMacros(sdk.getSDKVersion(), sdk.getName());
   281 				bsfCatalog = BSFCatalogFactory.createCatalog(sdk);
   233 	}
   282 			}
   234 
   283 		}
   235 	public boolean isS60() {
   284 		return bsfCatalog;
   236 		return sdk.getFamily().equals(ISBSv1BuildInfo.S60_FAMILY_ID)
   285 	}
   237 			|| sdk.getFamily().equals(ISBSv1BuildInfo.SERIES60_FAMILY_ID);
   286 
   238 	}
   287 	public ISBVCatalog getSBVCatalog(ISymbianSDK sdk) {
   239 
   288 		synchronized (sdk) {
   240 	public boolean isPreviouslyScanned() {
   289 			if (sbvCatalog == null) {
   241 		return wasScanned;
   290 				sbvCatalog = SBVCatalogFactory.createCatalog(sdk);
   242 	}
   291 			}
   243 
   292 		}
   244 	public void setPreviouslyScanned(boolean wasScanned) {
   293 		return sbvCatalog;
   245 		this.wasScanned = wasScanned;
   294 	}
   246 	}
   295 
   247 
   296 	public boolean isDefaultSDK(ISymbianSDK sdk) {
   248 	protected List<ISymbianBuildContext> getBinaryVariationPlatformContexts() {
   297 		if (sdk instanceof SymbianSDK) {
       
   298 			DeviceType deviceEntry = ((SymbianSDK)sdk).getDeviceEntry();
       
   299 			if (deviceEntry == null) {
       
   300 				return false;
       
   301 			}
       
   302 			if (deviceEntry.getDefault().equals(DefaultType.YES_LITERAL)){
       
   303 				return true;
       
   304 			}
       
   305 		}
       
   306 		return false;
       
   307 	}
       
   308 
       
   309 	public boolean isS60(ISymbianSDK sdk) {
       
   310 		return getFamily(sdk).equals(ISBSv1BuildInfo.S60_FAMILY_ID)
       
   311 			|| getFamily(sdk).equals(ISBSv1BuildInfo.SERIES60_FAMILY_ID);
       
   312 	}
       
   313 
       
   314 	public boolean isPreviouslyScanned(ISymbianSDK sdk) {
       
   315 		if (sdk instanceof SymbianSDK) {
       
   316 			return ((SymbianSDK)sdk).isPreviouslyScanned();
       
   317 		}
       
   318 		return true;
       
   319 	}
       
   320 
       
   321 	public void setLicenseFile(ISymbianSDK sdk, File licenseFile) {
       
   322 		 this.licenseFile = licenseFile;
       
   323 	}
       
   324 
       
   325 	public void setPrefixFile(ISymbianSDK sdk, IPath prefixFile) {
       
   326 		this.prefixFile = new File(prefixFile.toOSString());
       
   327 	}
       
   328 
       
   329 	public void setSDKVersion(ISymbianSDK sdk, Version sdkVers) {
       
   330 		sdkVersion = sdkVers;
       
   331 	}
       
   332 
       
   333 	public void setPublisherURL(ISymbianSDK sdk, URL pubURL) {
       
   334 		publisherURL = pubURL;
       
   335 	}
       
   336 
       
   337 	public void setCreateDate(ISymbianSDK sdk, Date createDate) {
       
   338 		this.createDate = createDate;
       
   339 	}
       
   340 
       
   341 	public void setOSSDKBranch(ISymbianSDK sdk, String branch) {
       
   342 		sdkOSBranch = branch;
       
   343 	}
       
   344 
       
   345 	public void setSDKDescription(ISymbianSDK sdk, String descr) {
       
   346 		sdkDescription = descr;
       
   347 	}
       
   348 
       
   349 	public void setPublisherName(ISymbianSDK sdk, String pubName) {
       
   350 		publisherName = pubName;
       
   351 	}
       
   352 
       
   353 	public void setName(ISymbianSDK sdk, String name) {
       
   354 		if (sdk instanceof SymbianSDK) {
       
   355 			DeviceType deviceEntry = ((SymbianSDK)sdk).getDeviceEntry();
       
   356 			if (deviceEntry != null) {
       
   357 				deviceEntry.setName(name);
       
   358 			}
       
   359 		}
       
   360 	}
       
   361 
       
   362 	public void setIsDefaultSDK(ISymbianSDK sdk, boolean isDefault) {
       
   363 		if (sdk instanceof SymbianSDK) {
       
   364 			DeviceType deviceEntry = ((SymbianSDK)sdk).getDeviceEntry();
       
   365 			if (deviceEntry != null) {
       
   366 				if (isDefault){
       
   367 					deviceEntry.setDefault(DefaultType.YES_LITERAL);
       
   368 				} else {
       
   369 					deviceEntry.setDefault(DefaultType.NO_LITERAL);
       
   370 				}
       
   371 			}
       
   372 		}
       
   373 	}
       
   374 
       
   375 	public void setPreviouslyScanned(ISymbianSDK sdk, boolean wasScanned) {
       
   376 		if (sdk instanceof SymbianSDK) {
       
   377 			((SymbianSDK)sdk).setPreviouslyScanned(wasScanned);
       
   378 		}
       
   379 	}
       
   380 
       
   381 	protected List<ISymbianBuildContext> getBinaryVariationPlatformContexts(ISymbianSDK sdk) {
       
   382 		synchronized (binaryVariantContextList) {
   249 		synchronized (binaryVariantContextList) {
   383 			if (!binaryVariantContextList.isEmpty()){
   250 			if (!binaryVariantContextList.isEmpty()){
   384 				return binaryVariantContextList;
   251 				return binaryVariantContextList;
   385 			}
   252 			}
   386 			
   253 			
   387 			ISBVCatalog catalog = getSBVCatalog(sdk);
   254 			ISBVCatalog catalog = getSBVCatalog();
   388 			for (ISBVPlatform sbvPlatform : catalog.getPlatforms()) {
   255 			for (ISBVPlatform sbvPlatform : catalog.getPlatforms()) {
   389 				// Currently only variation of ARMV5 is supported... So just hard code the variated platform
   256 				// Currently only variation of ARMV5 is supported... So just hard code the variated platform
   390 				// Only add the build platform if it's not virtual.
   257 				// Only add the build platform if it's not virtual.
   391 				if (!sbvPlatform.isVirtual()){
   258 				if (!sbvPlatform.isVirtual()){
   392 					// TODO: Hard code build context hack
   259 					// TODO: Hard code build context hack
   397 			}
   264 			}
   398 		}
   265 		}
   399 		return binaryVariantContextList;
   266 		return binaryVariantContextList;
   400 	}
   267 	}
   401 
   268 
   402 	protected List<ISymbianBuildContext> getBSFPlatformContexts(ISymbianSDK sdk) {
   269 	protected List<ISymbianBuildContext> getBSFPlatformContexts() {
   403 		synchronized (bsfContextList) {
   270 		synchronized (bsfContextList) {
   404 			if (!bsfContextList.isEmpty()){
   271 			if (!bsfContextList.isEmpty()){
   405 				return bsfContextList;
   272 				return bsfContextList;
   406 			}
   273 			}
   407 			
   274 			
   408 			IBSFCatalog catalog = getBSFCatalog(sdk);
   275 			IBSFCatalog catalog = getBSFCatalog();
   409 			for (IBSFPlatform platform : catalog.getPlatforms()) {
   276 			for (IBSFPlatform platform : catalog.getPlatforms()) {
   410 				// only return non-variant style BSF's.  see boog #4533 for details.
   277 				// only return non-variant style BSF's.  see boog #4533 for details.
   411 				if (!platform.isVariant()) {
   278 				if (!platform.isVariant()) {
   412 					// TODO: Hard code build context hack
   279 					// TODO: Hard code build context hack
   413 					bsfContextList.add(new BuildContextSBSv1(sdk, platform.getName().toUpperCase(), ISymbianBuildContext.DEBUG_TARGET));
   280 					bsfContextList.add(new BuildContextSBSv1(sdk, platform.getName().toUpperCase(), ISymbianBuildContext.DEBUG_TARGET));
   418 		}
   285 		}
   419 		return bsfContextList;
   286 		return bsfContextList;
   420 	}
   287 	}
   421 
   288 
   422 	@SuppressWarnings("rawtypes")
   289 	@SuppressWarnings("rawtypes")
   423 	protected List<ISymbianBuildContext> getSBSv1FilteredBuildConfigurations(ISymbianSDK sdk) {
   290 	protected List<ISymbianBuildContext> getSBSv1FilteredBuildConfigurations() {
   424 		Set sdkFeatures = sdk.getSupportedFeatures();
   291 		Set sdkFeatures = sdk.getSupportedFeatures();
   425 		List<ISymbianBuildContext> buildContexts =  getAllBuildConfigurations(sdk);
   292 		List<ISymbianBuildContext> buildContexts =  getAllBuildConfigurations();
   426 		if (buildContexts.size() == 0){
   293 		if (buildContexts.size() == 0){
   427 			return Collections.emptyList();
   294 			return Collections.emptyList();
   428 		}
   295 		}
   429 		
   296 		
   430 		ISDKManager sdkMgr = SDKCorePlugin.getSDKManager();
   297 		ISDKManager sdkMgr = SDKCorePlugin.getSDKManager();