forked from qt-creator/qt-creator
ProjectExplorer: Move path collection in gcc autodetection one level up
Closer to doing it just once. Change-Id: I8d9c7d8c4d3b7bd3afb57eb612eaae9bc4f7b616 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -1247,6 +1247,11 @@ GccToolChainFactory::GccToolChainFactory(GccToolChain::SubType subType)
|
|||||||
setUserCreatable(true);
|
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 GccToolChainFactory::autoDetect(const ToolchainDetector &detector) const
|
||||||
{
|
{
|
||||||
Toolchains result;
|
Toolchains result;
|
||||||
@@ -1257,14 +1262,14 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co
|
|||||||
|
|
||||||
// Linux ICC
|
// Linux ICC
|
||||||
|
|
||||||
result += autoDetectToolchains("icpc",
|
result += autoDetectToolchains(findCompilerCandidates(detector, "icpc", false),
|
||||||
DetectVariants::No,
|
|
||||||
Constants::CXX_LANGUAGE_ID,
|
Constants::CXX_LANGUAGE_ID,
|
||||||
Constants::LINUXICC_TOOLCHAIN_TYPEID,
|
Constants::LINUXICC_TOOLCHAIN_TYPEID,
|
||||||
detector,
|
detector,
|
||||||
&constructLinuxIccToolchain);
|
&constructLinuxIccToolchain);
|
||||||
result += autoDetectToolchains("icc",
|
|
||||||
DetectVariants::Yes,
|
|
||||||
|
result += autoDetectToolchains(findCompilerCandidates(detector, "icc", true),
|
||||||
Constants::C_LANGUAGE_ID,
|
Constants::C_LANGUAGE_ID,
|
||||||
Constants::LINUXICC_TOOLCHAIN_TYPEID,
|
Constants::LINUXICC_TOOLCHAIN_TYPEID,
|
||||||
detector,
|
detector,
|
||||||
@@ -1275,15 +1280,14 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co
|
|||||||
static const auto tcChecker = [](const ToolChain *tc) {
|
static const auto tcChecker = [](const ToolChain *tc) {
|
||||||
return tc->targetAbi().osFlavor() == Abi::WindowsMSysFlavor;
|
return tc->targetAbi().osFlavor() == Abi::WindowsMSysFlavor;
|
||||||
};
|
};
|
||||||
result += autoDetectToolchains("g++",
|
|
||||||
DetectVariants::Yes,
|
result += autoDetectToolchains(findCompilerCandidates(detector, "g++", true),
|
||||||
Constants::CXX_LANGUAGE_ID,
|
Constants::CXX_LANGUAGE_ID,
|
||||||
Constants::MINGW_TOOLCHAIN_TYPEID,
|
Constants::MINGW_TOOLCHAIN_TYPEID,
|
||||||
detector,
|
detector,
|
||||||
&constructMinGWToolchain,
|
&constructMinGWToolchain,
|
||||||
tcChecker);
|
tcChecker);
|
||||||
result += autoDetectToolchains("gcc",
|
result += autoDetectToolchains(findCompilerCandidates(detector, "gcc", true),
|
||||||
DetectVariants::Yes,
|
|
||||||
Constants::C_LANGUAGE_ID,
|
Constants::C_LANGUAGE_ID,
|
||||||
Constants::MINGW_TOOLCHAIN_TYPEID,
|
Constants::MINGW_TOOLCHAIN_TYPEID,
|
||||||
detector,
|
detector,
|
||||||
@@ -1295,14 +1299,12 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co
|
|||||||
Toolchains tcs;
|
Toolchains tcs;
|
||||||
Toolchains known = detector.alreadyKnown;
|
Toolchains known = detector.alreadyKnown;
|
||||||
|
|
||||||
tcs.append(autoDetectToolchains("clang++",
|
tcs.append(autoDetectToolchains(findCompilerCandidates(detector, "clang++", true),
|
||||||
DetectVariants::Yes,
|
|
||||||
Constants::CXX_LANGUAGE_ID,
|
Constants::CXX_LANGUAGE_ID,
|
||||||
Constants::CLANG_TOOLCHAIN_TYPEID,
|
Constants::CLANG_TOOLCHAIN_TYPEID,
|
||||||
detector,
|
detector,
|
||||||
&constructClangToolchain));
|
&constructClangToolchain));
|
||||||
tcs.append(autoDetectToolchains("clang",
|
tcs.append(autoDetectToolchains(findCompilerCandidates(detector, "clang", true),
|
||||||
DetectVariants::Yes,
|
|
||||||
Constants::C_LANGUAGE_ID,
|
Constants::C_LANGUAGE_ID,
|
||||||
Constants::CLANG_TOOLCHAIN_TYPEID,
|
Constants::CLANG_TOOLCHAIN_TYPEID,
|
||||||
detector,
|
detector,
|
||||||
@@ -1313,8 +1315,7 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co
|
|||||||
if (!compilerPath.isEmpty()) {
|
if (!compilerPath.isEmpty()) {
|
||||||
const FilePath clang = compilerPath.parentDir().pathAppended("clang").withExecutableSuffix();
|
const FilePath clang = compilerPath.parentDir().pathAppended("clang").withExecutableSuffix();
|
||||||
tcs.append(
|
tcs.append(
|
||||||
autoDetectToolchains(clang.toString(),
|
autoDetectToolchains(findCompilerCandidates(detector, clang.toString(), false),
|
||||||
DetectVariants::No,
|
|
||||||
Constants::C_LANGUAGE_ID,
|
Constants::C_LANGUAGE_ID,
|
||||||
Constants::CLANG_TOOLCHAIN_TYPEID,
|
Constants::CLANG_TOOLCHAIN_TYPEID,
|
||||||
ToolchainDetector(known, detector.device, detector.searchPaths),
|
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() != "c89-gcc"
|
||||||
&& tc->compilerCommand().fileName() != "c99-gcc";
|
&& tc->compilerCommand().fileName() != "c99-gcc";
|
||||||
};
|
};
|
||||||
result += autoDetectToolchains("g++",
|
result += autoDetectToolchains(findCompilerCandidates(detector, "g++", true),
|
||||||
DetectVariants::Yes,
|
|
||||||
Constants::CXX_LANGUAGE_ID,
|
Constants::CXX_LANGUAGE_ID,
|
||||||
Constants::GCC_TOOLCHAIN_TYPEID,
|
Constants::GCC_TOOLCHAIN_TYPEID,
|
||||||
detector,
|
detector,
|
||||||
&constructRealGccToolchain,
|
&constructRealGccToolchain,
|
||||||
tcChecker);
|
tcChecker);
|
||||||
result += autoDetectToolchains("gcc",
|
result += autoDetectToolchains(findCompilerCandidates(detector, "gcc", true),
|
||||||
DetectVariants::Yes,
|
|
||||||
Constants::C_LANGUAGE_ID,
|
Constants::C_LANGUAGE_ID,
|
||||||
Constants::GCC_TOOLCHAIN_TYPEID,
|
Constants::GCC_TOOLCHAIN_TYPEID,
|
||||||
detector,
|
detector,
|
||||||
@@ -1488,16 +1487,13 @@ static FilePaths findCompilerCandidates(const ToolchainDetector &detector,
|
|||||||
return compilerPaths;
|
return compilerPaths;
|
||||||
}
|
}
|
||||||
|
|
||||||
Toolchains GccToolChainFactory::autoDetectToolchains(const QString &compilerName,
|
Toolchains GccToolChainFactory::autoDetectToolchains(const FilePaths &compilerPaths,
|
||||||
DetectVariants detectVariants,
|
|
||||||
const Id language,
|
const Id language,
|
||||||
const Id requiredTypeId,
|
const Id requiredTypeId,
|
||||||
const ToolchainDetector &detector,
|
const ToolchainDetector &detector,
|
||||||
const ToolChainConstructor &constructor,
|
const ToolChainConstructor &constructor,
|
||||||
const ToolchainChecker &checker)
|
const ToolchainChecker &checker)
|
||||||
{
|
{
|
||||||
const FilePaths compilerPaths =
|
|
||||||
findCompilerCandidates(detector, compilerName, detectVariants == DetectVariants::Yes);
|
|
||||||
Toolchains existingCandidates = filtered(detector.alreadyKnown,
|
Toolchains existingCandidates = filtered(detector.alreadyKnown,
|
||||||
[language](const ToolChain *tc) { return tc->language() == language; });
|
[language](const ToolChain *tc) { return tc->language() == language; });
|
||||||
Toolchains result;
|
Toolchains result;
|
||||||
|
|||||||
@@ -192,10 +192,8 @@ public:
|
|||||||
Toolchains detectForImport(const ToolChainDescription &tcd) const final;
|
Toolchains detectForImport(const ToolChainDescription &tcd) const final;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum class DetectVariants { Yes, No };
|
|
||||||
using ToolchainChecker = std::function<bool(const ToolChain *)>;
|
using ToolchainChecker = std::function<bool(const ToolChain *)>;
|
||||||
static Toolchains autoDetectToolchains(const QString &compilerName,
|
static Toolchains autoDetectToolchains(const Utils::FilePaths &compilerPaths,
|
||||||
DetectVariants detectVariants,
|
|
||||||
const Utils::Id language,
|
const Utils::Id language,
|
||||||
const Utils::Id requiredTypeId,
|
const Utils::Id requiredTypeId,
|
||||||
const ToolchainDetector &detector,
|
const ToolchainDetector &detector,
|
||||||
|
|||||||
Reference in New Issue
Block a user