forked from qt-creator/qt-creator
ProjectExplorer: Use an alias for QList<Abi>
Change-Id: I69231c5974620ae30296bfc4e0ab41c900d95a3c Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -951,7 +951,7 @@ static QVariant findOrRegisterDebugger(ToolChain *tc)
|
|||||||
// check if the debugger is already registered, but ignoring the display name
|
// check if the debugger is already registered, but ignoring the display name
|
||||||
const Debugger::DebuggerItem *existing = Debugger::DebuggerItemManager::findByCommand(command);
|
const Debugger::DebuggerItem *existing = Debugger::DebuggerItemManager::findByCommand(command);
|
||||||
if (existing && existing->engineType() == Debugger::GdbEngineType && existing->isAutoDetected()
|
if (existing && existing->engineType() == Debugger::GdbEngineType && existing->isAutoDetected()
|
||||||
&& existing->abis() == QList<Abi>{tc->targetAbi()})
|
&& existing->abis() == Abis{tc->targetAbi()})
|
||||||
return existing->id();
|
return existing->id();
|
||||||
// debugger not found, register a new one
|
// debugger not found, register a new one
|
||||||
Debugger::DebuggerItem debugger;
|
Debugger::DebuggerItem debugger;
|
||||||
@@ -997,7 +997,7 @@ void AndroidConfigurations::updateAutomaticKitList()
|
|||||||
return v->type() == Constants::ANDROIDQT;
|
return v->type() == Constants::ANDROIDQT;
|
||||||
});
|
});
|
||||||
for (const QtSupport::BaseQtVersion *qtVersion : qtVersions) {
|
for (const QtSupport::BaseQtVersion *qtVersion : qtVersions) {
|
||||||
const QList<Abi> qtAbis = qtVersion->qtAbis();
|
const Abis qtAbis = qtVersion->qtAbis();
|
||||||
if (qtAbis.empty())
|
if (qtAbis.empty())
|
||||||
continue;
|
continue;
|
||||||
qtVersionsForArch[qtAbis.first()].append(qtVersion);
|
qtVersionsForArch[qtAbis.first()].append(qtVersion);
|
||||||
|
|||||||
@@ -69,9 +69,9 @@ QString AndroidQtVersion::invalidReason() const
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Abi> AndroidQtVersion::detectQtAbis() const
|
Abis AndroidQtVersion::detectQtAbis() const
|
||||||
{
|
{
|
||||||
QList<Abi> abis = BaseQtVersion::detectQtAbis();
|
Abis abis = BaseQtVersion::detectQtAbis();
|
||||||
for (int i = 0; i < abis.count(); ++i) {
|
for (int i = 0; i < abis.count(); ++i) {
|
||||||
abis[i] = Abi(abis.at(i).architecture(),
|
abis[i] = Abi(abis.at(i).architecture(),
|
||||||
abis.at(i).os(),
|
abis.at(i).os(),
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ public:
|
|||||||
bool isValid() const override;
|
bool isValid() const override;
|
||||||
QString invalidReason() const override;
|
QString invalidReason() const override;
|
||||||
|
|
||||||
QList<ProjectExplorer::Abi> detectQtAbis() const override;
|
ProjectExplorer::Abis detectQtAbis() const override;
|
||||||
|
|
||||||
void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override;
|
void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override;
|
||||||
Utils::Environment qmakeRunEnvironment() const override;
|
Utils::Environment qmakeRunEnvironment() const override;
|
||||||
|
|||||||
@@ -343,7 +343,7 @@ void DebuggerItem::setVersion(const QString &version)
|
|||||||
m_version = version;
|
m_version = version;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DebuggerItem::setAbis(const QList<Abi> &abis)
|
void DebuggerItem::setAbis(const Abis &abis)
|
||||||
{
|
{
|
||||||
m_abis = abis;
|
m_abis = abis;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,8 +81,8 @@ public:
|
|||||||
QString version() const;
|
QString version() const;
|
||||||
void setVersion(const QString &version);
|
void setVersion(const QString &version);
|
||||||
|
|
||||||
const QList<ProjectExplorer::Abi> &abis() const { return m_abis; }
|
const ProjectExplorer::Abis &abis() const { return m_abis; }
|
||||||
void setAbis(const QList<ProjectExplorer::Abi> &abis);
|
void setAbis(const ProjectExplorer::Abis &abis);
|
||||||
void setAbi(const ProjectExplorer::Abi &abi);
|
void setAbi(const ProjectExplorer::Abi &abi);
|
||||||
|
|
||||||
enum MatchLevel { DoesNotMatch, MatchesSomewhat, MatchesWell, MatchesPerfectly, MatchesPerfectlyInPath };
|
enum MatchLevel { DoesNotMatch, MatchesSomewhat, MatchesWell, MatchesPerfectly, MatchesPerfectlyInPath };
|
||||||
@@ -113,7 +113,7 @@ private:
|
|||||||
Utils::FileName m_workingDirectory;
|
Utils::FileName m_workingDirectory;
|
||||||
bool m_isAutoDetected = false;
|
bool m_isAutoDetected = false;
|
||||||
QString m_version;
|
QString m_version;
|
||||||
QList<ProjectExplorer::Abi> m_abis;
|
ProjectExplorer::Abis m_abis;
|
||||||
QDateTime m_lastModified;
|
QDateTime m_lastModified;
|
||||||
|
|
||||||
friend class Internal::DebuggerConfigWidget;
|
friend class Internal::DebuggerConfigWidget;
|
||||||
|
|||||||
@@ -350,7 +350,7 @@ DebuggerItem DebuggerItemConfigWidget::item() const
|
|||||||
item.setCommand(m_binaryChooser->fileName());
|
item.setCommand(m_binaryChooser->fileName());
|
||||||
item.setWorkingDirectory(m_workingDirectoryChooser->fileName());
|
item.setWorkingDirectory(m_workingDirectoryChooser->fileName());
|
||||||
item.setAutoDetected(m_autodetected);
|
item.setAutoDetected(m_autodetected);
|
||||||
QList<ProjectExplorer::Abi> abiList;
|
ProjectExplorer::Abis abiList;
|
||||||
foreach (const QString &a, m_abis->text().split(QRegExp("[^A-Za-z0-9-_]+"))) {
|
foreach (const QString &a, m_abis->text().split(QRegExp("[^A-Za-z0-9-_]+"))) {
|
||||||
if (a.isNull())
|
if (a.isNull())
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -807,7 +807,7 @@ static QString msgParameterMissing(const QString &a)
|
|||||||
return DebuggerPlugin::tr("Option \"%1\" is missing the parameter.").arg(a);
|
return DebuggerPlugin::tr("Option \"%1\" is missing the parameter.").arg(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Kit *guessKitFromAbis(const QList<Abi> &abis)
|
static Kit *guessKitFromAbis(const Abis &abis)
|
||||||
{
|
{
|
||||||
Kit *kit = nullptr;
|
Kit *kit = nullptr;
|
||||||
|
|
||||||
@@ -2620,8 +2620,8 @@ void DebuggerUnitTests::testDebuggerMatching()
|
|||||||
|
|
||||||
auto expectedLevel = static_cast<DebuggerItem::MatchLevel>(result);
|
auto expectedLevel = static_cast<DebuggerItem::MatchLevel>(result);
|
||||||
|
|
||||||
QList<Abi> debuggerAbis;
|
Abis debuggerAbis;
|
||||||
foreach (const QString &abi, debugger)
|
for (const QString &abi : qAsConst(debugger))
|
||||||
debuggerAbis << Abi::fromString(abi);
|
debuggerAbis << Abi::fromString(abi);
|
||||||
|
|
||||||
DebuggerItem item;
|
DebuggerItem item;
|
||||||
|
|||||||
@@ -59,9 +59,9 @@ QString IosQtVersion::invalidReason() const
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Abi> IosQtVersion::detectQtAbis() const
|
Abis IosQtVersion::detectQtAbis() const
|
||||||
{
|
{
|
||||||
QList<Abi> abis = BaseQtVersion::detectQtAbis();
|
Abis abis = BaseQtVersion::detectQtAbis();
|
||||||
for (int i = 0; i < abis.count(); ++i) {
|
for (int i = 0; i < abis.count(); ++i) {
|
||||||
abis[i] = Abi(abis.at(i).architecture(),
|
abis[i] = Abi(abis.at(i).architecture(),
|
||||||
abis.at(i).os(),
|
abis.at(i).os(),
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ public:
|
|||||||
bool isValid() const override;
|
bool isValid() const override;
|
||||||
QString invalidReason() const override;
|
QString invalidReason() const override;
|
||||||
|
|
||||||
QList<ProjectExplorer::Abi> detectQtAbis() const override;
|
ProjectExplorer::Abis detectQtAbis() const override;
|
||||||
|
|
||||||
void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override;
|
void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override;
|
||||||
|
|
||||||
|
|||||||
@@ -219,9 +219,9 @@ static Abi macAbiForCpu(quint32 type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static QList<Abi> parseCoffHeader(const QByteArray &data)
|
static Abis parseCoffHeader(const QByteArray &data)
|
||||||
{
|
{
|
||||||
QList<Abi> result;
|
Abis result;
|
||||||
if (data.size() < 20)
|
if (data.size() < 20)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
@@ -305,9 +305,9 @@ static QList<Abi> parseCoffHeader(const QByteArray &data)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QList<Abi> abiOf(const QByteArray &data)
|
static Abis abiOf(const QByteArray &data)
|
||||||
{
|
{
|
||||||
QList<Abi> result;
|
Abis result;
|
||||||
if (data.size() <= 8)
|
if (data.size() <= 8)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
@@ -983,9 +983,9 @@ Abi Abi::hostAbi()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//! Extract available ABIs from a binary using heuristics.
|
//! Extract available ABIs from a binary using heuristics.
|
||||||
QList<Abi> Abi::abisOfBinary(const Utils::FileName &path)
|
Abis Abi::abisOfBinary(const Utils::FileName &path)
|
||||||
{
|
{
|
||||||
QList<Abi> tmp;
|
Abis tmp;
|
||||||
if (path.isEmpty())
|
if (path.isEmpty())
|
||||||
return tmp;
|
return tmp;
|
||||||
|
|
||||||
@@ -1038,8 +1038,8 @@ QList<Abi> Abi::abisOfBinary(const Utils::FileName &path)
|
|||||||
f.close();
|
f.close();
|
||||||
|
|
||||||
// Remove duplicates:
|
// Remove duplicates:
|
||||||
QList<Abi> result;
|
Abis result;
|
||||||
foreach (const Abi &a, tmp) {
|
for (const Abi &a : qAsConst(tmp)) {
|
||||||
if (!result.contains(a))
|
if (!result.contains(a))
|
||||||
result.append(a);
|
result.append(a);
|
||||||
}
|
}
|
||||||
@@ -1233,7 +1233,7 @@ void ProjectExplorer::ProjectExplorerPlugin::testAbiOfBinary()
|
|||||||
QFETCH(QString, file);
|
QFETCH(QString, file);
|
||||||
QFETCH(QStringList, abis);
|
QFETCH(QStringList, abis);
|
||||||
|
|
||||||
QList<Abi> result = Abi::abisOfBinary(Utils::FileName::fromString(file));
|
const Abis result = Abi::abisOfBinary(Utils::FileName::fromString(file));
|
||||||
QCOMPARE(result.count(), abis.count());
|
QCOMPARE(result.count(), abis.count());
|
||||||
for (int i = 0; i < abis.count(); ++i)
|
for (int i = 0; i < abis.count(); ++i)
|
||||||
QCOMPARE(result.at(i).toString(), abis.at(i));
|
QCOMPARE(result.at(i).toString(), abis.at(i));
|
||||||
|
|||||||
@@ -42,6 +42,9 @@ namespace ProjectExplorer {
|
|||||||
// ABI (documentation inside)
|
// ABI (documentation inside)
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
|
class Abi;
|
||||||
|
using Abis = QList<Abi>;
|
||||||
|
|
||||||
class PROJECTEXPLORER_EXPORT Abi
|
class PROJECTEXPLORER_EXPORT Abi
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -157,7 +160,7 @@ public:
|
|||||||
|
|
||||||
static Abi fromString(const QString &abiString);
|
static Abi fromString(const QString &abiString);
|
||||||
static Abi hostAbi();
|
static Abi hostAbi();
|
||||||
static QList<Abi> abisOfBinary(const Utils::FileName &path);
|
static Abis abisOfBinary(const Utils::FileName &path);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -151,12 +151,12 @@ AbiWidget::AbiWidget(QWidget *parent) : QWidget(parent),
|
|||||||
|
|
||||||
layout->setStretchFactor(d->m_abi, 1);
|
layout->setStretchFactor(d->m_abi, 1);
|
||||||
|
|
||||||
setAbis(QList<Abi>(), Abi::hostAbi());
|
setAbis(Abis(), Abi::hostAbi());
|
||||||
}
|
}
|
||||||
|
|
||||||
AbiWidget::~AbiWidget() = default;
|
AbiWidget::~AbiWidget() = default;
|
||||||
|
|
||||||
static Abi selectAbi(const Abi ¤t, const QList<Abi> &abiList)
|
static Abi selectAbi(const Abi ¤t, const Abis &abiList)
|
||||||
{
|
{
|
||||||
if (!current.isNull())
|
if (!current.isNull())
|
||||||
return current;
|
return current;
|
||||||
@@ -165,7 +165,7 @@ static Abi selectAbi(const Abi ¤t, const QList<Abi> &abiList)
|
|||||||
return Abi::hostAbi();
|
return Abi::hostAbi();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbiWidget::setAbis(const QList<Abi> &abiList, const Abi ¤tAbi)
|
void AbiWidget::setAbis(const Abis &abiList, const Abi ¤tAbi)
|
||||||
{
|
{
|
||||||
const Abi defaultAbi = selectAbi(currentAbi, abiList);
|
const Abi defaultAbi = selectAbi(currentAbi, abiList);
|
||||||
{
|
{
|
||||||
@@ -191,9 +191,9 @@ void AbiWidget::setAbis(const QList<Abi> &abiList, const Abi ¤tAbi)
|
|||||||
emitAbiChanged(defaultAbi);
|
emitAbiChanged(defaultAbi);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Abi> AbiWidget::supportedAbis() const
|
Abis AbiWidget::supportedAbis() const
|
||||||
{
|
{
|
||||||
QList<Abi> result;
|
Abis result;
|
||||||
result.reserve(d->m_abi->count());
|
result.reserve(d->m_abi->count());
|
||||||
for (int i = 1; i < d->m_abi->count(); ++i)
|
for (int i = 1; i < d->m_abi->count(); ++i)
|
||||||
result << Abi::fromString(d->m_abi->itemData(i).toString());
|
result << Abi::fromString(d->m_abi->itemData(i).toString());
|
||||||
|
|||||||
@@ -27,12 +27,13 @@
|
|||||||
|
|
||||||
#include "projectexplorer_export.h"
|
#include "projectexplorer_export.h"
|
||||||
|
|
||||||
|
#include "abi.h"
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
class Abi;
|
|
||||||
|
|
||||||
namespace Internal { class AbiWidgetPrivate; }
|
namespace Internal { class AbiWidgetPrivate; }
|
||||||
|
|
||||||
@@ -48,9 +49,9 @@ public:
|
|||||||
AbiWidget(QWidget *parent = nullptr);
|
AbiWidget(QWidget *parent = nullptr);
|
||||||
~AbiWidget() override;
|
~AbiWidget() override;
|
||||||
|
|
||||||
void setAbis(const QList<Abi> &, const Abi ¤tAbi);
|
void setAbis(const ProjectExplorer::Abis &, const Abi ¤tAbi);
|
||||||
|
|
||||||
QList<Abi> supportedAbis() const;
|
Abis supportedAbis() const;
|
||||||
bool isCustomAbi() const;
|
bool isCustomAbi() const;
|
||||||
Abi currentAbi() const;
|
Abi currentAbi() const;
|
||||||
|
|
||||||
|
|||||||
@@ -598,7 +598,7 @@ void CustomToolChainConfigWidget::setFromToolchain()
|
|||||||
auto tc = static_cast<CustomToolChain *>(toolChain());
|
auto tc = static_cast<CustomToolChain *>(toolChain());
|
||||||
m_compilerCommand->setFileName(tc->compilerCommand());
|
m_compilerCommand->setFileName(tc->compilerCommand());
|
||||||
m_makeCommand->setFileName(tc->makeCommand(Environment()));
|
m_makeCommand->setFileName(tc->makeCommand(Environment()));
|
||||||
m_abiWidget->setAbis(QList<Abi>(), tc->targetAbi());
|
m_abiWidget->setAbis(Abis(), tc->targetAbi());
|
||||||
const QStringList macroLines = Utils::transform<QList>(tc->rawPredefinedMacros(), [](const Macro &m) {
|
const QStringList macroLines = Utils::transform<QList>(tc->rawPredefinedMacros(), [](const Macro &m) {
|
||||||
return QString::fromUtf8(m.toKeyValue(QByteArray()));
|
return QString::fromUtf8(m.toKeyValue(QByteArray()));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -167,9 +167,9 @@ HeaderPaths GccToolChain::gccHeaderPaths(const FileName &gcc, const QStringList
|
|||||||
return builtInHeaderPaths;
|
return builtInHeaderPaths;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QList<Abi> guessGccAbi(const QString &m, const ProjectExplorer::Macros ¯os)
|
static Abis guessGccAbi(const QString &m, const ProjectExplorer::Macros ¯os)
|
||||||
{
|
{
|
||||||
QList<Abi> abiList;
|
Abis abiList;
|
||||||
|
|
||||||
Abi guessed = Abi::abiFromTargetTriplet(m);
|
Abi guessed = Abi::abiFromTargetTriplet(m);
|
||||||
if (guessed.isNull())
|
if (guessed.isNull())
|
||||||
@@ -249,12 +249,12 @@ void GccToolChain::setCompilerCommand(const FileName &path)
|
|||||||
toolChainUpdated();
|
toolChainUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GccToolChain::setSupportedAbis(const QList<Abi> &m_abis)
|
void GccToolChain::setSupportedAbis(const Abis &abis)
|
||||||
{
|
{
|
||||||
if (m_supportedAbis == m_abis)
|
if (m_supportedAbis == abis)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m_supportedAbis = m_abis;
|
m_supportedAbis = abis;
|
||||||
toolChainUpdated();
|
toolChainUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -322,7 +322,7 @@ void GccToolChain::setTargetAbi(const Abi &abi)
|
|||||||
toolChainUpdated();
|
toolChainUpdated();
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Abi> GccToolChain::supportedAbis() const
|
Abis GccToolChain::supportedAbis() const
|
||||||
{
|
{
|
||||||
return m_supportedAbis;
|
return m_supportedAbis;
|
||||||
}
|
}
|
||||||
@@ -1151,7 +1151,7 @@ void GccToolChainConfigWidget::handleCompilerCommandChange()
|
|||||||
Abi currentAbi = m_abiWidget->currentAbi();
|
Abi currentAbi = m_abiWidget->currentAbi();
|
||||||
bool customAbi = m_abiWidget->isCustomAbi() && m_abiWidget->isEnabled();
|
bool customAbi = m_abiWidget->isCustomAbi() && m_abiWidget->isEnabled();
|
||||||
FileName path = m_compilerCommand->fileName();
|
FileName path = m_compilerCommand->fileName();
|
||||||
QList<Abi> abiList;
|
Abis abiList;
|
||||||
|
|
||||||
if (!path.isEmpty()) {
|
if (!path.isEmpty()) {
|
||||||
QFileInfo fi(path.toFileInfo());
|
QFileInfo fi(path.toFileInfo());
|
||||||
@@ -1941,7 +1941,7 @@ void ProjectExplorerPlugin::testGccAbiGuessing()
|
|||||||
QFETCH(QByteArray, macros);
|
QFETCH(QByteArray, macros);
|
||||||
QFETCH(QStringList, abiList);
|
QFETCH(QStringList, abiList);
|
||||||
|
|
||||||
QList<Abi> al = guessGccAbi(input, ProjectExplorer::Macro::toMacros(macros));
|
const Abis al = guessGccAbi(input, ProjectExplorer::Macro::toMacros(macros));
|
||||||
QCOMPARE(al.count(), abiList.count());
|
QCOMPARE(al.count(), abiList.count());
|
||||||
for (int i = 0; i < al.count(); ++i)
|
for (int i = 0; i < al.count(); ++i)
|
||||||
QCOMPARE(al.at(i).toString(), abiList.at(i));
|
QCOMPARE(al.at(i).toString(), abiList.at(i));
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public:
|
|||||||
Abi targetAbi() const override;
|
Abi targetAbi() const override;
|
||||||
QString originalTargetTriple() const override;
|
QString originalTargetTriple() const override;
|
||||||
QString version() const;
|
QString version() const;
|
||||||
QList<Abi> supportedAbis() const override;
|
Abis supportedAbis() const override;
|
||||||
void setTargetAbi(const Abi &);
|
void setTargetAbi(const Abi &);
|
||||||
|
|
||||||
bool isValid() const override;
|
bool isValid() const override;
|
||||||
@@ -112,13 +112,12 @@ public:
|
|||||||
class DetectedAbisResult {
|
class DetectedAbisResult {
|
||||||
public:
|
public:
|
||||||
DetectedAbisResult() = default;
|
DetectedAbisResult() = default;
|
||||||
DetectedAbisResult(const QList<Abi> &supportedAbis,
|
DetectedAbisResult(const Abis &supportedAbis, const QString &originalTargetTriple = {}) :
|
||||||
const QString &originalTargetTriple = QString()) :
|
|
||||||
supportedAbis(supportedAbis),
|
supportedAbis(supportedAbis),
|
||||||
originalTargetTriple(originalTargetTriple)
|
originalTargetTriple(originalTargetTriple)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
QList<Abi> supportedAbis;
|
Abis supportedAbis;
|
||||||
QString originalTargetTriple;
|
QString originalTargetTriple;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -127,7 +126,7 @@ protected:
|
|||||||
using GccCache = QVector<CacheItem>;
|
using GccCache = QVector<CacheItem>;
|
||||||
|
|
||||||
void setCompilerCommand(const Utils::FileName &path);
|
void setCompilerCommand(const Utils::FileName &path);
|
||||||
void setSupportedAbis(const QList<Abi> &m_abis);
|
void setSupportedAbis(const Abis &abis);
|
||||||
void setOriginalTargetTriple(const QString &targetTriple);
|
void setOriginalTargetTriple(const QString &targetTriple);
|
||||||
void setMacroCache(const QStringList &allCxxflags, const Macros ¯oCache) const;
|
void setMacroCache(const QStringList &allCxxflags, const Macros ¯oCache) const;
|
||||||
Macros macroCache(const QStringList &allCxxflags) const;
|
Macros macroCache(const QStringList &allCxxflags) const;
|
||||||
@@ -194,7 +193,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
Abi m_targetAbi;
|
Abi m_targetAbi;
|
||||||
mutable QList<Abi> m_supportedAbis;
|
mutable Abis m_supportedAbis;
|
||||||
mutable QString m_originalTargetTriple;
|
mutable QString m_originalTargetTriple;
|
||||||
mutable HeaderPaths m_headerPaths;
|
mutable HeaderPaths m_headerPaths;
|
||||||
mutable QString m_version;
|
mutable QString m_version;
|
||||||
|
|||||||
@@ -776,7 +776,7 @@ void MsvcToolChain::updateEnvironmentModifications(QList<Utils::EnvironmentItem>
|
|||||||
|
|
||||||
void MsvcToolChain::detectInstalledAbis()
|
void MsvcToolChain::detectInstalledAbis()
|
||||||
{
|
{
|
||||||
static QMap<QString, QList<Abi>> abiCache;
|
static QMap<QString, Abis> abiCache;
|
||||||
const QString vcVarsBase
|
const QString vcVarsBase
|
||||||
= QDir::fromNativeSeparators(m_vcvarsBat).left(m_vcvarsBat.lastIndexOf('/'));
|
= QDir::fromNativeSeparators(m_vcvarsBat).left(m_vcvarsBat.lastIndexOf('/'));
|
||||||
if (abiCache.contains(vcVarsBase)) {
|
if (abiCache.contains(vcVarsBase)) {
|
||||||
@@ -913,7 +913,7 @@ Abi MsvcToolChain::targetAbi() const
|
|||||||
return m_abi;
|
return m_abi;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Abi> MsvcToolChain::supportedAbis() const
|
Abis MsvcToolChain::supportedAbis() const
|
||||||
{
|
{
|
||||||
return m_supportedAbis;
|
return m_supportedAbis;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ public:
|
|||||||
~MsvcToolChain() override;
|
~MsvcToolChain() override;
|
||||||
|
|
||||||
Abi targetAbi() const override;
|
Abi targetAbi() const override;
|
||||||
QList<Abi> supportedAbis() const override;
|
Abis supportedAbis() const override;
|
||||||
void setTargetAbi(const Abi &abi);
|
void setTargetAbi(const Abi &abi);
|
||||||
|
|
||||||
bool isValid() const override;
|
bool isValid() const override;
|
||||||
@@ -168,7 +168,7 @@ private:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
Abi m_abi;
|
Abi m_abi;
|
||||||
QList<Abi> m_supportedAbis;
|
Abis m_supportedAbis;
|
||||||
|
|
||||||
QString m_vcvarsBat;
|
QString m_vcvarsBat;
|
||||||
QString m_varsBatArg; // Argument
|
QString m_varsBatArg; // Argument
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ Core::Id ToolChain::typeId() const
|
|||||||
return d->m_typeId;
|
return d->m_typeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Abi> ToolChain::supportedAbis() const
|
Abis ToolChain::supportedAbis() const
|
||||||
{
|
{
|
||||||
return {targetAbi()};
|
return {targetAbi()};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
#include "projectexplorer_export.h"
|
#include "projectexplorer_export.h"
|
||||||
#include "projectexplorer_global.h"
|
#include "projectexplorer_global.h"
|
||||||
|
|
||||||
|
#include "abi.h"
|
||||||
#include "headerpath.h"
|
#include "headerpath.h"
|
||||||
#include "projectmacro.h"
|
#include "projectmacro.h"
|
||||||
#include "toolchaincache.h"
|
#include "toolchaincache.h"
|
||||||
@@ -104,7 +105,7 @@ public:
|
|||||||
Core::Id typeId() const;
|
Core::Id typeId() const;
|
||||||
virtual QString typeDisplayName() const = 0;
|
virtual QString typeDisplayName() const = 0;
|
||||||
virtual Abi targetAbi() const = 0;
|
virtual Abi targetAbi() const = 0;
|
||||||
virtual QList<Abi> supportedAbis() const;
|
virtual ProjectExplorer::Abis supportedAbis() const;
|
||||||
virtual QString originalTargetTriple() const { return QString(); }
|
virtual QString originalTargetTriple() const { return QString(); }
|
||||||
virtual QStringList extraCodeModelFlags() const { return QStringList(); }
|
virtual QStringList extraCodeModelFlags() const { return QStringList(); }
|
||||||
|
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ QList<void *> QmakeProjectImporter::examineDirectory(const FileName &importPath)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (version->type() == QtSupport::Constants::DESKTOPQT) {
|
if (version->type() == QtSupport::Constants::DESKTOPQT) {
|
||||||
const QList<ProjectExplorer::Abi> abis = version->qtAbis();
|
const ProjectExplorer::Abis abis = version->qtAbis();
|
||||||
if (!abis.isEmpty()) {
|
if (!abis.isEmpty()) {
|
||||||
ProjectExplorer::Abi abi = abis.first();
|
ProjectExplorer::Abi abi = abis.first();
|
||||||
if (abi.os() == ProjectExplorer::Abi::DarwinOS) {
|
if (abi.os() == ProjectExplorer::Abi::DarwinOS) {
|
||||||
@@ -271,7 +271,7 @@ static const QList<ToolChain *> preferredToolChains(BaseQtVersion *qtVersion, co
|
|||||||
const FileName spec = ms.isEmpty() ? qtVersion->mkspec() : ms;
|
const FileName spec = ms.isEmpty() ? qtVersion->mkspec() : ms;
|
||||||
|
|
||||||
const QList<ToolChain *> toolchains = ToolChainManager::toolChains();
|
const QList<ToolChain *> toolchains = ToolChainManager::toolChains();
|
||||||
QList<Abi> qtAbis = qtVersion->qtAbis();
|
const Abis qtAbis = qtVersion->qtAbis();
|
||||||
const auto matcher = [&](const ToolChain *tc) {
|
const auto matcher = [&](const ToolChain *tc) {
|
||||||
return qtAbis.contains(tc->targetAbi())
|
return qtAbis.contains(tc->targetAbi())
|
||||||
&& tc->suggestedMkspecList().contains(spec)
|
&& tc->suggestedMkspecList().contains(spec)
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ void QnxQtVersion::fromMap(const QVariantMap &map)
|
|||||||
setSdpPath(QDir::fromNativeSeparators(map.value(QLatin1String(SDP_PATH_KEY)).toString()));
|
setSdpPath(QDir::fromNativeSeparators(map.value(QLatin1String(SDP_PATH_KEY)).toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ProjectExplorer::Abi> QnxQtVersion::detectQtAbis() const
|
ProjectExplorer::Abis QnxQtVersion::detectQtAbis() const
|
||||||
{
|
{
|
||||||
ensureMkSpecParsed();
|
ensureMkSpecParsed();
|
||||||
return QnxUtils::convertAbis(BaseQtVersion::detectQtAbis());
|
return QnxUtils::convertAbis(BaseQtVersion::detectQtAbis());
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ public:
|
|||||||
QVariantMap toMap() const override;
|
QVariantMap toMap() const override;
|
||||||
void fromMap(const QVariantMap &map) override;
|
void fromMap(const QVariantMap &map) override;
|
||||||
|
|
||||||
QList<ProjectExplorer::Abi> detectQtAbis() const override;
|
ProjectExplorer::Abis detectQtAbis() const override;
|
||||||
|
|
||||||
void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override;
|
void addToEnvironment(const ProjectExplorer::Kit *k, Utils::Environment &env) const override;
|
||||||
Utils::Environment qmakeRunEnvironment() const override;
|
Utils::Environment qmakeRunEnvironment() const override;
|
||||||
|
|||||||
@@ -44,9 +44,9 @@ namespace Internal {
|
|||||||
static const char CompilerSdpPath[] = "Qnx.QnxToolChain.NDKPath";
|
static const char CompilerSdpPath[] = "Qnx.QnxToolChain.NDKPath";
|
||||||
static const char CpuDirKey[] = "Qnx.QnxToolChain.CpuDir";
|
static const char CpuDirKey[] = "Qnx.QnxToolChain.CpuDir";
|
||||||
|
|
||||||
static QList<Abi> detectTargetAbis(const FileName &sdpPath)
|
static Abis detectTargetAbis(const FileName &sdpPath)
|
||||||
{
|
{
|
||||||
QList<Abi> result;
|
Abis result;
|
||||||
FileName qnxTarget;
|
FileName qnxTarget;
|
||||||
|
|
||||||
if (!sdpPath.fileName().isEmpty()) {
|
if (!sdpPath.fileName().isEmpty()) {
|
||||||
@@ -243,7 +243,7 @@ QnxToolChainConfigWidget::QnxToolChainConfigWidget(QnxToolChain *tc)
|
|||||||
m_sdpPath->setPath(tc->sdpPath());
|
m_sdpPath->setPath(tc->sdpPath());
|
||||||
m_sdpPath->setEnabled(!tc->isAutoDetected());
|
m_sdpPath->setEnabled(!tc->isAutoDetected());
|
||||||
|
|
||||||
QList<Abi> abiList = detectTargetAbis(m_sdpPath->fileName());
|
const Abis abiList = detectTargetAbis(m_sdpPath->fileName());
|
||||||
m_abiWidget->setAbis(abiList, tc->targetAbi());
|
m_abiWidget->setAbis(abiList, tc->targetAbi());
|
||||||
m_abiWidget->setEnabled(!tc->isAutoDetected() && !abiList.isEmpty());
|
m_abiWidget->setEnabled(!tc->isAutoDetected() && !abiList.isEmpty());
|
||||||
|
|
||||||
@@ -295,9 +295,9 @@ bool QnxToolChainConfigWidget::isDirtyImpl() const
|
|||||||
|
|
||||||
void QnxToolChainConfigWidget::handleSdpPathChange()
|
void QnxToolChainConfigWidget::handleSdpPathChange()
|
||||||
{
|
{
|
||||||
Abi currentAbi = m_abiWidget->currentAbi();
|
const Abi currentAbi = m_abiWidget->currentAbi();
|
||||||
bool customAbi = m_abiWidget->isCustomAbi();
|
const bool customAbi = m_abiWidget->isCustomAbi();
|
||||||
QList<Abi> abiList = detectTargetAbis(m_sdpPath->fileName());
|
const Abis abiList = detectTargetAbis(m_sdpPath->fileName());
|
||||||
|
|
||||||
m_abiWidget->setEnabled(!abiList.isEmpty());
|
m_abiWidget->setEnabled(!abiList.isEmpty());
|
||||||
|
|
||||||
|
|||||||
@@ -251,7 +251,7 @@ Abi QnxUtils::convertAbi(const Abi &abi)
|
|||||||
return abi;
|
return abi;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Abi> QnxUtils::convertAbis(const QList<Abi> &abis)
|
Abis QnxUtils::convertAbis(const Abis &abis)
|
||||||
{
|
{
|
||||||
return Utils::transform(abis, &QnxUtils::convertAbi);
|
return Utils::transform(abis, &QnxUtils::convertAbi);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public:
|
|||||||
static QList<Utils::EnvironmentItem> qnxEnvironment(const QString &sdpPath);
|
static QList<Utils::EnvironmentItem> qnxEnvironment(const QString &sdpPath);
|
||||||
static QList<QnxTarget> findTargets(const Utils::FileName &basePath);
|
static QList<QnxTarget> findTargets(const Utils::FileName &basePath);
|
||||||
static ProjectExplorer::Abi convertAbi(const ProjectExplorer::Abi &abi);
|
static ProjectExplorer::Abi convertAbi(const ProjectExplorer::Abi &abi);
|
||||||
static QList<ProjectExplorer::Abi> convertAbis(const QList<ProjectExplorer::Abi> &abis);
|
static ProjectExplorer::Abis convertAbis(const ProjectExplorer::Abis &abis);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
|||||||
@@ -359,7 +359,7 @@ QList<Task> BaseQtVersion::validateKit(const Kit *k)
|
|||||||
BaseQtVersion *version = QtKitAspect::qtVersion(k);
|
BaseQtVersion *version = QtKitAspect::qtVersion(k);
|
||||||
Q_ASSERT(version == this);
|
Q_ASSERT(version == this);
|
||||||
|
|
||||||
const QList<Abi> qtAbis = version->qtAbis();
|
const Abis qtAbis = version->qtAbis();
|
||||||
if (qtAbis.isEmpty()) // No need to test if Qt does not know anyway...
|
if (qtAbis.isEmpty()) // No need to test if Qt does not know anyway...
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
@@ -379,7 +379,7 @@ QList<Task> BaseQtVersion::validateKit(const Kit *k)
|
|||||||
bool fullMatch = false;
|
bool fullMatch = false;
|
||||||
|
|
||||||
QString qtAbiString;
|
QString qtAbiString;
|
||||||
foreach (const Abi &qtAbi, qtAbis) {
|
for (const Abi &qtAbi : qtAbis) {
|
||||||
if (!qtAbiString.isEmpty())
|
if (!qtAbiString.isEmpty())
|
||||||
qtAbiString.append(' ');
|
qtAbiString.append(' ');
|
||||||
qtAbiString.append(qtAbi.toString());
|
qtAbiString.append(qtAbi.toString());
|
||||||
@@ -620,7 +620,7 @@ FileName BaseQtVersion::qmakeCommand() const
|
|||||||
return m_qmakeCommand;
|
return m_qmakeCommand;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Abi> BaseQtVersion::qtAbis() const
|
Abis BaseQtVersion::qtAbis() const
|
||||||
{
|
{
|
||||||
if (!m_hasQtAbis) {
|
if (!m_hasQtAbis) {
|
||||||
m_qtAbis = detectQtAbis();
|
m_qtAbis = detectQtAbis();
|
||||||
@@ -629,7 +629,7 @@ QList<Abi> BaseQtVersion::qtAbis() const
|
|||||||
return m_qtAbis;
|
return m_qtAbis;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Abi> BaseQtVersion::detectQtAbis() const
|
Abis BaseQtVersion::detectQtAbis() const
|
||||||
{
|
{
|
||||||
return qtAbisFromLibrary(qtCorePaths());
|
return qtAbisFromLibrary(qtCorePaths());
|
||||||
}
|
}
|
||||||
@@ -705,7 +705,7 @@ QString BaseQtVersion::toHtml(bool verbose) const
|
|||||||
} else {
|
} else {
|
||||||
str << "<tr><td><b>" << QCoreApplication::translate("BaseQtVersion", "ABI:")
|
str << "<tr><td><b>" << QCoreApplication::translate("BaseQtVersion", "ABI:")
|
||||||
<< "</b></td>";
|
<< "</b></td>";
|
||||||
const QList<Abi> abis = qtAbis();
|
const Abis abis = qtAbis();
|
||||||
if (abis.isEmpty()) {
|
if (abis.isEmpty()) {
|
||||||
str << "<td>" << Abi().toString() << "</td></tr>";
|
str << "<td>" << Abi().toString() << "</td></tr>";
|
||||||
} else {
|
} else {
|
||||||
@@ -1558,7 +1558,7 @@ bool BaseQtVersion::queryQMakeVariables(const FileName &binary, const Environmen
|
|||||||
// Try running qmake with all kinds of tool chains set up in the environment.
|
// Try running qmake with all kinds of tool chains set up in the environment.
|
||||||
// This is required to make non-static qmakes work on windows where every tool chain
|
// This is required to make non-static qmakes work on windows where every tool chain
|
||||||
// tries to be incompatible with any other.
|
// tries to be incompatible with any other.
|
||||||
QList<Abi> abiList = Abi::abisOfBinary(binary);
|
Abis abiList = Abi::abisOfBinary(binary);
|
||||||
const QList<ToolChain *> tcList
|
const QList<ToolChain *> tcList
|
||||||
= ToolChainManager::toolChains([&abiList](const ToolChain *t) { return abiList.contains(t->targetAbi()); });
|
= ToolChainManager::toolChains([&abiList](const ToolChain *t) { return abiList.contains(t->targetAbi()); });
|
||||||
for (ToolChain *tc : tcList) {
|
for (ToolChain *tc : tcList) {
|
||||||
@@ -2004,10 +2004,10 @@ static Abi scanQtBinaryForBuildStringAndRefineAbi(const FileName &library,
|
|||||||
return results.value(library);
|
return results.value(library);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<Abi> BaseQtVersion::qtAbisFromLibrary(const FileNameList &coreLibraries)
|
Abis BaseQtVersion::qtAbisFromLibrary(const FileNameList &coreLibraries)
|
||||||
{
|
{
|
||||||
QList<Abi> res;
|
Abis res;
|
||||||
foreach (const FileName &library, coreLibraries) {
|
for (const FileName &library : coreLibraries) {
|
||||||
for (Abi abi : Abi::abisOfBinary(library)) {
|
for (Abi abi : Abi::abisOfBinary(library)) {
|
||||||
Abi tmp = abi;
|
Abi tmp = abi;
|
||||||
if (abi.osFlavor() == Abi::UnknownFlavor)
|
if (abi.osFlavor() == Abi::UnknownFlavor)
|
||||||
|
|||||||
@@ -137,8 +137,8 @@ public:
|
|||||||
virtual QString description() const = 0;
|
virtual QString description() const = 0;
|
||||||
virtual QString toHtml(bool verbose) const;
|
virtual QString toHtml(bool verbose) const;
|
||||||
|
|
||||||
QList<ProjectExplorer::Abi> qtAbis() const;
|
ProjectExplorer::Abis qtAbis() const;
|
||||||
virtual QList<ProjectExplorer::Abi> detectQtAbis() const;
|
virtual ProjectExplorer::Abis detectQtAbis() const;
|
||||||
|
|
||||||
enum PropertyVariant { PropertyVariantDev, PropertyVariantGet, PropertyVariantSrc };
|
enum PropertyVariant { PropertyVariantDev, PropertyVariantGet, PropertyVariantSrc };
|
||||||
QString qmakeProperty(const QByteArray &name,
|
QString qmakeProperty(const QByteArray &name,
|
||||||
@@ -265,7 +265,7 @@ protected:
|
|||||||
|
|
||||||
// helper function for desktop and simulator to figure out the supported abis based on the libraries
|
// helper function for desktop and simulator to figure out the supported abis based on the libraries
|
||||||
Utils::FileNameList qtCorePaths() const;
|
Utils::FileNameList qtCorePaths() const;
|
||||||
static QList<ProjectExplorer::Abi> qtAbisFromLibrary(const Utils::FileNameList &coreLibraries);
|
static ProjectExplorer::Abis qtAbisFromLibrary(const Utils::FileNameList &coreLibraries);
|
||||||
|
|
||||||
void ensureMkSpecParsed() const;
|
void ensureMkSpecParsed() const;
|
||||||
virtual void parseMkSpec(ProFileEvaluator *) const;
|
virtual void parseMkSpec(ProFileEvaluator *) const;
|
||||||
@@ -332,7 +332,7 @@ private:
|
|||||||
mutable QString m_linguistCommand;
|
mutable QString m_linguistCommand;
|
||||||
mutable QString m_qscxmlcCommand;
|
mutable QString m_qscxmlcCommand;
|
||||||
|
|
||||||
mutable QList<ProjectExplorer::Abi> m_qtAbis;
|
mutable ProjectExplorer::Abis m_qtAbis;
|
||||||
|
|
||||||
MacroExpanderWrapper m_expander;
|
MacroExpanderWrapper m_expander;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -341,7 +341,7 @@ void QtOptionsPageWidget::infoAnchorClicked(const QUrl &url)
|
|||||||
QDesktopServices::openUrl(url);
|
QDesktopServices::openUrl(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
static QString formatAbiHtmlList(const QList<Abi> &abis)
|
static QString formatAbiHtmlList(const Abis &abis)
|
||||||
{
|
{
|
||||||
QString result = QStringLiteral("<ul><li>");
|
QString result = QStringLiteral("<ul><li>");
|
||||||
for (int i = 0, count = abis.size(); i < count; ++i) {
|
for (int i = 0, count = abis.size(); i < count; ++i) {
|
||||||
@@ -369,8 +369,8 @@ QtOptionsPageWidget::ValidityInfo QtOptionsPageWidget::validInformation(const Ba
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Do we have tool chain issues?
|
// Do we have tool chain issues?
|
||||||
QList<Abi> missingToolChains;
|
Abis missingToolChains;
|
||||||
const QList<Abi> qtAbis = version->qtAbis();
|
const Abis qtAbis = version->qtAbis();
|
||||||
|
|
||||||
for (const Abi &abi : qtAbis) {
|
for (const Abi &abi : qtAbis) {
|
||||||
const auto abiCompatePred = [&abi] (const ToolChain *tc)
|
const auto abiCompatePred = [&abi] (const ToolChain *tc)
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ EmbeddedLinuxQtVersionFactory::EmbeddedLinuxQtVersionFactory()
|
|||||||
setPriority(10);
|
setPriority(10);
|
||||||
|
|
||||||
setRestrictionChecker([](const SetupData &) {
|
setRestrictionChecker([](const SetupData &) {
|
||||||
EmbeddedLinuxQtVersion tempVersion;
|
const EmbeddedLinuxQtVersion tempVersion;
|
||||||
QList<ProjectExplorer::Abi> abis = tempVersion.qtAbis();
|
const ProjectExplorer::Abis abis = tempVersion.qtAbis();
|
||||||
|
|
||||||
// Note: This fails for e.g. intel/meego cross builds on x86 linux machines.
|
// Note: This fails for e.g. intel/meego cross builds on x86 linux machines.
|
||||||
return abis.count() == 1
|
return abis.count() == 1
|
||||||
|
|||||||
Reference in New Issue
Block a user