core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/SymbianBuildContext.java
changeset 1882 e8d8fb31697d
parent 1878 6507baa94ab8
parent 1881 fccb2e8f8b9b
child 1883 16954591245c
child 1886 d61921bcf8f3
--- a/core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/api/sdk/SymbianBuildContext.java	Tue Aug 24 16:42:58 2010 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,433 +0,0 @@
-/*
-* Copyright (c) 2009 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.
-*
-*/
-package com.nokia.carbide.cpp.internal.api.sdk;
-
-import java.io.File;
-import java.util.*;
-
-import org.eclipse.core.runtime.IPath;
-import org.osgi.framework.Version;
-
-import com.nokia.carbide.cpp.epoc.engine.preprocessor.*;
-import com.nokia.carbide.cpp.internal.sdk.core.model.SymbianMissingSDKFactory;
-import com.nokia.carbide.cpp.sdk.core.*;
-
-public class SymbianBuildContext implements ISymbianBuildContext {
-
-	private String sdkId;
-	private String platform;
-	private String target;
-	private String displayString = null;
-	private String sbsv2Alias = null;
-	
-	private static String EMULATOR_DISPLAY_TEXT = "Emulator"; //$NON-NLS-1$
-	private static String PHONE_DISPLAY_TEXT = "Phone"; //$NON-NLS-1$
-	private static String DEBUG_DISPLAY_TEXT = "Debug"; //$NON-NLS-1$
-	private static String RELEASE_DISPLAY_TEXT = "Release"; //$NON-NLS-1$
-	private static String SPACE_DISPLAY_TEXT = " "; //$NON-NLS-1$
-	private static String SDK_NOT_INSTALLED = "SDK not installed"; //$NON-NLS-1$
-	
-	// a copy of bad SDK default to fall back
-	private static ISymbianSDK fallbackForBadSdk = SymbianMissingSDKFactory.createInstance("dummy_ID"); //$NON-NLS-1$
-	
-	public SymbianBuildContext(ISymbianSDK theSDK, String thePlatform, String theTarget) {
-		sdkId = theSDK.getUniqueId();
-		platform = thePlatform.toUpperCase();
-		target = theTarget.toUpperCase();
-		
-		getDisplayString();
-	}
-	
-	public SymbianBuildContext(ISymbianSDK theSDK, String thePlatform, String theTarget, String theSBSv2Alias) {
-		sdkId = theSDK.getUniqueId();
-		platform = thePlatform.toUpperCase();
-		target = theTarget.toUpperCase();
-		sbsv2Alias = theSBSv2Alias;
-		
-		getDisplayString();
-	}
-
-	
-	@Override
-	public int hashCode() {
-		final int prime = 31;
-		int result = 1;
-		result = prime * result
-				+ ((platform == null) ? 0 : platform.hashCode());
-		result = prime * result + ((getSDK() == null) ? 0 : getSDK().getEPOCROOT().hashCode());
-		result = prime * result + ((target == null) ? 0 : target.hashCode());
-		return result;
-	}
-
-
-	@Override
-	public boolean equals(Object obj) {
-		if (this == obj)
-			return true;
-		if (obj == null)
-			return false;
-		if (!(obj instanceof SymbianBuildContext))
-			return false;
-		final SymbianBuildContext other = (SymbianBuildContext) obj;
-		if (platform == null) {
-			if (other.platform != null)
-				return false;
-		} else if (!platform.equals(other.platform))
-			return false;
-		if (getSDK() == null) {
-			if (other.getSDK() != null)
-				return false;
-		} else if (!getSDK().getEPOCROOT().equals(other.getSDK().getEPOCROOT()))
-			return false;
-		if (target == null) {
-			if (other.target != null)
-				return false;
-		} else if (!target.equals(other.target)) {
-			return false;
-		} else if (sbsv2Alias!= null && !sbsv2Alias.equals(other.sbsv2Alias)) {
-			return false;
-		}
-		return true;
-	}
-
-
-	public ISymbianSDK getSDK() {
-		
-		ISymbianSDK sdk = SDKCorePlugin.getSDKManager().getSDK(sdkId, true);
-		if (sdk == null){
-			sdk = fallbackForBadSdk;
-		}
-		
-		return sdk;
-	}
-
-	public String getPlatformString() {
-		return platform.toUpperCase();
-	}
-
-	public String getTargetString() {
-		return target.toUpperCase();
-	}
-
-	public String getDisplayString() {
-		if (displayString == null) {
-			// in the form Emulation Debug (WINSCW) [S60_3rd_MR] or
-			// Phone Release (GCCE) [S60_3rd_MR]
-			if (platform.compareTo(ISymbianBuildContext.EMULATOR_PLATFORM) == 0) {
-				displayString = EMULATOR_DISPLAY_TEXT;
-			} else {
-				displayString = PHONE_DISPLAY_TEXT;
-			}
-			
-			if (target.compareTo(ISymbianBuildContext.DEBUG_TARGET) == 0) {
-				displayString = displayString + SPACE_DISPLAY_TEXT + DEBUG_DISPLAY_TEXT;
-			} else {
-				displayString = displayString + SPACE_DISPLAY_TEXT + RELEASE_DISPLAY_TEXT;
-			}
-			
-			String basePlatform;
-			if (sbsv2Alias != null)
-				basePlatform = sbsv2Alias;
-			else
-				basePlatform = platform;
-			
-			displayString = displayString + " (" + basePlatform + ") [" + getSDK().getUniqueId() + "]"; //$NON-NLS-1$
-		}
-		return displayString;
-	}
-	
-	public static ISymbianBuildContext getBuildContextFromDisplayName(String displayName) {
-		if (isValidConfigName(displayName)) {
-			String sdkId = getSDKIDFromConfigName(displayName);
-			ISymbianSDK sdk = SDKCorePlugin.getSDKManager().getSDK(sdkId, true);
-			if (sdk == null) {
-				// add a dummy should a build context ask for a removed SDK
-				sdk = SDKManagerInternalAPI.addMissingSdk(sdkId);
-			}
-						
-			return new SymbianBuildContext(sdk, 
-						getPlatformFromBuildConfigName(displayName), 
-						getTargetFromBuildConfigName(displayName),
-						getSBSv2AliasFromConfigName(displayName));
-		}
-		return new SymbianBuildContext(fallbackForBadSdk, SDK_NOT_INSTALLED, SDK_NOT_INSTALLED);
-	}
-
-	/**
-	 * See if the build configuration is an SBSv2 alias, and if so get the build-able alias name 
-	 * @param displayName
-	 * @return The full SBSv2 alias that can be used with -c, otherwise null if not SBSv2
-	 */
-	private static String getSBSv2AliasFromConfigName(String displayName) {
-		int indexBegin = displayName.indexOf("(");  //$NON-NLS-1$
-		int indexEnd = displayName.indexOf(")");  //$NON-NLS-1$
-		if (indexBegin > 0 && indexEnd > 0){
-			String configPart =  displayName.substring(indexBegin+1, indexEnd);
-			if (configPart.split("_").length > 1){
-				return configPart;
-			}
-		} 
-		
-		return null;
-	}
-
-	private static String getPlatformFromBuildConfigName(String configName) {
-		String[] tokens = configName.split(SPACE_DISPLAY_TEXT);
-		String sdkIdToken = tokens[2];
-		if (sdkIdToken.contains("_")){
-			sdkIdToken = sdkIdToken.substring(1, sdkIdToken.length()-1);
-			String[] aliasTokens = sdkIdToken.split("_");
-			return aliasTokens[0];
-		} else {
-			return sdkIdToken.substring(1, sdkIdToken.length()-1);
-		}
-		
-	}
-
-	public static String getSDKIDFromConfigName(String configName) {
-		int indexBegin = configName.indexOf("[");  //$NON-NLS-1$
-		int indexEnd = configName.indexOf("]");  //$NON-NLS-1$
-		if (indexBegin > 0 && indexEnd > 0){
-			return configName.substring(indexBegin+1, indexEnd);
-		} else {
-			return ""; //$NON-NLS-1$
-		}
-	}
-
-	private static String getTargetFromBuildConfigName(String configName) {
-		String[] tokens = configName.split(SPACE_DISPLAY_TEXT);
-		if (tokens[1].compareTo(DEBUG_DISPLAY_TEXT) == 0) {
-			return ISymbianBuildContext.DEBUG_TARGET;
-		} else {
-			return ISymbianBuildContext.RELEASE_TARGET;
-		}
-	}
-
-	private static boolean isValidConfigName(String configName) {
-		// <Phone | Emulator> <Target> (<Platform>) [<SDK ID>]
-		if (configName != null && !configName.equals("")) { //$NON-NLS-1$
-			String[] tokens = configName.split(SPACE_DISPLAY_TEXT);
-			if (tokens.length >= 4) {
-				if (tokens[0].compareTo(EMULATOR_DISPLAY_TEXT) == 0 || tokens[0].compareTo(PHONE_DISPLAY_TEXT) == 0) {
-					if (tokens[1].compareTo(DEBUG_DISPLAY_TEXT) == 0 || tokens[1].compareTo(RELEASE_DISPLAY_TEXT) == 0) {
-						if (tokens[2].matches("(.*)")) { //$NON-NLS-1$
-							if (tokens[3].matches("\\[.*")) { //$NON-NLS-1$
-								return true;
-							}
-						}
-					}
-				}
-			}
-		}
-		return false;
-	}
-	
-	public String toString() {
-		return getDisplayString();
-	}
-	
-	public String getDefaultDefFileDirectoryName(boolean isASSP) {
-		// 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) {
-		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;
-	}
-
-	public IPath getCompilerPrefixFile() {
-		if (platform.equals(GCCE_PLATFORM) || 
-				(sbsv2Alias != null && sbsv2Alias.toUpperCase().contains(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() {
-		return getSDK().getIncludePath().append("gcce/gcce.h"); //$NON-NLS-1$
-	}
-
-	private IPath getRVCTPrefixFilePath() {
-		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) {
-		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$
-	}
-
-	public List<IDefine> getVariantHRHDefines() {
-
-		return getCachedData().getVariantHRHDefines();
-	}
-
-	public List<File> getPrefixFileIncludes() {
-		return getCachedData().getPrefixFileIncludes();
-	}
-
-
-	public List<IDefine> getCompilerMacros() {
-		// 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);
-	}
-
-
-	public String getBuildVariationName() {
-		String varName = "";
-		
-		String[] tokens = getPlatformString().split("\\.");
-		if (tokens.length == 2){
-			varName = tokens[1];
-		}
-		
-		return varName;
-	}
-
-
-	public boolean isSymbianBinaryVariation() {
-		if (getPlatformString().split("\\.").length == 2){
-			return true;
-		} else {
-			return false;
-		}
-	}
-
-	/**
-	 * 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() {
-		return SymbianBuildContextDataCache.getCache(this);
-	}
-	
-
-	public String getBasePlatformForVariation() {
-		String plat = "";
-		
-		String[] tokens = getPlatformString().split("\\.");
-		if (tokens.length == 2){
-			plat = tokens[0];
-		} else {
-			return platform;
-		}
-		
-		return plat;
-	}
-
-
-	/**
-	 * Get the list of #include paths detected for this context.
-	 * @return List or <code>null</code>
-	 */
-	public List<File> getCachedSystemIncludePaths() {
-		return getCachedData().getSystemIncludePaths();
-	}
-
-	public String getSBSv2Alias() {
-		return sbsv2Alias;
-	}
-}