fix bug 11131
authortimkelly
Tue, 27 Apr 2010 09:53:16 -0500
changeset 1293 be3d8ca5bafe
parent 1288 7f5308d16da0
child 1294 76455ae5d5fd
fix bug 11131
qt/com.nokia.carbide.cpp.qt.core/src/com/nokia/carbide/cpp/internal/qt/core/QtSDKUtils.java
--- a/qt/com.nokia.carbide.cpp.qt.core/src/com/nokia/carbide/cpp/internal/qt/core/QtSDKUtils.java	Mon Apr 26 20:37:32 2010 -0500
+++ b/qt/com.nokia.carbide.cpp.qt.core/src/com/nokia/carbide/cpp/internal/qt/core/QtSDKUtils.java	Tue Apr 27 09:53:16 2010 -0500
@@ -53,8 +53,10 @@
 		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";
 	
@@ -72,24 +74,15 @@
 	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,8 +95,8 @@
 	static public String getQtSDKNameForSymbianSDK(ISymbianSDK sdk){
 		
 		String epocRoot = sdk.getEPOCROOT();
-		File qtBinPath = new File (epocRoot + QT_SDK_BIN_PATH);
-		File qtIncPath = new File (epocRoot + QT_SDK_INC_PATH);
+		File qtBinPath = new Path(epocRoot).append(OLD_QT_SDK_BIN_PATH).toFile();
+		File qtIncPath = new Path(epocRoot).append(QT_SDK_INC_PATH).toFile();
 		
 		refreshQtStoredSDKs();
 		
@@ -133,9 +126,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 +218,37 @@
 		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;
+	}
 }