core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/BuildContextSBSv2.java
branchC3_BUILDER_WORK
changeset 1419 ab555eecf681
parent 1418 8ca7cf978139
child 1420 9dfc6e3dc4b9
--- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/BuildContextSBSv2.java	Tue Jun 01 15:23:53 2010 -0500
+++ b/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/BuildContextSBSv2.java	Wed Jun 02 12:02:03 2010 -0500
@@ -1,13 +1,19 @@
 package com.nokia.carbide.cpp.internal.api.sdk;
 
 import java.io.File;
+import java.util.Collections;
 import java.util.List;
 
 import org.eclipse.core.runtime.IPath;
+import org.osgi.framework.Version;
 
 import com.nokia.carbide.cpp.epoc.engine.preprocessor.IDefine;
+import com.nokia.carbide.cpp.sdk.core.IBSFCatalog;
+import com.nokia.carbide.cpp.sdk.core.IBSFPlatform;
+import com.nokia.carbide.cpp.sdk.core.IRVCTToolChainInfo;
 import com.nokia.carbide.cpp.sdk.core.ISBSv2BuildContext;
 import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
 
 public class BuildContextSBSv2 implements ISBSv2BuildContext {
 	
@@ -42,49 +48,168 @@
 
 	@Override
 	public String getDisplayString() {
-		// TODO Auto-generated method stub
-		return sbsv2Alias;
+		// TODO We will need to cobble up proper display names
+		return "(" + sbsv2Alias + ") " + "[" + sdk.getUniqueId() + "]" ;
 	}
 
 	@Override
 	public String getDefaultDefFileDirectoryName(boolean isASSP) {
-		// TODO Auto-generated method stub
+		// TOOD: THIS IS ABLD STUFF. isASSP does not belong with Raptor
+		// TODO: How the ASSP option affects the path?
+
+		String dirName = getDefFileDirectoryNameForPlatform(platform);
+		if (dirName == null) {
+			// check BSF's
+			IBSFCatalog catalog = getSDK().getBSFCatalog();
+	    	if (catalog != null) {
+	    		for (IBSFPlatform plat : catalog.getPlatforms()) {
+	    			if (plat.getName().compareToIgnoreCase(platform) == 0) {
+	    				String mainPlatform = catalog.getReleasePlatform(platform);
+	    				if (mainPlatform != null) {
+	    					dirName = getDefFileDirectoryNameForPlatform(mainPlatform);
+	    					if (dirName == null || dirName.length() < 1) {
+	    						// fallback - all BSF's should be EABI anyway
+			    				return "EABI"; //$NON-NLS-1$
+	    					}
+	    				}
+	    			}
+	    		}
+	    	}
+		}
+		
+		if (dirName == null) {
+			// fallback for unknown cases
+			dirName = platform;
+		}
+		
+		return dirName;
+	}
+
+	private String getDefFileDirectoryNameForPlatform(String platform) {
+		// TODO: This is still ABLD stype stuff
+		if (platform.equals(EMULATOR_PLATFORM)) {
+			return "BWINS"; //$NON-NLS-1$
+		} else if (platform.equals(ARMV5_PLATFORM)
+					|| platform.equals(ARMV5_ABIV2_PLATFORM)
+					|| platform.equals(ARMV6_PLATFORM)
+					|| platform.equals(ARMV6_ABIV2_PLATFORM)
+					|| platform.equals(GCCE_PLATFORM)) {
+			return "EABI"; //$NON-NLS-1$
+		}
 		return null;
 	}
-
+	
 	@Override
 	public IPath getCompilerPrefixFile() {
-		// TODO Auto-generated method stub
+		// TODO: This is ABLD hard-code mechanism. Should be able to get from Raptor query mechanism
+		if (platform.equals(GCCE_PLATFORM)) {
+			return getGCCEPrefixFilePath();
+		} else if (platform.equals(ARMV5_PLATFORM)
+					|| platform.equals(ARMV5_ABIV2_PLATFORM)
+					|| platform.equals(ARMV6_PLATFORM)
+					|| platform.equals(ARMV6_ABIV2_PLATFORM)) {
+			return getRVCTPrefixFilePath();
+		} else {
+			// check BSF's
+			IBSFCatalog catalog = getSDK().getBSFCatalog();
+	    	if (catalog != null) {
+	    		for (IBSFPlatform plat : catalog.getPlatforms()) {
+	    			if (plat.getName().compareToIgnoreCase(platform) == 0) {
+	    				String mainPlatform = catalog.getReleasePlatform(platform);
+	    				if (mainPlatform != null) {
+	    					if (mainPlatform.equals(GCCE_PLATFORM)) {
+	    						return getGCCEPrefixFilePath();
+	    					} else if (mainPlatform.equals(ARMV5_PLATFORM) 
+	    								|| mainPlatform.equals(ARMV5_ABIV2_PLATFORM)
+	    								|| mainPlatform.equals(ARMV6_PLATFORM)
+	    								|| mainPlatform.equals(ARMV6_ABIV2_PLATFORM)) {
+	    						return getRVCTPrefixFilePath();
+	    					} else {
+	    						// fallback - all BSF's should be EABI anyway
+	    						return getRVCTPrefixFilePath();
+	    					}
+	    				}
+	    			}
+	    		}
+	    	}
+		}
+
+		// fallback for WINSCW, MSVC, etc.
 		return null;
 	}
+	
+	private IPath getGCCEPrefixFilePath() {
+		// TOOD: Should get from Raptor query when available
+		return getSDK().getIncludePath().append("gcce/gcce.h"); //$NON-NLS-1$
+	}
 
+	private IPath getRVCTPrefixFilePath() {
+		// TODO: Should get this from query mechanism
+		IRVCTToolChainInfo[] installedRVCTTools = SDKCorePlugin.getSDKManager().getInstalledRVCTTools();
+		// use default in case tools aren't installed
+		String rvctFragment = "rvct2_2"; //$NON-NLS-1$
+		if (installedRVCTTools.length > 0) {
+			rvctFragment = getRVCTFragment(installedRVCTTools[0]);
+		}
+		IPath prefixFilePath = getSDK().getIncludePath().append(rvctFragment).append(rvctFragment + ".h"); //$NON-NLS-1$
+		if (prefixFilePath.toFile().exists()){
+			return prefixFilePath;
+		} else {
+			// SF kits around SF^3 started to only use a single rvct.h header instead of specific versioned ones
+			// based on the default installation
+			return getSDK().getIncludePath().append("rvct").append("rvct" + ".h");
+		}
+	}
+	
+	private String getRVCTFragment(IRVCTToolChainInfo info) {
+		// TODO: This should not be needed when raptor query is complete
+		int major = 0, minor = 0;
+		if (info != null) {
+			Version rvctToolsVersion = info.getRvctToolsVersion();
+			if (rvctToolsVersion != null) {
+				major = info.getRvctToolsVersion().getMajor();
+				minor = info.getRvctToolsVersion().getMinor();
+			}
+		}
+		return "rvct" + major + "_" + minor; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+	
 	@Override
 	public List<IDefine> getVariantHRHDefines() {
-		// TODO Auto-generated method stub
-		return null;
+		// TODO: Should get from raptor query
+		return getCachedData().getVariantHRHDefines();
 	}
 
 	@Override
 	public List<File> getPrefixFileIncludes() {
-		// TODO Auto-generated method stub
-		return null;
+		// TODO: Should get from raptor query
+		return getCachedData().getPrefixFileIncludes();
 	}
 
 	@Override
 	public List<IDefine> getCompilerMacros() {
-		// TODO Auto-generated method stub
-		return null;
+		// TODO: Should get from raptor query
+		// we parse the compiler prefix file to gather macros.  this can be time consuming so do it
+		// once and cache the values.  only reset the cache when the compiler prefix has changed.
+		
+		IPath prefixFile = getCompilerPrefixFile();
+		if (prefixFile == null) {
+			return Collections.emptyList();
+		}
+		
+		return getCachedData().getCompilerMacros(prefixFile);
 	}
 
 	@Override
 	public String getBuildVariationName() {
-		// TODO Auto-generated method stub
-		return null;
+		// TODO: This should not be needed for Raptor
+		return "";
 	}
 
 	@Override
 	public boolean isSymbianBinaryVariation() {
-		// TODO Auto-generated method stub
+		// This should not be needed for Raptor. We do need a check
+		// in the MPP for the featurevariant keyword perhaps
 		return false;
 	}
 	
@@ -111,6 +236,24 @@
 		return sbsv2Alias;
 	}
 
+	/**
+	 * Get the cache holding the data that applies to this build context globally.
+	 * A build context is subclassed by CarbideBuildConfiguration, which has multiple
+	 * instances at runtime, thus, a SymbianBuildContext instance should not hold a cache itself.
+	 * @return cache, never <code>null</code>
+	 */
+	private SymbianBuildContextDataCache getCachedData() {
+		// TODO: Still need to consider this for SBSv2 refactoring / Raptor query
+		return SymbianBuildContextDataCache.getCache(this);
+	}
 	
+	/**
+	 * Get the list of #include paths detected for this context.
+	 * @return List or <code>null</code>
+	 */
+	public List<File> getCachedSystemIncludePaths() {
+		// TODO: Still need to consider this for SBSv2 refactoring / Raptor query
+		return getCachedData().getSystemIncludePaths();
+	}
 
 }