diff --git a/src/plugins/debugger/debuggeritem.cpp b/src/plugins/debugger/debuggeritem.cpp index 0b59099c8e8..7d2d7b2c88b 100644 --- a/src/plugins/debugger/debuggeritem.cpp +++ b/src/plugins/debugger/debuggeritem.cpp @@ -31,6 +31,7 @@ #include "debuggerkitinformation.h" #include "debuggerkitconfigwidget.h" #include "debuggeroptionspage.h" +#include "debuggerprotocol.h" #include #include @@ -50,6 +51,7 @@ static const char DEBUGGER_INFORMATION_ID[] = "Id"; static const char DEBUGGER_INFORMATION_ENGINETYPE[] = "EngineType"; static const char DEBUGGER_INFORMATION_AUTODETECTED[] = "AutoDetected"; static const char DEBUGGER_INFORMATION_AUTODETECTION_SOURCE[] = "AutoDetectionSource"; +static const char DEBUGGER_INFORMATION_VERSION[] = "Version"; static const char DEBUGGER_INFORMATION_ABIS[] = "Abis"; namespace Debugger { @@ -78,6 +80,7 @@ DebuggerItem::DebuggerItem(const QVariantMap &data) m_displayName = data.value(QLatin1String(DEBUGGER_INFORMATION_DISPLAYNAME)).toString(); m_isAutoDetected = data.value(QLatin1String(DEBUGGER_INFORMATION_AUTODETECTED), false).toBool(); m_autoDetectionSource = data.value(QLatin1String(DEBUGGER_INFORMATION_AUTODETECTION_SOURCE)).toString(); + m_version = data.value(QLatin1String(DEBUGGER_INFORMATION_VERSION)).toString(); m_engineType = DebuggerEngineType(data.value(QLatin1String(DEBUGGER_INFORMATION_ENGINETYPE), static_cast(NoEngineType)).toInt()); @@ -122,6 +125,16 @@ void DebuggerItem::reinitializeFromFile() // Fallback. m_abis = Abi::abisOfBinary(m_command); // FIXME: Wrong. } + + // Version + QString all = QString::fromUtf8(ba); + bool isMacGdb, isQnxGdb; + int version = 0, buildVersion = 0; + Debugger::Internal::extractGdbVersion(all, + &version, &buildVersion, &isMacGdb, &isQnxGdb); + if (version) + m_version = QString::fromLatin1("%1.%2.%3") + .arg(version / 10000).arg((version / 100) % 100).arg(version % 100); return; } if (ba.contains("lldb") || ba.startsWith("LLDB")) { @@ -190,6 +203,7 @@ QVariantMap DebuggerItem::toMap() const data.insert(QLatin1String(DEBUGGER_INFORMATION_ENGINETYPE), int(m_engineType)); data.insert(QLatin1String(DEBUGGER_INFORMATION_AUTODETECTED), m_isAutoDetected); data.insert(QLatin1String(DEBUGGER_INFORMATION_AUTODETECTION_SOURCE), m_autoDetectionSource); + data.insert(QLatin1String(DEBUGGER_INFORMATION_VERSION), m_version); data.insert(QLatin1String(DEBUGGER_INFORMATION_ABIS), abiNames()); return data; } @@ -214,6 +228,16 @@ void DebuggerItem::setAutoDetected(bool isAutoDetected) m_isAutoDetected = isAutoDetected; } +QString DebuggerItem::version() const +{ + return m_version; +} + +void DebuggerItem::setVersion(const QString &version) +{ + m_version = version; +} + void DebuggerItem::setAutoDetectionSource(const QString &autoDetectionSource) { m_autoDetectionSource = autoDetectionSource; diff --git a/src/plugins/debugger/debuggeritem.h b/src/plugins/debugger/debuggeritem.h index fbe9d335ba7..aa81d77b809 100644 --- a/src/plugins/debugger/debuggeritem.h +++ b/src/plugins/debugger/debuggeritem.h @@ -81,6 +81,9 @@ public: bool isAutoDetected() const { return m_isAutoDetected; } void setAutoDetected(bool isAutoDetected); + QString version() const; + void setVersion(const QString &version); + QString autoDetectionSource() const { return m_autoDetectionSource; } void setAutoDetectionSource(const QString &autoDetectionSource); @@ -105,6 +108,7 @@ private: Utils::FileName m_command; bool m_isAutoDetected; QString m_autoDetectionSource; + QString m_version; QList m_abis; friend class Internal::DebuggerItemConfigWidget; diff --git a/src/plugins/debugger/debuggeroptionspage.cpp b/src/plugins/debugger/debuggeroptionspage.cpp index d216517bd39..edfabf90ea9 100644 --- a/src/plugins/debugger/debuggeroptionspage.cpp +++ b/src/plugins/debugger/debuggeroptionspage.cpp @@ -77,6 +77,10 @@ DebuggerItemConfigWidget::DebuggerItemConfigWidget(DebuggerItemModel *model) : m_cdbLabel->setTextInteractionFlags(Qt::TextBrowserInteraction); m_cdbLabel->setOpenExternalLinks(true); + m_versionLabel = new QLineEdit(this); + m_versionLabel->setPlaceholderText(tr("Unknown")); + m_versionLabel->setEnabled(false); + m_abis = new QLineEdit(this); m_abis->setEnabled(false); @@ -87,6 +91,7 @@ DebuggerItemConfigWidget::DebuggerItemConfigWidget(DebuggerItemModel *model) : formLayout->addRow(m_cdbLabel); formLayout->addRow(new QLabel(tr("Path:")), m_binaryChooser); formLayout->addRow(new QLabel(tr("ABIs:")), m_abis); + formLayout->addRow(new QLabel(tr("Version:")), m_versionLabel); connect(m_binaryChooser, SIGNAL(changed(QString)), this, SLOT(binaryPathHasChanged())); } @@ -102,12 +107,12 @@ DebuggerItem DebuggerItemConfigWidget::item() const item.setAutoDetected(m_autodetected); QList abiList; foreach (const QString &a, m_abis->text().split(QRegExp(QLatin1String("[^A-Za-z0-9-_]+")))) { - ProjectExplorer::Abi abi(a); if (a.isNull()) continue; abiList << a; } item.setAbis(abiList); + item.setVersion(m_versionLabel->text()); item.setEngineType(m_engineType); return item; } @@ -132,6 +137,7 @@ void DebuggerItemConfigWidget::handleCommandChange() = DebuggerItemManager::findByCommand(m_binaryChooser->fileName()); if (existing) { setAbis(existing->abiNames()); + m_versionLabel->setText(existing->version()); m_engineType = existing->engineType(); } else { QFileInfo fi = QFileInfo(m_binaryChooser->path()); @@ -139,9 +145,11 @@ void DebuggerItemConfigWidget::handleCommandChange() DebuggerItem tmp = item(); tmp.reinitializeFromFile(); setAbis(tmp.abiNames()); + m_versionLabel->setText(tmp.version()); m_engineType = tmp.engineType(); } else { setAbis(QStringList()); + m_versionLabel->setText(QString()); m_engineType = NoEngineType; } } @@ -181,7 +189,7 @@ void DebuggerItemConfigWidget::setItem(const DebuggerItem &item) m_cdbLabel->setText(text); m_cdbLabel->setVisible(!text.isEmpty()); m_binaryChooser->setCommandVersionArguments(QStringList(versionCommand)); - + m_versionLabel->setText(item.version()); setAbis(item.abiNames()); m_engineType = item.engineType(); m_id = item.id(); diff --git a/src/plugins/debugger/debuggeroptionspage.h b/src/plugins/debugger/debuggeroptionspage.h index a3f482fa27f..c56650a4c3b 100644 --- a/src/plugins/debugger/debuggeroptionspage.h +++ b/src/plugins/debugger/debuggeroptionspage.h @@ -82,6 +82,7 @@ private: QLineEdit *m_displayNameLineEdit; QLabel *m_cdbLabel; + QLineEdit *m_versionLabel; Utils::PathChooser *m_binaryChooser; QLineEdit *m_abis; DebuggerItemModel *m_model;