Debugger: Display parsed gdb version in build&run debugger list

Change-Id: Ie7ec35f2f282f7f5ed527253c64c19e2b9347b18
Reviewed-by: hjk <hjk121@nokiamail.com>
This commit is contained in:
hjk
2014-06-23 17:59:27 +02:00
parent fa19530c57
commit 33e8c02aef
4 changed files with 39 additions and 2 deletions

View File

@@ -31,6 +31,7 @@
#include "debuggerkitinformation.h"
#include "debuggerkitconfigwidget.h"
#include "debuggeroptionspage.h"
#include "debuggerprotocol.h"
#include <projectexplorer/abi.h>
#include <utils/fileutils.h>
@@ -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<int>(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;

View File

@@ -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<ProjectExplorer::Abi> m_abis;
friend class Internal::DebuggerItemConfigWidget;

View File

@@ -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<ProjectExplorer::Abi> 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();

View File

@@ -82,6 +82,7 @@ private:
QLineEdit *m_displayNameLineEdit;
QLabel *m_cdbLabel;
QLineEdit *m_versionLabel;
Utils::PathChooser *m_binaryChooser;
QLineEdit *m_abis;
DebuggerItemModel *m_model;