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;
|
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)
|
NimToolChainConfigWidget::NimToolChainConfigWidget(NimToolChain *tc)
|
||||||
: ToolChainConfigWidget(tc)
|
: ToolChainConfigWidget(tc)
|
||||||
, m_compilerCommand(new PathChooser)
|
, m_compilerCommand(new PathChooser)
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ public:
|
|||||||
ProjectExplorer::ToolChain *restore(const QVariantMap &data) final;
|
ProjectExplorer::ToolChain *restore(const QVariantMap &data) final;
|
||||||
QSet<Core::Id> supportedLanguages() const final;
|
QSet<Core::Id> supportedLanguages() const final;
|
||||||
QList<ProjectExplorer::ToolChain *> autoDetect(const QList<ProjectExplorer::ToolChain *> &alreadyKnown) 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
|
class NimToolChainConfigWidget : public ProjectExplorer::ToolChainConfigWidget
|
||||||
|
|||||||
@@ -798,6 +798,15 @@ QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alr
|
|||||||
return tcs;
|
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
|
// Used by the ToolChainManager to restore user-generated tool chains
|
||||||
bool GccToolChainFactory::canRestore(const QVariantMap &data)
|
bool GccToolChainFactory::canRestore(const QVariantMap &data)
|
||||||
{
|
{
|
||||||
@@ -1170,6 +1179,15 @@ QList<ToolChain *> ClangToolChainFactory::autoDetect(const QList<ToolChain *> &a
|
|||||||
return result;
|
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)
|
bool ClangToolChainFactory::canRestore(const QVariantMap &data)
|
||||||
{
|
{
|
||||||
return typeIdFromMap(data) == Constants::CLANG_TOOLCHAIN_TYPEID;
|
return typeIdFromMap(data) == Constants::CLANG_TOOLCHAIN_TYPEID;
|
||||||
@@ -1255,6 +1273,17 @@ QList<ToolChain *> MingwToolChainFactory::autoDetect(const QList<ToolChain *> &a
|
|||||||
return result;
|
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)
|
bool MingwToolChainFactory::canRestore(const QVariantMap &data)
|
||||||
{
|
{
|
||||||
return typeIdFromMap(data) == Constants::MINGW_TOOLCHAIN_TYPEID;
|
return typeIdFromMap(data) == Constants::MINGW_TOOLCHAIN_TYPEID;
|
||||||
@@ -1336,6 +1365,14 @@ QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const QList<ToolChain *>
|
|||||||
Constants::LINUXICC_TOOLCHAIN_TYPEID, alreadyKnown);
|
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)
|
bool LinuxIccToolChainFactory::canRestore(const QVariantMap &data)
|
||||||
{
|
{
|
||||||
return typeIdFromMap(data) == Constants::LINUXICC_TOOLCHAIN_TYPEID;
|
return typeIdFromMap(data) == Constants::LINUXICC_TOOLCHAIN_TYPEID;
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ public:
|
|||||||
QSet<Core::Id> supportedLanguages() const override;
|
QSet<Core::Id> supportedLanguages() const override;
|
||||||
|
|
||||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
|
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) override;
|
||||||
|
QList<ToolChain *> autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) override;
|
||||||
|
|
||||||
bool canCreate() override;
|
bool canCreate() override;
|
||||||
ToolChain *create(Core::Id language) override;
|
ToolChain *create(Core::Id language) override;
|
||||||
@@ -114,6 +115,7 @@ public:
|
|||||||
QSet<Core::Id> supportedLanguages() const override;
|
QSet<Core::Id> supportedLanguages() const override;
|
||||||
|
|
||||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) 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;
|
bool canRestore(const QVariantMap &data) override;
|
||||||
|
|
||||||
@@ -134,6 +136,7 @@ public:
|
|||||||
QSet<Core::Id> supportedLanguages() const override;
|
QSet<Core::Id> supportedLanguages() const override;
|
||||||
|
|
||||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) 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;
|
bool canRestore(const QVariantMap &data) override;
|
||||||
|
|
||||||
@@ -154,6 +157,7 @@ public:
|
|||||||
QSet<Core::Id> supportedLanguages() const override;
|
QSet<Core::Id> supportedLanguages() const override;
|
||||||
|
|
||||||
QList<ToolChain *> autoDetect(const QList<ToolChain *> &alreadyKnown) 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;
|
bool canRestore(const QVariantMap &data) override;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user