From 064ebaf0a47d52bcbbf32d34234155b407b227d1 Mon Sep 17 00:00:00 2001 From: hjk Date: Thu, 28 Sep 2023 15:27:42 +0200 Subject: [PATCH] ProjectExplorer: Move autodetection checker creation ... to a later point in time, closer to its use. Change-Id: I578f818a9e11f0cbdbaece58a4b2b55ed482f65e Reviewed-by: Christian Kandeler Reviewed-by: --- src/plugins/projectexplorer/gcctoolchain.cpp | 40 ++++++++++---------- src/plugins/projectexplorer/gcctoolchain.h | 3 +- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 02fdc2b75d0..ecdb89d0e0a 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -1384,22 +1384,17 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co // MinGW - static const auto tcChecker = [](const ToolChain *tc) { - return tc->targetAbi().osFlavor() == Abi::WindowsMSysFlavor; - }; - result += autoDetectToolchains(findCompilerCandidates(os, executables, "g++", true), Constants::CXX_LANGUAGE_ID, Constants::MINGW_TOOLCHAIN_TYPEID, detector.alreadyKnown, - GccToolChain::MinGW, - tcChecker); + GccToolChain::MinGW); + result += autoDetectToolchains(findCompilerCandidates(os, executables, "gcc", true), Constants::C_LANGUAGE_ID, Constants::MINGW_TOOLCHAIN_TYPEID, detector.alreadyKnown, - GccToolChain::MinGW, - tcChecker); + GccToolChain::MinGW); // Clang @@ -1434,23 +1429,16 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co // Gcc is almost never what you want on macOS, but it is by default found in /usr/bin if (!HostOsInfo::isMacHost() || detector.device->type() != Constants::DESKTOP_DEVICE_TYPE) { - static const auto tcChecker = [](const ToolChain *tc) { - return tc->targetAbi().osFlavor() != Abi::WindowsMSysFlavor - && tc->compilerCommand().fileName() != "c89-gcc" - && tc->compilerCommand().fileName() != "c99-gcc"; - }; result += autoDetectToolchains(findCompilerCandidates(os, executables, "g++", true), Constants::CXX_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID, detector.alreadyKnown, - GccToolChain::RealGcc, - tcChecker); + GccToolChain::RealGcc); result += autoDetectToolchains(findCompilerCandidates(os, executables, "gcc", true), Constants::C_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID, detector.alreadyKnown, - GccToolChain::RealGcc, - tcChecker); + GccToolChain::RealGcc); } return result; @@ -1528,11 +1516,25 @@ Toolchains GccToolChainFactory::autoDetectToolchains(const FilePaths &compilerPa const Id language, const Id requiredTypeId, const Toolchains &known, - const GccToolChain::SubType subType, - const ToolchainChecker &checker) + const GccToolChain::SubType subType) { + ToolchainChecker checker; + + if (subType == GccToolChain::MinGW) { + checker = [](const ToolChain *tc) { + return tc->targetAbi().osFlavor() == Abi::WindowsMSysFlavor; + }; + } else if (subType == GccToolChain::RealGcc) { + checker = [](const ToolChain *tc) { + return tc->targetAbi().osFlavor() != Abi::WindowsMSysFlavor + && tc->compilerCommand().fileName() != "c89-gcc" + && tc->compilerCommand().fileName() != "c99-gcc"; + }; + } + Toolchains existingCandidates = filtered(known, [language](const ToolChain *tc) { return tc->language() == language; }); + Toolchains result; for (const FilePath &compilerPath : std::as_const(compilerPaths)) { bool alreadyExists = false; diff --git a/src/plugins/projectexplorer/gcctoolchain.h b/src/plugins/projectexplorer/gcctoolchain.h index 542adb22d58..5ed17857eaf 100644 --- a/src/plugins/projectexplorer/gcctoolchain.h +++ b/src/plugins/projectexplorer/gcctoolchain.h @@ -197,8 +197,7 @@ private: const Utils::Id language, const Utils::Id requiredTypeId, const Toolchains &known, - const GccToolChain::SubType subType, - const ToolchainChecker &checker = {}); + const GccToolChain::SubType subType); static Toolchains autoDetectToolChain(const ToolChainDescription &tcd, const GccToolChain::SubType subType, const ToolchainChecker &checker = {});