merge commit RCL_2_4
authortimkelly
Tue, 27 Apr 2010 09:07:48 -0500
branchRCL_2_4
changeset 1292 9b50c8036532
parent 1291 f1114f700e65 (diff)
parent 1289 7c4a4568b9c5 (current diff)
child 1295 5e60bd109662
merge commit
--- a/qt/com.nokia.carbide.cpp.qt.core/src/com/nokia/carbide/cpp/internal/qt/core/QtSDKUtils.java	Mon Apr 26 20:49:35 2010 -0500
+++ b/qt/com.nokia.carbide.cpp.qt.core/src/com/nokia/carbide/cpp/internal/qt/core/QtSDKUtils.java	Tue Apr 27 09:07:48 2010 -0500
@@ -53,14 +53,16 @@
 		public String incPath;
 	}
 	
-	/** Qt bin folder for internal SDK installs - epocroot relative */
-	private static final String QT_SDK_BIN_PATH = "epoc32/tools/qt";
+	/** Qt bin folder for internal SDK installs - epocroot relative - the deprecated internal location */
+	private static final String OLD_QT_SDK_BIN_PATH = "epoc32/tools/qt";
+	/** Qt bin folder for internal SDK installs - epocroot relative - the new internal location so that qmake is on the normal developer path with a subst'ed kit */
+	private static final String QT_SDK_PATH = "epoc32/tools/";
 	/** Qt include folder for internal SDK installs - epocroot relative */
 	private static final String QT_SDK_INC_PATH = "epoc32/include/mw";
 	
 	/** qt subfolder under QT_INC_FOLDER */
-	private static final String QT_FOLDER = "qt";
-	private static final String QT_MKSPECS = "mkspecs";
+	//private static final String QT_FOLDER = "qt";
+	//private static final String QT_MKSPECS = "mkspecs";
 	private static final String QT_QMAKE_WIN32 = "qmake.exe";
 	private static final String QT_QMAKE_UNIX = "qmake";
 	
@@ -72,24 +74,14 @@
 	private static final String QTVERSION = "com.trolltech.qtcppproject.properties.qtversion";
 	
 	/**
-	 * For the given Symbian SDK, test whether or not it qualifies for have Qt internally built.
+	 * For the given Symbian SDK, test whether or not it has Qt internally built.
+	 * Qualification relies on locating the qmake executable and the Qt include directory
 	 * @param sdk - The Symbian SDK or source base to test
 	 * @return - true if Qt is internally installed
 	 */
 	static private boolean isQtInternallyInstalled(ISymbianSDK sdk){
-		
-		String epocRoot = sdk.getEPOCROOT();
-		if (new File(epocRoot + QT_SDK_BIN_PATH).exists() && 
-			new File(epocRoot + QT_SDK_INC_PATH).exists() &&
-			new File(epocRoot + QT_SDK_INC_PATH + File.separator + QT_FOLDER).exists() &&
-			new File(epocRoot + QT_SDK_BIN_PATH + File.separator + QT_MKSPECS).exists() ) 
-		{
-			if (HostOS.IS_WIN32 && new File(epocRoot + QT_SDK_BIN_PATH + File.separator + QT_QMAKE_WIN32).exists()){
-				return true;
-			} else if (HostOS.IS_UNIX && new File(epocRoot + QT_SDK_BIN_PATH + File.separator + QT_QMAKE_UNIX).exists()){
-				return true;
-			}
-		}
+		if (getQmakeInstallationPath(sdk) != null && getQtIncludeDirectory(sdk) != null)
+			return true;
 		
 		return false;
 	}
@@ -102,7 +94,7 @@
 	static public String getQtSDKNameForSymbianSDK(ISymbianSDK sdk){
 		
 		String epocRoot = sdk.getEPOCROOT();
-		File qtBinPath = new File (epocRoot + QT_SDK_BIN_PATH);
+		File qtBinPath = new File (epocRoot + OLD_QT_SDK_BIN_PATH);
 		File qtIncPath = new File (epocRoot + QT_SDK_INC_PATH);
 		
 		refreshQtStoredSDKs();
@@ -133,9 +125,7 @@
 		
 		refreshQtStoredSDKs();
 		if ((getQtSDKNameForSymbianSDK(sdk) == null) && isQtInternallyInstalled(sdk)){
-			IPath binPath = new Path(sdk.getEPOCROOT() + QT_SDK_BIN_PATH);
-			IPath incPath = new Path(sdk.getEPOCROOT() + QT_SDK_INC_PATH);
-			addQtSDK(sdk.getUniqueId(), binPath, incPath, makeDefault);
+			addQtSDK(sdk.getUniqueId(), getQmakeInstallationPath(sdk), getQtIncludeDirectory(sdk), makeDefault);
 		}
 	}
 	
@@ -227,6 +217,38 @@
 		return project.getPersistentProperty(new QualifiedName("", QTVERSION));
 	}
 	
+	/**
+	 * Retrieve the directory where qmake resides for a given SDK.
+	 * @param sdk - The sdk to search
+	 * @return The IPath where qmake resides, null if qmake cannot be found
+	 */
+	public static IPath getQmakeInstallationPath(ISymbianSDK sdk){
+		String epocRoot = sdk.getEPOCROOT();
+		String qmakeExecutable = HostOS.IS_WIN32 ? QT_QMAKE_WIN32 : QT_QMAKE_UNIX;
+		
+		// Test the new location first, where /epoc32/tools/ is normally on the %PATH%
+		// else test the old location
+		if (new Path(epocRoot).append(QT_SDK_PATH).append(qmakeExecutable).toFile().exists())
+			return new Path(epocRoot + QT_SDK_PATH);
+		else if (new Path(epocRoot).append(OLD_QT_SDK_BIN_PATH).append(qmakeExecutable).toFile().exists())
+			return new Path(epocRoot).append(OLD_QT_SDK_BIN_PATH);
+
+		return null;
+	}
+	
+	/**
+	 * Retrieve the qt include directory for a given SDK.
+	 * @param sdk - The sdk to search
+	 * @return The IPath if the include directory exists, null if the Qt include directory cannot be found
+	 */
+	public static IPath getQtIncludeDirectory(ISymbianSDK sdk){
+		String epocRoot = sdk.getEPOCROOT();
+		if (new File(epocRoot + QT_SDK_INC_PATH).exists() )
+			return new Path(epocRoot + QT_SDK_INC_PATH);
+			
+		return null;
+	}
+	
 }