From eb91f0843f149ba988dc97fcf8ea0a60cb0715ac Mon Sep 17 00:00:00 2001
From: Tobias Hunger <tobias.hunger@nokia.com>
Date: Fri, 6 Aug 2010 16:05:44 +0200
Subject: [PATCH] Symbian: Improve support for sbsv2

 * Export SBS_GCCE<VERSION>BIN containing the path to the GCCE compiler
   used.
---
 .../qt-s60/gccetoolchain.cpp                  | 35 +++++++++++++++++++
 .../qt4projectmanager/qt-s60/gccetoolchain.h  |  2 ++
 2 files changed, 37 insertions(+)

diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp
index 274e91471ef..39dfd43a2b5 100644
--- a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp
@@ -33,6 +33,7 @@
 #include <utils/qtcassert.h>
 
 #include <QtCore/QDir>
+#include <QtCore/QProcess>
 #include <QtCore/QtDebug>
 
 enum { debug = 0 };
@@ -138,6 +139,9 @@ void GCCEToolChain::addToEnvironment(ProjectExplorer::Environment &env)
     default:
         break;
     }
+    QString version = gcceVersion();
+    version = version.remove(QLatin1Char('.'));
+    env.set(QString::fromLatin1("SBS_GCCE") + version + QLatin1String("BIN"), QDir::toNativeSeparators(m_gcceBinPath));
 }
 
 QString GCCEToolChain::makeCommand() const
@@ -154,3 +158,34 @@ bool GCCEToolChain::equals(ToolChain *otherIn) const
            && m_gcceBinPath == other->m_gcceBinPath
            && gcc() == other->gcc();
 }
+
+QString GCCEToolChain::gcceVersion() const
+{
+    if (m_gcceVersion.isEmpty()) {
+        QString command = gcceCommand(m_gcceBinPath);
+        if (command.isEmpty())
+            return QString();
+        QProcess gxx;
+        QStringList arguments;
+        arguments << QLatin1String("--version");
+        ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment();
+        env.set(QLatin1String("LC_ALL"), QLatin1String("C"));   //override current locale settings
+        gxx.setEnvironment(env.toStringList());
+        gxx.setReadChannelMode(QProcess::MergedChannels);
+        gxx.start(command, arguments);
+        gxx.closeWriteChannel();
+        gxx.waitForFinished();
+
+        QString line;
+        if (gxx.canReadLine()) {
+            line = gxx.readLine();
+            qDebug() << "GCCVersion:" << line;
+            QRegExp version("\\s((\\d+)\\.(\\d+)\\.(\\d+))\\s");
+            if (line.indexOf(version) >= -1) {
+                qDebug() << "    MATCHED!";
+                m_gcceVersion = version.cap(1);
+            }
+        }
+    }
+    return m_gcceVersion;
+}
diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h
index 791e384c51f..76694383e34 100644
--- a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h
+++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h
@@ -58,9 +58,11 @@ protected:
     virtual bool equals(ToolChain *other) const;
 
 private:
+    QString gcceVersion() const;
     const S60ToolChainMixin m_mixin;
     const ProjectExplorer::ToolChain::ToolChainType m_type;
     const QString m_gcceBinPath;
+    mutable QString m_gcceVersion;
 };
 
 } // namespace Internal
-- 
GitLab