--- 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;
+ }
}