forked from qt-creator/qt-creator
ToolChain: Add a language field
* Make sure this field can not change during the lifetime of the toolchain * Save/restore it, default to Cxx if no language is set in the toolchain.xml file Change-Id: Ie79321f9913521b087cb8a735660cf1e1faeec3b Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
This commit is contained in:
@@ -39,6 +39,7 @@
|
|||||||
static const char ID_KEY[] = "ProjectExplorer.ToolChain.Id";
|
static const char ID_KEY[] = "ProjectExplorer.ToolChain.Id";
|
||||||
static const char DISPLAY_NAME_KEY[] = "ProjectExplorer.ToolChain.DisplayName";
|
static const char DISPLAY_NAME_KEY[] = "ProjectExplorer.ToolChain.DisplayName";
|
||||||
static const char AUTODETECT_KEY[] = "ProjectExplorer.ToolChain.Autodetect";
|
static const char AUTODETECT_KEY[] = "ProjectExplorer.ToolChain.Autodetect";
|
||||||
|
static const char LANGUAGE_KEY[] = "ProjectExplorer.ToolChain.Language";
|
||||||
|
|
||||||
namespace ProjectExplorer {
|
namespace ProjectExplorer {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -62,8 +63,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
QByteArray m_id;
|
QByteArray m_id;
|
||||||
|
QSet<ToolChain::Language> m_supportedLanguages;
|
||||||
mutable QString m_displayName;
|
mutable QString m_displayName;
|
||||||
Core::Id m_typeId;
|
Core::Id m_typeId;
|
||||||
|
ToolChain::Language m_language = ToolChain::Language::None;
|
||||||
Detection m_detection;
|
Detection m_detection;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -79,16 +82,27 @@ public:
|
|||||||
|
|
||||||
ToolChain::ToolChain(Core::Id typeId, Detection d) :
|
ToolChain::ToolChain(Core::Id typeId, Detection d) :
|
||||||
d(new Internal::ToolChainPrivate(typeId, d))
|
d(new Internal::ToolChainPrivate(typeId, d))
|
||||||
{ }
|
{
|
||||||
|
}
|
||||||
|
|
||||||
ToolChain::ToolChain(const ToolChain &other) :
|
ToolChain::ToolChain(const ToolChain &other) :
|
||||||
d(new Internal::ToolChainPrivate(other.d->m_typeId, ManualDetection))
|
d(new Internal::ToolChainPrivate(other.d->m_typeId, ManualDetection))
|
||||||
{
|
{
|
||||||
|
d->m_language = other.d->m_language;
|
||||||
|
|
||||||
// leave the autodetection bit at false.
|
// leave the autodetection bit at false.
|
||||||
d->m_displayName = QCoreApplication::translate("ProjectExplorer::ToolChain", "Clone of %1")
|
d->m_displayName = QCoreApplication::translate("ProjectExplorer::ToolChain", "Clone of %1")
|
||||||
.arg(other.displayName());
|
.arg(other.displayName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ToolChain::setLanguage(const ToolChain::Language &l)
|
||||||
|
{
|
||||||
|
QTC_ASSERT(d->m_language == Language::None, return);
|
||||||
|
QTC_ASSERT(l != Language::None, return);
|
||||||
|
|
||||||
|
d->m_language = l;
|
||||||
|
}
|
||||||
|
|
||||||
ToolChain::~ToolChain()
|
ToolChain::~ToolChain()
|
||||||
{
|
{
|
||||||
delete d;
|
delete d;
|
||||||
@@ -135,6 +149,30 @@ Core::Id ToolChain::typeId() const
|
|||||||
return d->m_typeId;
|
return d->m_typeId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const QSet<ToolChain::Language> &ToolChain::allLanguages()
|
||||||
|
{
|
||||||
|
static QSet<Language> languages({ Language::C, Language::Cxx });
|
||||||
|
return languages;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString ToolChain::languageDisplayName(Language language)
|
||||||
|
{
|
||||||
|
switch (language) {
|
||||||
|
case Language::None:
|
||||||
|
return QCoreApplication::translate("ProjectExplorer::ToolChain", "None");
|
||||||
|
case Language::C:
|
||||||
|
return QCoreApplication::translate("ProjectExplorer::ToolChain", "C");
|
||||||
|
case Language::Cxx:
|
||||||
|
return QCoreApplication::translate("ProjectExplorer::ToolChain", "C++");
|
||||||
|
};
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
ToolChain::Language ToolChain::language() const
|
||||||
|
{
|
||||||
|
return d->m_language;
|
||||||
|
}
|
||||||
|
|
||||||
bool ToolChain::canClone() const
|
bool ToolChain::canClone() const
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@@ -162,6 +200,7 @@ QVariantMap ToolChain::toMap() const
|
|||||||
result.insert(QLatin1String(ID_KEY), idToSave);
|
result.insert(QLatin1String(ID_KEY), idToSave);
|
||||||
result.insert(QLatin1String(DISPLAY_NAME_KEY), displayName());
|
result.insert(QLatin1String(DISPLAY_NAME_KEY), displayName());
|
||||||
result.insert(QLatin1String(AUTODETECT_KEY), isAutoDetected());
|
result.insert(QLatin1String(AUTODETECT_KEY), isAutoDetected());
|
||||||
|
result.insert(QLatin1String(LANGUAGE_KEY), static_cast<int>(language()));
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -199,6 +238,13 @@ bool ToolChain::fromMap(const QVariantMap &data)
|
|||||||
const bool autoDetect = data.value(QLatin1String(AUTODETECT_KEY), false).toBool();
|
const bool autoDetect = data.value(QLatin1String(AUTODETECT_KEY), false).toBool();
|
||||||
d->m_detection = autoDetect ? AutoDetectionFromSettings : ManualDetection;
|
d->m_detection = autoDetect ? AutoDetectionFromSettings : ManualDetection;
|
||||||
|
|
||||||
|
bool ok;
|
||||||
|
d->m_language
|
||||||
|
= static_cast<Language>(data.value(QLatin1String(LANGUAGE_KEY),
|
||||||
|
static_cast<int>(Language::Cxx)).toInt(&ok));
|
||||||
|
if (!ok)
|
||||||
|
d->m_language = Language::Cxx;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@
|
|||||||
#include <utils/fileutils.h>
|
#include <utils/fileutils.h>
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QSet>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QVariantMap>
|
#include <QVariantMap>
|
||||||
|
|
||||||
@@ -110,6 +111,16 @@ public:
|
|||||||
virtual void addToEnvironment(Utils::Environment &env) const = 0;
|
virtual void addToEnvironment(Utils::Environment &env) const = 0;
|
||||||
virtual QString makeCommand(const Utils::Environment &env) const = 0;
|
virtual QString makeCommand(const Utils::Environment &env) const = 0;
|
||||||
|
|
||||||
|
enum class Language {
|
||||||
|
None = 0,
|
||||||
|
C,
|
||||||
|
Cxx
|
||||||
|
};
|
||||||
|
static const QSet<Language>& allLanguages();
|
||||||
|
static QString languageDisplayName(Language language);
|
||||||
|
|
||||||
|
Language language() const;
|
||||||
|
|
||||||
virtual Utils::FileName compilerCommand() const = 0;
|
virtual Utils::FileName compilerCommand() const = 0;
|
||||||
virtual IOutputParser *outputParser() const = 0;
|
virtual IOutputParser *outputParser() const = 0;
|
||||||
|
|
||||||
@@ -124,10 +135,13 @@ public:
|
|||||||
virtual QVariantMap toMap() const;
|
virtual QVariantMap toMap() const;
|
||||||
virtual QList<Task> validateKit(const Kit *k) const;
|
virtual QList<Task> validateKit(const Kit *k) const;
|
||||||
|
|
||||||
|
void setLanguage(const Language &l);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
explicit ToolChain(Core::Id typeId, Detection d);
|
explicit ToolChain(Core::Id typeId, Detection d);
|
||||||
explicit ToolChain(const ToolChain &);
|
explicit ToolChain(const ToolChain &);
|
||||||
|
|
||||||
|
|
||||||
void toolChainUpdated();
|
void toolChainUpdated();
|
||||||
|
|
||||||
// Make sure to call this function when deriving!
|
// Make sure to call this function when deriving!
|
||||||
@@ -168,4 +182,9 @@ private:
|
|||||||
QString m_displayName;
|
QString m_displayName;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline uint qHash(const ProjectExplorer::ToolChain::Language &l, uint seed = 0)
|
||||||
|
{
|
||||||
|
return QT_PREPEND_NAMESPACE(qHash)(static_cast<int>(l), seed);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ProjectExplorer
|
} // namespace ProjectExplorer
|
||||||
|
|||||||
Reference in New Issue
Block a user