diff --git a/src/plugins/nim/project/nimtoolchainfactory.cpp b/src/plugins/nim/project/nimtoolchainfactory.cpp index c2352abecc2..3978bf0e6ee 100644 --- a/src/plugins/nim/project/nimtoolchainfactory.cpp +++ b/src/plugins/nim/project/nimtoolchainfactory.cpp @@ -101,6 +101,17 @@ QList NimToolChainFactory::autoDetect(const QList &alr return result; } +QList NimToolChainFactory::autoDetect(const FileName &compilerPath, const Core::Id &language) +{ + QList 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) diff --git a/src/plugins/nim/project/nimtoolchainfactory.h b/src/plugins/nim/project/nimtoolchainfactory.h index 9c0d8fbc13f..4ba0a028ad8 100644 --- a/src/plugins/nim/project/nimtoolchainfactory.h +++ b/src/plugins/nim/project/nimtoolchainfactory.h @@ -47,6 +47,7 @@ public: ProjectExplorer::ToolChain *restore(const QVariantMap &data) final; QSet supportedLanguages() const final; QList autoDetect(const QList &alreadyKnown) final; + QList autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final; }; class NimToolChainConfigWidget : public ProjectExplorer::ToolChainConfigWidget diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index a3aa2d4eea3..fa79ae5ce1c 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -798,6 +798,15 @@ QList GccToolChainFactory::autoDetect(const QList &alr return tcs; } +QList 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(); +} + // Used by the ToolChainManager to restore user-generated tool chains bool GccToolChainFactory::canRestore(const QVariantMap &data) { @@ -1170,6 +1179,15 @@ QList ClangToolChainFactory::autoDetect(const QList &a return result; } +QList 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(); +} + bool ClangToolChainFactory::canRestore(const QVariantMap &data) { return typeIdFromMap(data) == Constants::CLANG_TOOLCHAIN_TYPEID; @@ -1255,6 +1273,17 @@ QList MingwToolChainFactory::autoDetect(const QList &a return result; } +QList 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(); +} + bool MingwToolChainFactory::canRestore(const QVariantMap &data) { return typeIdFromMap(data) == Constants::MINGW_TOOLCHAIN_TYPEID; @@ -1336,6 +1365,14 @@ QList LinuxIccToolChainFactory::autoDetect(const QList Constants::LINUXICC_TOOLCHAIN_TYPEID, alreadyKnown); } +QList 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(); +} + bool LinuxIccToolChainFactory::canRestore(const QVariantMap &data) { return typeIdFromMap(data) == Constants::LINUXICC_TOOLCHAIN_TYPEID; diff --git a/src/plugins/projectexplorer/gcctoolchainfactories.h b/src/plugins/projectexplorer/gcctoolchainfactories.h index 2ed74b3039d..4417fc712fd 100644 --- a/src/plugins/projectexplorer/gcctoolchainfactories.h +++ b/src/plugins/projectexplorer/gcctoolchainfactories.h @@ -52,6 +52,7 @@ public: QSet supportedLanguages() const override; QList autoDetect(const QList &alreadyKnown) override; + QList 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 supportedLanguages() const override; QList autoDetect(const QList &alreadyKnown) override; + QList autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final; bool canRestore(const QVariantMap &data) override; @@ -134,6 +136,7 @@ public: QSet supportedLanguages() const override; QList autoDetect(const QList &alreadyKnown) override; + QList autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final; bool canRestore(const QVariantMap &data) override; @@ -154,6 +157,7 @@ public: QSet supportedLanguages() const override; QList autoDetect(const QList &alreadyKnown) override; + QList autoDetect(const Utils::FileName &compilerPath, const Core::Id &language) final; bool canRestore(const QVariantMap &data) override;