From e5d3e04c6085008ed45339ad910e6a7e5503c164 Mon Sep 17 00:00:00 2001
From: con <qtc-committer@nokia.com>
Date: Fri, 12 Feb 2010 11:56:42 +0100
Subject: [PATCH] Also handle EPOCROOT and default device settings for Symbian
 devs.

---
 .../qt4projectmanager/qt-s60/s60devices.cpp     | 10 ++++++++++
 .../qt4projectmanager/qt-s60/s60devices.h       |  1 +
 .../qt4projectmanager/qt-s60/s60manager.cpp     | 17 +++++++++++++++--
 src/plugins/qt4projectmanager/qtoptionspage.cpp | 15 +++++++++------
 .../qt4projectmanager/qtversionmanager.cpp      |  6 +++---
 5 files changed, 38 insertions(+), 11 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devices.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devices.cpp
index 40135181aef..d675d2778af 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devices.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devices.cpp
@@ -300,6 +300,16 @@ S60Devices::Device S60Devices::deviceForEpocRoot(const QString &root) const
     return Device();
 }
 
+S60Devices::Device S60Devices::defaultDevice() const
+{
+    foreach (const S60Devices::Device &i, m_devices) {
+        if (i.isDefault) {
+            return i;
+        }
+    }
+    return Device();
+}
+
 QString S60Devices::cleanedRootPath(const QString &deviceRoot)
 {
     QString path = deviceRoot;
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devices.h b/src/plugins/qt4projectmanager/qt-s60/s60devices.h
index 895b89ce7b7..7bd9d03dd04 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devices.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devices.h
@@ -66,6 +66,7 @@ public:
     bool detectQtForDevices();
     Device deviceForId(const QString &id) const;
     Device deviceForEpocRoot(const QString &root) const;
+    Device defaultDevice() const;
 
     static QString cleanedRootPath(const QString &deviceRoot);
 signals:
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
index ec555019adb..e163b8f8944 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp
@@ -245,18 +245,31 @@ S60Devices::Device S60Manager::deviceForQtVersion(const Qt4ProjectManager::QtVer
     if (deviceId.isEmpty()) { // it's not an s60 autodetected version
         // try to find a device entry belonging to the root given in Qt prefs
         QString sdkRoot = version->s60SDKDirectory();
-        device = m_devices->deviceForEpocRoot(sdkRoot);
+        if (sdkRoot.isEmpty()) { // no sdk explicitly set in the preferences
+            // check if EPOCROOT is set and use that
+            QString epocRootEnv = QProcessEnvironment::systemEnvironment()
+                                  .value(QLatin1String("EPOCROOT"));
+            if (!epocRootEnv.isEmpty())
+                sdkRoot = QDir::fromNativeSeparators(epocRootEnv);
+        }
+        if (sdkRoot.isEmpty()) { // no sdk set via preference or EPOCROOT
+            // try default device
+            device = m_devices->defaultDevice();
+        } else {
+            device = m_devices->deviceForEpocRoot(sdkRoot);
+        }
         if (device.epocRoot.isEmpty()) { // no device found
             // check if we can construct a dummy one
             if (QFile::exists(QString::fromLatin1("%1/epoc32").arg(sdkRoot))) {
                 device.epocRoot = sdkRoot;
                 device.toolsRoot = device.epocRoot;
-                device.qt = QFileInfo(QFileInfo(version->qmakeCommand()).path()).path();
                 device.isDefault = false;
                 device.name = QString::fromLatin1("Manual");
                 device.id = QString::fromLatin1("Manual");
             }
         }
+        // override any Qt version that might be still autodetected
+        device.qt = QFileInfo(QFileInfo(version->qmakeCommand()).path()).path();
     } else {
         device = m_devices->deviceForId(deviceId);
     }
diff --git a/src/plugins/qt4projectmanager/qtoptionspage.cpp b/src/plugins/qt4projectmanager/qtoptionspage.cpp
index 2bda2880511..5f983952b72 100644
--- a/src/plugins/qt4projectmanager/qtoptionspage.cpp
+++ b/src/plugins/qt4projectmanager/qtoptionspage.cpp
@@ -492,9 +492,9 @@ void QtOptionsPageWidget::showEnvironmentPage(QTreeWidgetItem *item)
             makeMSVCVisible(false);
             makeMingwVisible(false);
             makeS60Visible(true);
-            m_ui->mwcPath->setPath(m_versions.at(index)->mwcDirectory());
-            m_ui->s60SDKPath->setPath(m_versions.at(index)->s60SDKDirectory());
-            m_ui->gccePath->setPath(m_versions.at(index)->gcceDirectory());
+            m_ui->mwcPath->setPath(QDir::toNativeSeparators(m_versions.at(index)->mwcDirectory()));
+            m_ui->s60SDKPath->setPath(QDir::toNativeSeparators(m_versions.at(index)->s60SDKDirectory()));
+            m_ui->gccePath->setPath(QDir::toNativeSeparators(m_versions.at(index)->gcceDirectory()));
         } else { //ProjectExplorer::ToolChain::GCC
             makeMSVCVisible(false);
             makeMingwVisible(false);
@@ -689,7 +689,8 @@ void QtOptionsPageWidget::updateCurrentMwcDirectory()
     int currentItemIndex = indexForTreeItem(currentItem);
     if (currentItemIndex < 0)
         return;
-    m_versions[currentItemIndex]->setMwcDirectory(m_ui->mwcPath->path());
+    m_versions[currentItemIndex]->setMwcDirectory(
+            QDir::fromNativeSeparators(m_ui->mwcPath->path()));
 }
 void QtOptionsPageWidget::updateCurrentS60SDKDirectory()
 {
@@ -698,7 +699,8 @@ void QtOptionsPageWidget::updateCurrentS60SDKDirectory()
     int currentItemIndex = indexForTreeItem(currentItem);
     if (currentItemIndex < 0)
         return;
-    m_versions[currentItemIndex]->setS60SDKDirectory(m_ui->s60SDKPath->path());
+    m_versions[currentItemIndex]->setS60SDKDirectory(
+            QDir::fromNativeSeparators(m_ui->s60SDKPath->path()));
 }
 void QtOptionsPageWidget::updateCurrentGcceDirectory()
 {
@@ -707,7 +709,8 @@ void QtOptionsPageWidget::updateCurrentGcceDirectory()
     int currentItemIndex = indexForTreeItem(currentItem);
     if (currentItemIndex < 0)
         return;
-    m_versions[currentItemIndex]->setGcceDirectory(m_ui->gccePath->path());
+    m_versions[currentItemIndex]->setGcceDirectory(
+            QDir::fromNativeSeparators(m_ui->gccePath->path()));
 }
 
 QList<QSharedPointerQtVersion> QtOptionsPageWidget::versions() const
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp
index 54499dac433..9d03dafddfa 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.cpp
+++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp
@@ -337,11 +337,11 @@ void QtVersionManager::addNewVersionsFromInstaller()
                 if (newVersionData.count() >= 3)
                     version->setMingwDirectory(newVersionData[2]);
                 if (newVersionData.count() >= 4)
-                    version->setS60SDKDirectory(newVersionData[3]);
+                    version->setS60SDKDirectory(QDir::fromNativeSeparators(newVersionData[3]));
                 if (newVersionData.count() >= 5)
-                    version->setGcceDirectory(newVersionData[4]);
+                    version->setGcceDirectory(QDir::fromNativeSeparators(newVersionData[4]));
                 if (newVersionData.count() >= 6)
-                    version->setMwcDirectory(newVersionData[5]);
+                    version->setMwcDirectory(QDir::fromNativeSeparators(newVersionData[5]));
 
                 bool versionWasAlreadyInList = false;
                 foreach(const QtVersion * const it, m_versions) {
-- 
GitLab