forked from qt-creator/qt-creator
ToolChain: Make sure all ToolChains have a language set
* Add code to toolchains * Assert that this is the case in the toolchainmanager Change-Id: I82452689e83279fd9d1afb3140b0070bef9b6cd8 Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
This commit is contained in:
@@ -63,10 +63,11 @@ static const char ANDROID_NDK_TC_VERION[] = "Qt4ProjectManager.Android.NDK_TC_VE
|
|||||||
QHash<Abi, QList<int> > AndroidToolChainFactory::m_newestVersionForAbi;
|
QHash<Abi, QList<int> > AndroidToolChainFactory::m_newestVersionForAbi;
|
||||||
FileName AndroidToolChainFactory::m_ndkLocation;
|
FileName AndroidToolChainFactory::m_ndkLocation;
|
||||||
|
|
||||||
AndroidToolChain::AndroidToolChain(const Abi &abi, const QString &ndkToolChainVersion, Detection d)
|
AndroidToolChain::AndroidToolChain(const Abi &abi, const QString &ndkToolChainVersion, Language l, Detection d)
|
||||||
: GccToolChain(Constants::ANDROID_TOOLCHAIN_ID, d),
|
: GccToolChain(Constants::ANDROID_TOOLCHAIN_ID, d),
|
||||||
m_ndkToolChainVersion(ndkToolChainVersion), m_secondaryToolChain(false)
|
m_ndkToolChainVersion(ndkToolChainVersion), m_secondaryToolChain(false)
|
||||||
{
|
{
|
||||||
|
setLanguage(l);
|
||||||
setTargetAbi(abi);
|
setTargetAbi(abi);
|
||||||
setDisplayName(QString::fromLatin1("Android GCC (%1-%2)")
|
setDisplayName(QString::fromLatin1("Android GCC (%1-%2)")
|
||||||
.arg(AndroidConfig::displayName(targetAbi()))
|
.arg(AndroidConfig::displayName(targetAbi()))
|
||||||
@@ -392,7 +393,8 @@ AndroidToolChainFactory::autodetectToolChainsForNdk(const FileName &ndkPath,
|
|||||||
|
|
||||||
AndroidToolChain *tc = findToolChain(compilerPath, alreadyKnown);
|
AndroidToolChain *tc = findToolChain(compilerPath, alreadyKnown);
|
||||||
if (!tc) {
|
if (!tc) {
|
||||||
tc = new AndroidToolChain(abi, version, ToolChain::AutoDetection);
|
tc = new AndroidToolChain(abi, version, ToolChain::Language::Cxx,
|
||||||
|
ToolChain::AutoDetection);
|
||||||
tc->resetToolChain(compilerPath);
|
tc->resetToolChain(compilerPath);
|
||||||
}
|
}
|
||||||
result.append(tc);
|
result.append(tc);
|
||||||
|
|||||||
@@ -62,7 +62,8 @@ protected:
|
|||||||
DetectedAbisResult detectSupportedAbis() const override;
|
DetectedAbisResult detectSupportedAbis() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit AndroidToolChain(const ProjectExplorer::Abi &abi, const QString &ndkToolChainVersion, Detection d);
|
explicit AndroidToolChain(const ProjectExplorer::Abi &abi, const QString &ndkToolChainVersion,
|
||||||
|
Language l, Detection d);
|
||||||
AndroidToolChain();
|
AndroidToolChain();
|
||||||
AndroidToolChain(const AndroidToolChain &);
|
AndroidToolChain(const AndroidToolChain &);
|
||||||
|
|
||||||
|
|||||||
@@ -355,6 +355,7 @@ void IosConfigurations::setDeveloperPath(const FileName &devPath)
|
|||||||
static ClangToolChain *createToolChain(const Platform &platform)
|
static ClangToolChain *createToolChain(const Platform &platform)
|
||||||
{
|
{
|
||||||
ClangToolChain *toolChain = new ClangToolChain(ToolChain::AutoDetection);
|
ClangToolChain *toolChain = new ClangToolChain(ToolChain::AutoDetection);
|
||||||
|
toolChain->setLanguage(ToolChain::Language::Cxx);
|
||||||
toolChain->setDisplayName(platform.name);
|
toolChain->setDisplayName(platform.name);
|
||||||
toolChain->setPlatformCodeGenFlags(platform.backendFlags);
|
toolChain->setPlatformCodeGenFlags(platform.backendFlags);
|
||||||
toolChain->setPlatformLinkerFlags(platform.backendFlags);
|
toolChain->setPlatformLinkerFlags(platform.backendFlags);
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ namespace ProjectExplorer {
|
|||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
AbstractMsvcToolChain::AbstractMsvcToolChain(Core::Id typeId,
|
AbstractMsvcToolChain::AbstractMsvcToolChain(Core::Id typeId,
|
||||||
|
const Language &l,
|
||||||
Detection d,
|
Detection d,
|
||||||
const Abi &abi,
|
const Abi &abi,
|
||||||
const QString& vcvarsBat) : ToolChain(typeId, d),
|
const QString& vcvarsBat) : ToolChain(typeId, d),
|
||||||
@@ -53,6 +54,7 @@ AbstractMsvcToolChain::AbstractMsvcToolChain(Core::Id typeId,
|
|||||||
Q_ASSERT(abi.binaryFormat() == Abi::PEFormat);
|
Q_ASSERT(abi.binaryFormat() == Abi::PEFormat);
|
||||||
Q_ASSERT(abi.osFlavor() != Abi::WindowsMSysFlavor);
|
Q_ASSERT(abi.osFlavor() != Abi::WindowsMSysFlavor);
|
||||||
Q_ASSERT(!m_vcvarsBat.isEmpty());
|
Q_ASSERT(!m_vcvarsBat.isEmpty());
|
||||||
|
setLanguage(l);
|
||||||
}
|
}
|
||||||
|
|
||||||
AbstractMsvcToolChain::AbstractMsvcToolChain(Core::Id typeId, Detection d) :
|
AbstractMsvcToolChain::AbstractMsvcToolChain(Core::Id typeId, Detection d) :
|
||||||
|
|||||||
@@ -38,7 +38,8 @@ namespace Internal {
|
|||||||
class PROJECTEXPLORER_EXPORT AbstractMsvcToolChain : public ToolChain
|
class PROJECTEXPLORER_EXPORT AbstractMsvcToolChain : public ToolChain
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit AbstractMsvcToolChain(Core::Id typeId, Detection d, const Abi &abi, const QString& vcvarsBat);
|
explicit AbstractMsvcToolChain(Core::Id typeId, const Language &l, Detection d,
|
||||||
|
const Abi &abi, const QString& vcvarsBat);
|
||||||
explicit AbstractMsvcToolChain(Core::Id typeId, Detection d);
|
explicit AbstractMsvcToolChain(Core::Id typeId, Detection d);
|
||||||
|
|
||||||
Abi targetAbi() const override;
|
Abi targetAbi() const override;
|
||||||
|
|||||||
@@ -88,7 +88,9 @@ static const char messageCapKeyC[] = "ProjectExplorer.CustomToolChain.MessageCap
|
|||||||
CustomToolChain::CustomToolChain(Detection d) :
|
CustomToolChain::CustomToolChain(Detection d) :
|
||||||
ToolChain(Constants::CUSTOM_TOOLCHAIN_TYPEID, d),
|
ToolChain(Constants::CUSTOM_TOOLCHAIN_TYPEID, d),
|
||||||
m_outputParser(Gcc)
|
m_outputParser(Gcc)
|
||||||
{ }
|
{
|
||||||
|
setLanguage(Language::Cxx);
|
||||||
|
}
|
||||||
|
|
||||||
QString CustomToolChain::typeDisplayName() const
|
QString CustomToolChain::typeDisplayName() const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -776,7 +776,9 @@ bool GccToolChainFactory::canCreate()
|
|||||||
|
|
||||||
ToolChain *GccToolChainFactory::create()
|
ToolChain *GccToolChainFactory::create()
|
||||||
{
|
{
|
||||||
return createToolChain(false);
|
ToolChain *tc = createToolChain(false);
|
||||||
|
tc->setLanguage({ ToolChain::Language::Cxx });
|
||||||
|
return tc;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
||||||
@@ -860,6 +862,7 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &comp
|
|||||||
tc->setTargetAbi(abi);
|
tc->setTargetAbi(abi);
|
||||||
tc->setOriginalTargetTriple(detectedAbis.originalTargetTriple);
|
tc->setOriginalTargetTriple(detectedAbis.originalTargetTriple);
|
||||||
tc->setDisplayName(tc->defaultDisplayName()); // reset displayname
|
tc->setDisplayName(tc->defaultDisplayName()); // reset displayname
|
||||||
|
tc->setLanguage(ToolChain::Language::Cxx);
|
||||||
|
|
||||||
result.append(tc.take());
|
result.append(tc.take());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -328,13 +328,14 @@ Utils::Environment MsvcToolChain::readEnvironmentSetting(Utils::Environment& env
|
|||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
|
|
||||||
MsvcToolChain::MsvcToolChain(const QString &name, const Abi &abi,
|
MsvcToolChain::MsvcToolChain(const QString &name, const Abi &abi,
|
||||||
const QString &varsBat, const QString &varsBatArg, Detection d) :
|
const QString &varsBat, const QString &varsBatArg, const Language &l,
|
||||||
MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID, name, abi, varsBat, varsBatArg, d)
|
Detection d) :
|
||||||
|
MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID, name, abi, varsBat, varsBatArg, l, d)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
MsvcToolChain::MsvcToolChain(Core::Id typeId, const QString &name, const Abi &abi,
|
MsvcToolChain::MsvcToolChain(Core::Id typeId, const QString &name, const Abi &abi,
|
||||||
const QString &varsBat, const QString &varsBatArg,
|
const QString &varsBat, const QString &varsBatArg, const Language &l,
|
||||||
Detection d) : AbstractMsvcToolChain(typeId, d, abi, varsBat),
|
Detection d) : AbstractMsvcToolChain(typeId, l, d, abi, varsBat),
|
||||||
m_varsBatArg(varsBatArg)
|
m_varsBatArg(varsBatArg)
|
||||||
{
|
{
|
||||||
Q_ASSERT(!name.isEmpty());
|
Q_ASSERT(!name.isEmpty());
|
||||||
@@ -342,8 +343,7 @@ MsvcToolChain::MsvcToolChain(Core::Id typeId, const QString &name, const Abi &ab
|
|||||||
setDisplayName(name);
|
setDisplayName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
MsvcToolChain::MsvcToolChain(Core::Id typeId)
|
MsvcToolChain::MsvcToolChain(Core::Id typeId) : AbstractMsvcToolChain(typeId, ManualDetection)
|
||||||
: AbstractMsvcToolChain(typeId, ManualDetection)
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
MsvcToolChain::MsvcToolChain() : MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID)
|
MsvcToolChain::MsvcToolChain() : MsvcToolChain(Constants::MSVC_TOOLCHAIN_TYPEID)
|
||||||
@@ -496,18 +496,15 @@ static const char clangClBinary[] = "clang-cl.exe";
|
|||||||
|
|
||||||
ClangClToolChain::ClangClToolChain(const QString &name, const QString &llvmDir,
|
ClangClToolChain::ClangClToolChain(const QString &name, const QString &llvmDir,
|
||||||
const Abi &abi,
|
const Abi &abi,
|
||||||
const QString &varsBat, const QString &varsBatArg,
|
const QString &varsBat, const QString &varsBatArg, const Language &l,
|
||||||
Detection d)
|
Detection d)
|
||||||
: MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID, name, abi, varsBat, varsBatArg, d)
|
: MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID, name, abi, varsBat, varsBatArg, l, d)
|
||||||
, m_llvmDir(llvmDir)
|
, m_llvmDir(llvmDir)
|
||||||
, m_compiler(Utils::FileName::fromString(m_llvmDir + QStringLiteral("/bin/") + QLatin1String(clangClBinary)))
|
, m_compiler(Utils::FileName::fromString(m_llvmDir + QStringLiteral("/bin/") + QLatin1String(clangClBinary)))
|
||||||
{
|
{ }
|
||||||
}
|
|
||||||
|
|
||||||
ClangClToolChain::ClangClToolChain()
|
ClangClToolChain::ClangClToolChain() : MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID)
|
||||||
: MsvcToolChain(Constants::CLANG_CL_TOOLCHAIN_TYPEID)
|
{ }
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ClangClToolChain::isValid() const
|
bool ClangClToolChain::isValid() const
|
||||||
{
|
{
|
||||||
@@ -632,7 +629,7 @@ static ToolChain *findOrCreateToolChain(const QList<ToolChain *> &alreadyKnown,
|
|||||||
&& mtc->varsBatArg() == varsBatArg;
|
&& mtc->varsBatArg() == varsBatArg;
|
||||||
});
|
});
|
||||||
if (!tc)
|
if (!tc)
|
||||||
tc = new MsvcToolChain(name, abi, varsBat, varsBatArg, d);
|
tc = new MsvcToolChain(name, abi, varsBat, varsBatArg, ToolChain::Language::Cxx, d);
|
||||||
return tc;
|
return tc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -671,6 +668,7 @@ static void detectCppBuildTools(QList<ToolChain *> *list)
|
|||||||
e.format, e.wordSize);
|
e.format, e.wordSize);
|
||||||
list->append(new MsvcToolChain(name + QLatin1String(e.postFix), abi,
|
list->append(new MsvcToolChain(name + QLatin1String(e.postFix), abi,
|
||||||
vcVarsBat, QLatin1String(e.varsBatArg),
|
vcVarsBat, QLatin1String(e.varsBatArg),
|
||||||
|
ToolChain::Language::Cxx,
|
||||||
ToolChain::AutoDetection));
|
ToolChain::AutoDetection));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -715,7 +713,7 @@ static void detectClangClToolChain(QList<ToolChain *> *list)
|
|||||||
+ Abi::toString(targetAbi.osFlavor()).toUpper();
|
+ Abi::toString(targetAbi.osFlavor()).toUpper();
|
||||||
list->append(new ClangClToolChain(name, path, targetAbi,
|
list->append(new ClangClToolChain(name, path, targetAbi,
|
||||||
msvcToolChain->varsBat(), msvcToolChain->varsBatArg(),
|
msvcToolChain->varsBat(), msvcToolChain->varsBatArg(),
|
||||||
ToolChain::AutoDetection));
|
ToolChain::Language::Cxx, ToolChain::AutoDetection));
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> MsvcToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> MsvcToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ public:
|
|||||||
|
|
||||||
explicit MsvcToolChain(const QString &name, const Abi &abi,
|
explicit MsvcToolChain(const QString &name, const Abi &abi,
|
||||||
const QString &varsBat, const QString &varsBatArg,
|
const QString &varsBat, const QString &varsBatArg,
|
||||||
Detection d = ManualDetection);
|
const Language &l, Detection d = ManualDetection);
|
||||||
MsvcToolChain();
|
MsvcToolChain();
|
||||||
|
|
||||||
Utils::FileNameList suggestedMkspecList() const override;
|
Utils::FileNameList suggestedMkspecList() const override;
|
||||||
@@ -76,7 +76,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
explicit MsvcToolChain(Core::Id typeId, const QString &name, const Abi &abi,
|
explicit MsvcToolChain(Core::Id typeId, const QString &name, const Abi &abi,
|
||||||
const QString &varsBat, const QString &varsBatArg,
|
const QString &varsBat, const QString &varsBatArg,
|
||||||
Detection d);
|
const Language &l, Detection d);
|
||||||
explicit MsvcToolChain(Core::Id typeId);
|
explicit MsvcToolChain(Core::Id typeId);
|
||||||
|
|
||||||
Utils::Environment readEnvironmentSetting(Utils::Environment& env) const override;
|
Utils::Environment readEnvironmentSetting(Utils::Environment& env) const override;
|
||||||
@@ -93,6 +93,7 @@ public:
|
|||||||
explicit ClangClToolChain(const QString &name, const QString &llvmDir,
|
explicit ClangClToolChain(const QString &name, const QString &llvmDir,
|
||||||
const Abi &abi,
|
const Abi &abi,
|
||||||
const QString &varsBat, const QString &varsBatArg,
|
const QString &varsBat, const QString &varsBatArg,
|
||||||
|
const Language &l,
|
||||||
Detection d = ManualDetection);
|
Detection d = ManualDetection);
|
||||||
ClangClToolChain();
|
ClangClToolChain();
|
||||||
|
|
||||||
|
|||||||
@@ -388,6 +388,7 @@ void ToolChainManager::notifyAboutUpdate(ToolChain *tc)
|
|||||||
|
|
||||||
bool ToolChainManager::registerToolChain(ToolChain *tc)
|
bool ToolChainManager::registerToolChain(ToolChain *tc)
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(tc->language() != ToolChain::Language::None, return false);
|
||||||
QTC_ASSERT(d->m_writer, return false);
|
QTC_ASSERT(d->m_writer, return false);
|
||||||
|
|
||||||
if (!tc || d->m_toolChains.contains(tc))
|
if (!tc || d->m_toolChains.contains(tc))
|
||||||
@@ -433,7 +434,10 @@ public:
|
|||||||
ToolChain("TestToolChainType", d),
|
ToolChain("TestToolChainType", d),
|
||||||
token(t),
|
token(t),
|
||||||
m_valid(v)
|
m_valid(v)
|
||||||
{ m_toolChains.append(this); }
|
{
|
||||||
|
m_toolChains.append(this);
|
||||||
|
setLanguage(ToolChain::Language::Cxx);
|
||||||
|
}
|
||||||
|
|
||||||
static QList<TTC *> toolChains();
|
static QList<TTC *> toolChains();
|
||||||
static bool hasToolChains() { return !m_toolChains.isEmpty(); }
|
static bool hasToolChains() { return !m_toolChains.isEmpty(); }
|
||||||
|
|||||||
@@ -236,8 +236,9 @@ WinCEToolChain::WinCEToolChain(const QString &name,
|
|||||||
const QString &binPath,
|
const QString &binPath,
|
||||||
const QString &includePath,
|
const QString &includePath,
|
||||||
const QString &libPath,
|
const QString &libPath,
|
||||||
|
const Language &l,
|
||||||
Detection d) :
|
Detection d) :
|
||||||
AbstractMsvcToolChain(Constants::WINCE_TOOLCHAIN_TYPEID, d, abi, vcvarsBat),
|
AbstractMsvcToolChain(Constants::WINCE_TOOLCHAIN_TYPEID, l, d, abi, vcvarsBat),
|
||||||
m_msvcVer(msvcVer),
|
m_msvcVer(msvcVer),
|
||||||
m_ceVer(ceVer),
|
m_ceVer(ceVer),
|
||||||
m_binPath(binPath),
|
m_binPath(binPath),
|
||||||
@@ -368,7 +369,8 @@ static ToolChain *findOrCreateToolChain(const QList<ToolChain *> &alreadyKnown,
|
|||||||
&& cetc->libPath() == libPath;
|
&& cetc->libPath() == libPath;
|
||||||
});
|
});
|
||||||
if (!tc)
|
if (!tc)
|
||||||
tc = new WinCEToolChain(name, abi, vcvarsBat, msvcVer, ceVer, binPath, includePath, libPath, d);
|
tc = new WinCEToolChain(name, abi, vcvarsBat, msvcVer, ceVer, binPath, includePath, libPath,
|
||||||
|
ProjectExplorer::ToolChain::Language::Cxx, d);
|
||||||
return tc;
|
return tc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ public:
|
|||||||
const QString &binPath,
|
const QString &binPath,
|
||||||
const QString &includePath,
|
const QString &includePath,
|
||||||
const QString &libPath,
|
const QString &libPath,
|
||||||
|
const Language &l,
|
||||||
Detection d = ManualDetection);
|
Detection d = ManualDetection);
|
||||||
|
|
||||||
Utils::FileNameList suggestedMkspecList() const override;
|
Utils::FileNameList suggestedMkspecList() const override;
|
||||||
|
|||||||
@@ -62,6 +62,13 @@ QnxToolChain::QnxToolChain(ToolChain::Detection d)
|
|||||||
: GccToolChain(Constants::QNX_TOOLCHAIN_ID, d)
|
: GccToolChain(Constants::QNX_TOOLCHAIN_ID, d)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
QnxToolChain::QnxToolChain(Language l, ToolChain::Detection d)
|
||||||
|
: QnxToolChain(d)
|
||||||
|
{
|
||||||
|
setLanguage(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
QString QnxToolChain::typeDisplayName() const
|
QString QnxToolChain::typeDisplayName() const
|
||||||
{
|
{
|
||||||
return QnxToolChainFactory::tr("QCC");
|
return QnxToolChainFactory::tr("QCC");
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ class QnxToolChain : public ProjectExplorer::GccToolChain
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit QnxToolChain(Detection d);
|
explicit QnxToolChain(Detection d);
|
||||||
|
explicit QnxToolChain(Language l, Detection d);
|
||||||
|
|
||||||
QString typeDisplayName() const override;
|
QString typeDisplayName() const override;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user