diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp index 3790d311d2d64f9ea10171489a61f87f5a907855..e1c009498be9d3456328fdd0a47ece61d7e19b8d 100644 --- a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.cpp @@ -36,15 +36,12 @@ using namespace ProjectExplorer; using namespace Qt4ProjectManager::Internal; -namespace { - const char *GCCE_COMMAND = "arm-none-symbianelf-gcc.exe"; -} - -GCCEToolChain::GCCEToolChain(S60Devices::Device device) - : GccToolChain(QLatin1String(GCCE_COMMAND)), +GCCEToolChain::GCCEToolChain(S60Devices::Device device, const QString &gcceCommand) + : GccToolChain(gcceCommand), m_deviceId(device.id), m_deviceName(device.name), - m_deviceRoot(device.epocRoot) + m_deviceRoot(device.epocRoot), + m_gcceCommand(gcceCommand) { } @@ -68,9 +65,9 @@ QList<HeaderPath> GCCEToolChain::systemHeaderPaths() void GCCEToolChain::addToEnvironment(ProjectExplorer::Environment &env) { - // TODO: do we need to set path to gcce? env.prependOrSetPath(QString("%1\\epoc32\\tools").arg(m_deviceRoot)); // e.g. make.exe env.prependOrSetPath(QString("%1\\epoc32\\gcc\\bin").arg(m_deviceRoot)); // e.g. gcc.exe + env.prependOrSetPath(QFileInfo(m_gcceCommand).absolutePath()); env.set("EPOCDEVICE", QString("%1:%2").arg(m_deviceId, m_deviceName)); env.set("EPOCROOT", S60Devices::cleanedRootPath(m_deviceRoot)); } diff --git a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h index 8b6bdc8dec5cbdff0a48f6efeb3eb2afc8fc9c3b..53cd0515c59db6045d8f97d55ba0f2756807641f 100644 --- a/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h +++ b/src/plugins/qt4projectmanager/qt-s60/gccetoolchain.h @@ -40,7 +40,7 @@ namespace Internal { class GCCEToolChain : public ProjectExplorer::GccToolChain { public: - GCCEToolChain(S60Devices::Device device); + GCCEToolChain(S60Devices::Device device, const QString &gcceCommand); QList<ProjectExplorer::HeaderPath> systemHeaderPaths(); void addToEnvironment(ProjectExplorer::Environment &env); ProjectExplorer::ToolChain::ToolChainType type() const; @@ -52,6 +52,7 @@ private: QString m_deviceId; QString m_deviceName; QString m_deviceRoot; + QString m_gcceCommand; }; } // namespace Internal diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp index c2fe7ac617719f23b7e9ca7c0c80fbb64693b95e..a45ebe44e27852f00e49f8bf62aab22773ad9c4c 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp @@ -46,15 +46,16 @@ #include <QtGui/QMainWindow> +namespace { + const char *GCCE_COMMAND = "arm-none-symbianelf-gcc.exe"; + const char *S60_AUTODETECTION_SOURCE = "QTS60"; +} + namespace Qt4ProjectManager { namespace Internal { S60Manager *S60Manager::m_instance = 0; -namespace { -static const char *S60_AUTODETECTION_SOURCE = "QTS60"; -} - // ======== Parametrizable Factory for RunControls, depending on the configuration // class and mode. @@ -201,7 +202,10 @@ ProjectExplorer::ToolChain *S60Manager::createWINSCWToolChain(const Qt4ProjectMa ProjectExplorer::ToolChain *S60Manager::createGCCEToolChain(const Qt4ProjectManager::QtVersion *version) const { - return new GCCEToolChain(deviceForQtVersion(version)); + ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment(); + env.prependOrSetPath(version->gcceDirectory()+"/bin"); + QString gcceCommandPath= env.searchInPath(GCCE_COMMAND); + return new GCCEToolChain(deviceForQtVersion(version), gcceCommandPath); } ProjectExplorer::ToolChain *S60Manager::createRVCTToolChain( @@ -238,5 +242,5 @@ S60Devices::Device S60Manager::deviceForQtVersion(const Qt4ProjectManager::QtVer return device; } -} -} +} // namespace internal +} // namespace qt4projectmanager diff --git a/src/plugins/qt4projectmanager/qtoptionspage.cpp b/src/plugins/qt4projectmanager/qtoptionspage.cpp index 0796dc44b9226f5be98c835265b11ef534264b6d..297ee8596275330ed04f5648141f8db7bae46a38 100644 --- a/src/plugins/qt4projectmanager/qtoptionspage.cpp +++ b/src/plugins/qt4projectmanager/qtoptionspage.cpp @@ -126,6 +126,8 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList<QtVersion *> ver m_ui->mwcPath->setPromptDialogTitle(tr("Select Carbide Install Directory")); m_ui->s60SDKPath->setExpectedKind(Utils::PathChooser::Directory); m_ui->s60SDKPath->setPromptDialogTitle(tr("Select S60 SDK Root")); + m_ui->gccePath->setExpectedKind(Utils::PathChooser::Directory); + m_ui->gccePath->setPromptDialogTitle(tr("Select the CSL Arm Toolchain (GCCE) Directory")); m_ui->addButton->setIcon(QIcon(Core::Constants::ICON_PLUS)); m_ui->delButton->setIcon(QIcon(Core::Constants::ICON_MINUS)); @@ -174,6 +176,8 @@ QtOptionsPageWidget::QtOptionsPageWidget(QWidget *parent, QList<QtVersion *> ver this, SLOT(updateCurrentMwcDirectory())); connect(m_ui->s60SDKPath, SIGNAL(changed(QString)), this, SLOT(updateCurrentS60SDKDirectory())); + connect(m_ui->gccePath, SIGNAL(changed(QString)), + this, SLOT(updateCurrentGcceDirectory())); #endif connect(m_ui->addButton, SIGNAL(clicked()), @@ -396,6 +400,7 @@ void QtOptionsPageWidget::updateState() m_ui->mingwPath->setEnabled(enabled); m_ui->mwcPath->setEnabled(enabled); m_ui->s60SDKPath->setEnabled(enabled && !isAutodetected); + m_ui->gccePath->setEnabled(enabled); const bool hasLog = enabled && !m_ui->qtdirList->currentItem()->data(2, Qt::UserRole).toString().isEmpty(); m_ui->showLogButton->setEnabled(hasLog); @@ -423,6 +428,8 @@ void QtOptionsPageWidget::makeS60Visible(bool visible) m_ui->mwcPath->setVisible(visible); m_ui->s60SDKLabel->setVisible(visible); m_ui->s60SDKPath->setVisible(visible); + m_ui->gcceLabel->setVisible(visible); + m_ui->gccePath->setVisible(visible); } void QtOptionsPageWidget::showEnvironmentPage(QTreeWidgetItem *item) @@ -472,6 +479,7 @@ void QtOptionsPageWidget::showEnvironmentPage(QTreeWidgetItem *item) 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()); #endif } else if (types.contains(ProjectExplorer::ToolChain::INVALID)) { makeMSVCVisible(false); @@ -698,6 +706,15 @@ void QtOptionsPageWidget::updateCurrentS60SDKDirectory() return; m_versions[currentItemIndex]->setS60SDKDirectory(m_ui->s60SDKPath->path()); } +void QtOptionsPageWidget::updateCurrentGcceDirectory() +{ + QTreeWidgetItem *currentItem = m_ui->qtdirList->currentItem(); + Q_ASSERT(currentItem); + int currentItemIndex = indexForTreeItem(currentItem); + if (currentItemIndex < 0) + return; + m_versions[currentItemIndex]->setGcceDirectory(m_ui->gccePath->path()); +} #endif QList<QSharedPointerQtVersion> QtOptionsPageWidget::versions() const diff --git a/src/plugins/qt4projectmanager/qtoptionspage.h b/src/plugins/qt4projectmanager/qtoptionspage.h index 4e1f2b49fe82f446ea9ec0385f2d24b46627a48e..834dff9b36f7443a8a5312b1096974ffd36d0b8f 100644 --- a/src/plugins/qt4projectmanager/qtoptionspage.h +++ b/src/plugins/qt4projectmanager/qtoptionspage.h @@ -121,6 +121,7 @@ private slots: #ifdef QTCREATOR_WITH_S60 void updateCurrentMwcDirectory(); void updateCurrentS60SDKDirectory(); + void updateCurrentGcceDirectory(); #endif void msvcVersionChanged(); void buildDebuggingHelper(); diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp index f28ec89eb0170ad21912253738e32bbaa60f7461..dbf52dd4ba2905e228d89d14dd6452e600435130 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -128,6 +128,7 @@ QtVersionManager::QtVersionManager() #ifdef QTCREATOR_WITH_S60 version->setMwcDirectory(s->value("MwcDirectory").toString()); version->setS60SDKDirectory(s->value("S60SDKDirectory").toString()); + version->setGcceDirectory(s->value("GcceDirectory").toString()); #endif m_versions.append(version); } @@ -265,6 +266,7 @@ void QtVersionManager::writeVersionsIntoSettings() #ifdef QTCREATOR_WITH_S60 s->setValue("MwcDirectory", version->mwcDirectory()); s->setValue("S60SDKDirectory", version->s60SDKDirectory()); + s->setValue("GcceDirectory", version->gcceDirectory()); #endif } s->endArray(); @@ -1239,6 +1241,16 @@ void QtVersion::setS60SDKDirectory(const QString &directory) { m_s60SDKDirectory = directory; } + +QString QtVersion::gcceDirectory() const +{ + return m_gcceDirectory; +} + +void QtVersion::setGcceDirectory(const QString &directory) +{ + m_gcceDirectory = directory; +} #endif QString QtVersion::mingwDirectory() const diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h index 0a5d0f97edf78ae53a1d15226be5b9612d1e2a0a..328f73d805fd1db5e5b7bc4969f21547e2d8de3e 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.h +++ b/src/plugins/qt4projectmanager/qtversionmanager.h @@ -88,6 +88,8 @@ public: void setMwcDirectory(const QString &directory); QString s60SDKDirectory() const; void setS60SDKDirectory(const QString &directory); + QString gcceDirectory() const; + void setGcceDirectory(const QString &directory); #endif QString mingwDirectory() const; void setMingwDirectory(const QString &directory); @@ -147,6 +149,7 @@ private: #ifdef QTCREATOR_WITH_S60 QString m_mwcDirectory; QString m_s60SDKDirectory; + QString m_gcceDirectory; #endif mutable bool m_mkspecUpToDate; diff --git a/src/plugins/qt4projectmanager/qtversionmanager.ui b/src/plugins/qt4projectmanager/qtversionmanager.ui index 849e526a58e613f1bd03d4c58f0ed86a430cd524..898125fa11a203d458c058b6b835872aeb5b4a61 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.ui +++ b/src/plugins/qt4projectmanager/qtversionmanager.ui @@ -100,7 +100,7 @@ p, li { white-space: pre-wrap; } </item> </layout> </item> - <item row="7" column="1"> + <item row="8" column="1"> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item> <widget class="QLabel" name="debuggingHelperStateLabel"> @@ -133,12 +133,6 @@ p, li { white-space: pre-wrap; } </item> <item row="0" column="0" colspan="2"> <widget class="QTreeWidget" name="qtdirList"> - <property name="minimumSize"> - <size> - <width>0</width> - <height>150</height> - </size> - </property> <property name="uniformRowHeights"> <bool>true</bool> </property> @@ -210,23 +204,33 @@ p, li { white-space: pre-wrap; } <widget class="Utils::PathChooser" name="s60SDKPath" native="true"/> </item> <item row="6" column="0"> + <widget class="QLabel" name="gcceLabel"> + <property name="text"> + <string>CLS/GCCE Directory:</string> + </property> + </widget> + </item> + <item row="6" column="1"> + <widget class="Utils::PathChooser" name="gccePath" native="true"/> + </item> + <item row="7" column="0"> <widget class="QLabel" name="mwcLabel"> <property name="text"> <string>Carbide Directory:</string> </property> </widget> </item> - <item row="6" column="1"> + <item row="7" column="1"> <widget class="Utils::PathChooser" name="mwcPath" native="true"/> </item> - <item row="7" column="0"> + <item row="8" column="0"> <widget class="QLabel" name="debuggingHelperLabel"> <property name="text"> <string>Debugging Helper:</string> </property> </widget> </item> - <item row="8" column="1"> + <item row="9" column="1"> <widget class="QLabel" name="errorLabel"> <property name="text"> <string/>