ProjectExplorer: Move autodetection checker creation

... to a later point in time, closer to its use.

Change-Id: I578f818a9e11f0cbdbaece58a4b2b55ed482f65e
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
hjk
2023-09-28 15:27:42 +02:00
parent 58c8fe823c
commit 064ebaf0a4
2 changed files with 22 additions and 21 deletions

View File

@@ -1384,22 +1384,17 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co
// MinGW // MinGW
static const auto tcChecker = [](const ToolChain *tc) {
return tc->targetAbi().osFlavor() == Abi::WindowsMSysFlavor;
};
result += autoDetectToolchains(findCompilerCandidates(os, executables, "g++", true), result += autoDetectToolchains(findCompilerCandidates(os, executables, "g++", true),
Constants::CXX_LANGUAGE_ID, Constants::CXX_LANGUAGE_ID,
Constants::MINGW_TOOLCHAIN_TYPEID, Constants::MINGW_TOOLCHAIN_TYPEID,
detector.alreadyKnown, detector.alreadyKnown,
GccToolChain::MinGW, GccToolChain::MinGW);
tcChecker);
result += autoDetectToolchains(findCompilerCandidates(os, executables, "gcc", true), result += autoDetectToolchains(findCompilerCandidates(os, executables, "gcc", true),
Constants::C_LANGUAGE_ID, Constants::C_LANGUAGE_ID,
Constants::MINGW_TOOLCHAIN_TYPEID, Constants::MINGW_TOOLCHAIN_TYPEID,
detector.alreadyKnown, detector.alreadyKnown,
GccToolChain::MinGW, GccToolChain::MinGW);
tcChecker);
// Clang // 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 // 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) { 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), result += autoDetectToolchains(findCompilerCandidates(os, executables, "g++", true),
Constants::CXX_LANGUAGE_ID, Constants::CXX_LANGUAGE_ID,
Constants::GCC_TOOLCHAIN_TYPEID, Constants::GCC_TOOLCHAIN_TYPEID,
detector.alreadyKnown, detector.alreadyKnown,
GccToolChain::RealGcc, GccToolChain::RealGcc);
tcChecker);
result += autoDetectToolchains(findCompilerCandidates(os, executables, "gcc", true), result += autoDetectToolchains(findCompilerCandidates(os, executables, "gcc", true),
Constants::C_LANGUAGE_ID, Constants::C_LANGUAGE_ID,
Constants::GCC_TOOLCHAIN_TYPEID, Constants::GCC_TOOLCHAIN_TYPEID,
detector.alreadyKnown, detector.alreadyKnown,
GccToolChain::RealGcc, GccToolChain::RealGcc);
tcChecker);
} }
return result; return result;
@@ -1528,11 +1516,25 @@ Toolchains GccToolChainFactory::autoDetectToolchains(const FilePaths &compilerPa
const Id language, const Id language,
const Id requiredTypeId, const Id requiredTypeId,
const Toolchains &known, const Toolchains &known,
const GccToolChain::SubType subType, const GccToolChain::SubType subType)
const ToolchainChecker &checker)
{ {
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, Toolchains existingCandidates = filtered(known,
[language](const ToolChain *tc) { return tc->language() == language; }); [language](const ToolChain *tc) { return tc->language() == language; });
Toolchains result; Toolchains result;
for (const FilePath &compilerPath : std::as_const(compilerPaths)) { for (const FilePath &compilerPath : std::as_const(compilerPaths)) {
bool alreadyExists = false; bool alreadyExists = false;

View File

@@ -197,8 +197,7 @@ private:
const Utils::Id language, const Utils::Id language,
const Utils::Id requiredTypeId, const Utils::Id requiredTypeId,
const Toolchains &known, const Toolchains &known,
const GccToolChain::SubType subType, const GccToolChain::SubType subType);
const ToolchainChecker &checker = {});
static Toolchains autoDetectToolChain(const ToolChainDescription &tcd, static Toolchains autoDetectToolChain(const ToolChainDescription &tcd,
const GccToolChain::SubType subType, const GccToolChain::SubType subType,
const ToolchainChecker &checker = {}); const ToolchainChecker &checker = {});