From fa58a55b4f16fc2206475d804af8a34fc829f29c Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 26 Sep 2023 11:50:39 +0200 Subject: [PATCH] ProjectExplorer: Move path collection in gcc autodetection one level up Closer to doing it just once. Change-Id: I8d9c7d8c4d3b7bd3afb57eb612eaae9bc4f7b616 Reviewed-by: Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/gcctoolchain.cpp | 40 +++++++++----------- src/plugins/projectexplorer/gcctoolchain.h | 4 +- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 1ac10103cca..47c91a150d4 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -1247,6 +1247,11 @@ GccToolChainFactory::GccToolChainFactory(GccToolChain::SubType subType) setUserCreatable(true); } +// FIXME: Re-order later. +static FilePaths findCompilerCandidates(const ToolchainDetector &detector, + const QString &compilerName, + bool detectVariants); + Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) const { Toolchains result; @@ -1257,14 +1262,14 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co // Linux ICC - result += autoDetectToolchains("icpc", - DetectVariants::No, + result += autoDetectToolchains(findCompilerCandidates(detector, "icpc", false), Constants::CXX_LANGUAGE_ID, Constants::LINUXICC_TOOLCHAIN_TYPEID, detector, &constructLinuxIccToolchain); - result += autoDetectToolchains("icc", - DetectVariants::Yes, + + + result += autoDetectToolchains(findCompilerCandidates(detector, "icc", true), Constants::C_LANGUAGE_ID, Constants::LINUXICC_TOOLCHAIN_TYPEID, detector, @@ -1275,15 +1280,14 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co static const auto tcChecker = [](const ToolChain *tc) { return tc->targetAbi().osFlavor() == Abi::WindowsMSysFlavor; }; - result += autoDetectToolchains("g++", - DetectVariants::Yes, + + result += autoDetectToolchains(findCompilerCandidates(detector, "g++", true), Constants::CXX_LANGUAGE_ID, Constants::MINGW_TOOLCHAIN_TYPEID, detector, &constructMinGWToolchain, tcChecker); - result += autoDetectToolchains("gcc", - DetectVariants::Yes, + result += autoDetectToolchains(findCompilerCandidates(detector, "gcc", true), Constants::C_LANGUAGE_ID, Constants::MINGW_TOOLCHAIN_TYPEID, detector, @@ -1295,14 +1299,12 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co Toolchains tcs; Toolchains known = detector.alreadyKnown; - tcs.append(autoDetectToolchains("clang++", - DetectVariants::Yes, + tcs.append(autoDetectToolchains(findCompilerCandidates(detector, "clang++", true), Constants::CXX_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID, detector, &constructClangToolchain)); - tcs.append(autoDetectToolchains("clang", - DetectVariants::Yes, + tcs.append(autoDetectToolchains(findCompilerCandidates(detector, "clang", true), Constants::C_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID, detector, @@ -1313,8 +1315,7 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co if (!compilerPath.isEmpty()) { const FilePath clang = compilerPath.parentDir().pathAppended("clang").withExecutableSuffix(); tcs.append( - autoDetectToolchains(clang.toString(), - DetectVariants::No, + autoDetectToolchains(findCompilerCandidates(detector, clang.toString(), false), Constants::C_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID, ToolchainDetector(known, detector.device, detector.searchPaths), @@ -1333,15 +1334,13 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co && tc->compilerCommand().fileName() != "c89-gcc" && tc->compilerCommand().fileName() != "c99-gcc"; }; - result += autoDetectToolchains("g++", - DetectVariants::Yes, + result += autoDetectToolchains(findCompilerCandidates(detector, "g++", true), Constants::CXX_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID, detector, &constructRealGccToolchain, tcChecker); - result += autoDetectToolchains("gcc", - DetectVariants::Yes, + result += autoDetectToolchains(findCompilerCandidates(detector, "gcc", true), Constants::C_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID, detector, @@ -1488,16 +1487,13 @@ static FilePaths findCompilerCandidates(const ToolchainDetector &detector, return compilerPaths; } -Toolchains GccToolChainFactory::autoDetectToolchains(const QString &compilerName, - DetectVariants detectVariants, +Toolchains GccToolChainFactory::autoDetectToolchains(const FilePaths &compilerPaths, const Id language, const Id requiredTypeId, const ToolchainDetector &detector, const ToolChainConstructor &constructor, const ToolchainChecker &checker) { - const FilePaths compilerPaths = - findCompilerCandidates(detector, compilerName, detectVariants == DetectVariants::Yes); Toolchains existingCandidates = filtered(detector.alreadyKnown, [language](const ToolChain *tc) { return tc->language() == language; }); Toolchains result; diff --git a/src/plugins/projectexplorer/gcctoolchain.h b/src/plugins/projectexplorer/gcctoolchain.h index fb8909d3881..a549d2bbb37 100644 --- a/src/plugins/projectexplorer/gcctoolchain.h +++ b/src/plugins/projectexplorer/gcctoolchain.h @@ -192,10 +192,8 @@ public: Toolchains detectForImport(const ToolChainDescription &tcd) const final; private: - enum class DetectVariants { Yes, No }; using ToolchainChecker = std::function; - static Toolchains autoDetectToolchains(const QString &compilerName, - DetectVariants detectVariants, + static Toolchains autoDetectToolchains(const Utils::FilePaths &compilerPaths, const Utils::Id language, const Utils::Id requiredTypeId, const ToolchainDetector &detector,