forked from qt-creator/qt-creator
ToolChains: Implement detection of toolchains based on compiler path
Do not bother to implement this functionality for toolchains that are assumed to be completely auto-detected (e.g. MSVC) or require infrastructure around the toolchains to be useful (e.g. embedded platforms). Change-Id: I3e7dfe2f3c30a0d2d2bb16364895151f95b16423 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -101,6 +101,17 @@ QList<ToolChain *> NimToolChainFactory::autoDetect(const QList<ToolChain *> &alr
|
||||
return result;
|
||||
}
|
||||
|
||||
QList<ToolChain *> NimToolChainFactory::autoDetect(const FileName &compilerPath, const Core::Id &language)
|
||||
{
|
||||
QList<ToolChain *> result;
|
||||
if (language == Constants::C_NIMLANGUAGE_ID) {
|
||||
auto tc = new NimToolChain(ToolChain::ManualDetection);
|
||||
tc->setCompilerCommand(compilerPath);
|
||||
result.append(tc);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
NimToolChainConfigWidget::NimToolChainConfigWidget(NimToolChain *tc)
|
||||
: ToolChainConfigWidget(tc)
|
||||
, m_compilerCommand(new PathChooser)
|
||||
|
||||
@@ -47,6 +47,7 @@ public:
|
||||
ProjectExplorer::ToolChain *restore(const QVariantMap &data) final;
|
||||
QSet<Core::Id> supportedLanguages() const final;
|
||||
QList<ProjectExplorer::ToolChain *> autoDetect(const QList<ProjectExplorer::ToolChain *> &alreadyKnown) final;
|
||||
QList<ProjectExplorer::ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final;
|
||||
};
|
||||
|
||||
class NimToolChainConfigWidget : public ProjectExplorer::ToolChainConfigWidget
|
||||
|
||||
@@ -798,6 +798,15 @@ QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alr
|
||||
return tcs;
|
||||
}
|
||||
|
||||
QList<ToolChain *> GccToolChainFactory::autoDetect(const FileName &compilerPath, const Core::Id &language)
|
||||
{
|
||||
const QString fileName = compilerPath.fileName();
|
||||
if ((language == Constants::C_LANGUAGE_ID && fileName.startsWith("gcc"))
|
||||
|| (language == Constants::CXX_LANGUAGE_ID && fileName.startsWith("g++")))
|
||||
return autoDetectToolChain(compilerPath, language);
|
||||
return QList<ToolChain *>();
|
||||
}
|
||||
|
||||
// Used by the ToolChainManager to restore user-generated tool chains
|
||||
bool GccToolChainFactory::canRestore(const QVariantMap &data)
|
||||
{
|
||||
@@ -1170,6 +1179,15 @@ QList<ToolChain *> ClangToolChainFactory::autoDetect(const QList<ToolChain *> &a
|
||||
return result;
|
||||
}
|
||||
|
||||
QList<ToolChain *> ClangToolChainFactory::autoDetect(const FileName &compilerPath, const Core::Id &language)
|
||||
{
|
||||
const QString fileName = compilerPath.fileName();
|
||||
if ((language == Constants::C_LANGUAGE_ID && fileName.startsWith("clang") && !fileName.startsWith("clang++"))
|
||||
|| (language == Constants::CXX_LANGUAGE_ID && fileName.startsWith("clang++")))
|
||||
return autoDetectToolChain(compilerPath, language);
|
||||
return QList<ToolChain *>();
|
||||
}
|
||||
|
||||
bool ClangToolChainFactory::canRestore(const QVariantMap &data)
|
||||
{
|
||||
return typeIdFromMap(data) == Constants::CLANG_TOOLCHAIN_TYPEID;
|
||||
@@ -1255,6 +1273,17 @@ QList<ToolChain *> MingwToolChainFactory::autoDetect(const QList<ToolChain *> &a
|
||||
return result;
|
||||
}
|
||||
|
||||
QList<ToolChain *> MingwToolChainFactory::autoDetect(const FileName &compilerPath, const Core::Id &language)
|
||||
{
|
||||
Abi ha = Abi::hostAbi();
|
||||
ha = Abi(ha.architecture(), Abi::WindowsOS, Abi::WindowsMSysFlavor, Abi::PEFormat, ha.wordWidth());
|
||||
const QString fileName = compilerPath.fileName();
|
||||
if ((language == Constants::C_LANGUAGE_ID && fileName.startsWith("gcc"))
|
||||
|| (language == Constants::CXX_LANGUAGE_ID && fileName.startsWith("g++")))
|
||||
return autoDetectToolChain(compilerPath, language, ha);
|
||||
return QList<ToolChain *>();
|
||||
}
|
||||
|
||||
bool MingwToolChainFactory::canRestore(const QVariantMap &data)
|
||||
{
|
||||
return typeIdFromMap(data) == Constants::MINGW_TOOLCHAIN_TYPEID;
|
||||
@@ -1336,6 +1365,14 @@ QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const QList<ToolChain *>
|
||||
Constants::LINUXICC_TOOLCHAIN_TYPEID, alreadyKnown);
|
||||
}
|
||||
|
||||
QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const FileName &compilerPath, const Core::Id &language)
|
||||
{
|
||||
const QString fileName = compilerPath.fileName();
|
||||
if (language == Constants::CXX_LANGUAGE_ID && fileName.startsWith("icpc"))
|
||||
return autoDetectToolChain(compilerPath, language);
|
||||
return QList<ToolChain *>();
|
||||
}
|
||||
|
||||
bool LinuxIccToolChainFactory::canRestore(const QVariantMap &data)
|
||||
{
|
||||
return typeIdFromMap(data) == Constants::LINUXICC_TOOLCHAIN_TYPEID;
|
||||
|
||||
@@ -52,6 +52,7 @@ public:
|
||||
QSet<Core::Id> supportedLanguages() const override;
|
||||
|
||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
|
||||
QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) override;
|
||||
|
||||
bool canCreate() override;
|
||||
ToolChain *create(Core::Id language) override;
|
||||
@@ -114,6 +115,7 @@ public:
|
||||
QSet<Core::Id> supportedLanguages() const override;
|
||||
|
||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
|
||||
QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final;
|
||||
|
||||
bool canRestore(const QVariantMap &data) override;
|
||||
|
||||
@@ -134,6 +136,7 @@ public:
|
||||
QSet<Core::Id> supportedLanguages() const override;
|
||||
|
||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
|
||||
QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final;
|
||||
|
||||
bool canRestore(const QVariantMap &data) override;
|
||||
|
||||
@@ -154,6 +157,7 @@ public:
|
||||
QSet<Core::Id> supportedLanguages() const override;
|
||||
|
||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
|
||||
QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final;
|
||||
|
||||
bool canRestore(const QVariantMap &data) override;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user