forked from qt-creator/qt-creator
ProjectExplorer: Provide more flexibility in compiler paths
Let autoDetectToolchains accept compiler path instead of always searching for it in environment. Make environment search into a separate call. Change-Id: Ie692b38bac03955a8f1cb3590beb7a2e9640a448 Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
@@ -942,7 +942,8 @@ void GccToolChainFactory::versionProbe(const QString &name, Core::Id language, C
|
|||||||
continue;
|
continue;
|
||||||
const bool isNative = fileName.startsWith(name);
|
const bool isNative = fileName.startsWith(name);
|
||||||
const Abi abi = isNative ? Abi::hostAbi() : Abi();
|
const Abi abi = isNative ? Abi::hostAbi() : Abi();
|
||||||
tcs.append(autoDetectToolchains(entry, abi, language, type, known));
|
tcs.append(autoDetectToolchains(compilerPathFromEnvironment(entry), abi, language, type,
|
||||||
|
known));
|
||||||
known.append(tcs);
|
known.append(tcs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -952,10 +953,12 @@ QList<ToolChain *> GccToolChainFactory::autoDetect(const QList<ToolChain *> &alr
|
|||||||
{
|
{
|
||||||
QList<ToolChain *> tcs;
|
QList<ToolChain *> tcs;
|
||||||
QList<ToolChain *> known = alreadyKnown;
|
QList<ToolChain *> known = alreadyKnown;
|
||||||
tcs.append(autoDetectToolchains("g++", Abi::hostAbi(), Constants::CXX_LANGUAGE_ID,
|
tcs.append(autoDetectToolchains(compilerPathFromEnvironment("g++"), Abi::hostAbi(),
|
||||||
Constants::GCC_TOOLCHAIN_TYPEID, alreadyKnown));
|
Constants::CXX_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID,
|
||||||
tcs.append(autoDetectToolchains("gcc", Abi::hostAbi(), Constants::C_LANGUAGE_ID,
|
alreadyKnown));
|
||||||
Constants::GCC_TOOLCHAIN_TYPEID, alreadyKnown));
|
tcs.append(autoDetectToolchains(compilerPathFromEnvironment("gcc"), Abi::hostAbi(),
|
||||||
|
Constants::C_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID,
|
||||||
|
alreadyKnown));
|
||||||
known.append(tcs);
|
known.append(tcs);
|
||||||
versionProbe("g++", Constants::CXX_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID, tcs, known);
|
versionProbe("g++", Constants::CXX_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID, tcs, known);
|
||||||
versionProbe("gcc", Constants::C_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID, tcs, known,
|
versionProbe("gcc", Constants::C_LANGUAGE_ID, Constants::GCC_TOOLCHAIN_TYPEID, tcs, known,
|
||||||
@@ -996,7 +999,13 @@ GccToolChain *GccToolChainFactory::createToolChain(bool autoDetect)
|
|||||||
return new GccToolChain(autoDetect ? ToolChain::AutoDetection : ToolChain::ManualDetection);
|
return new GccToolChain(autoDetect ? ToolChain::AutoDetection : ToolChain::ManualDetection);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &compiler,
|
Utils::FileName GccToolChainFactory::compilerPathFromEnvironment(const QString &compilerName)
|
||||||
|
{
|
||||||
|
Environment systemEnvironment = Environment::systemEnvironment();
|
||||||
|
return systemEnvironment.searchInPath(compilerName);
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const FileName &compilerPath,
|
||||||
const Abi &requiredAbi,
|
const Abi &requiredAbi,
|
||||||
Core::Id language,
|
Core::Id language,
|
||||||
const Core::Id requiredTypeId,
|
const Core::Id requiredTypeId,
|
||||||
@@ -1004,11 +1013,8 @@ QList<ToolChain *> GccToolChainFactory::autoDetectToolchains(const QString &comp
|
|||||||
{
|
{
|
||||||
QList<ToolChain *> result;
|
QList<ToolChain *> result;
|
||||||
|
|
||||||
Environment systemEnvironment = Environment::systemEnvironment();
|
|
||||||
const FileName compilerPath = systemEnvironment.searchInPath(compiler);
|
|
||||||
if (compilerPath.isEmpty())
|
if (compilerPath.isEmpty())
|
||||||
return result;
|
return result;
|
||||||
const FileName canonicalPath = FileUtils::canonicalPath(compilerPath);
|
|
||||||
|
|
||||||
result = Utils::filtered(alreadyKnown, [requiredTypeId, compilerPath](ToolChain *tc) {
|
result = Utils::filtered(alreadyKnown, [requiredTypeId, compilerPath](ToolChain *tc) {
|
||||||
return tc->typeId() == requiredTypeId && tc->compilerCommand() == compilerPath;
|
return tc->typeId() == requiredTypeId && tc->compilerCommand() == compilerPath;
|
||||||
@@ -1338,10 +1344,13 @@ QList<ToolChain *> ClangToolChainFactory::autoDetect(const QList<ToolChain *> &a
|
|||||||
{
|
{
|
||||||
QList<ToolChain *> tcs;
|
QList<ToolChain *> tcs;
|
||||||
QList<ToolChain *> known = alreadyKnown;
|
QList<ToolChain *> known = alreadyKnown;
|
||||||
tcs.append(autoDetectToolchains("clang++", Abi::hostAbi(), Constants::CXX_LANGUAGE_ID,
|
|
||||||
Constants::CLANG_TOOLCHAIN_TYPEID, alreadyKnown));
|
tcs.append(autoDetectToolchains(compilerPathFromEnvironment("clang++"), Abi::hostAbi(),
|
||||||
tcs.append(autoDetectToolchains("clang", Abi::hostAbi(), Constants::C_LANGUAGE_ID,
|
Constants::CXX_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID,
|
||||||
Constants::CLANG_TOOLCHAIN_TYPEID, alreadyKnown));
|
alreadyKnown));
|
||||||
|
tcs.append(autoDetectToolchains(compilerPathFromEnvironment("clang"), Abi::hostAbi(),
|
||||||
|
Constants::C_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID,
|
||||||
|
alreadyKnown));
|
||||||
known.append(tcs);
|
known.append(tcs);
|
||||||
versionProbe("clang++", Constants::CXX_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID, tcs, known);
|
versionProbe("clang++", Constants::CXX_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID, tcs, known);
|
||||||
versionProbe("clang", Constants::C_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID, tcs, known);
|
versionProbe("clang", Constants::C_LANGUAGE_ID, Constants::CLANG_TOOLCHAIN_TYPEID, tcs, known);
|
||||||
@@ -1435,10 +1444,12 @@ QList<ToolChain *> MingwToolChainFactory::autoDetect(const QList<ToolChain *> &a
|
|||||||
{
|
{
|
||||||
Abi ha = Abi::hostAbi();
|
Abi ha = Abi::hostAbi();
|
||||||
ha = Abi(ha.architecture(), Abi::WindowsOS, Abi::WindowsMSysFlavor, Abi::PEFormat, ha.wordWidth());
|
ha = Abi(ha.architecture(), Abi::WindowsOS, Abi::WindowsMSysFlavor, Abi::PEFormat, ha.wordWidth());
|
||||||
QList<ToolChain *> result = autoDetectToolchains("g++", ha, Constants::CXX_LANGUAGE_ID,
|
QList<ToolChain *> result = autoDetectToolchains(
|
||||||
Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown);
|
compilerPathFromEnvironment("g++"), ha, Constants::CXX_LANGUAGE_ID,
|
||||||
result += autoDetectToolchains("gcc", ha, Constants::C_LANGUAGE_ID,
|
Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown);
|
||||||
Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown);
|
result += autoDetectToolchains(
|
||||||
|
compilerPathFromEnvironment("gcc"), ha, Constants::C_LANGUAGE_ID,
|
||||||
|
Constants::MINGW_TOOLCHAIN_TYPEID, alreadyKnown);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1532,8 +1543,9 @@ QSet<Core::Id> LinuxIccToolChainFactory::supportedLanguages() const
|
|||||||
|
|
||||||
QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const QList<ToolChain *> &alreadyKnown)
|
||||||
{
|
{
|
||||||
return autoDetectToolchains("icpc", Abi::hostAbi(), Constants::CXX_LANGUAGE_ID,
|
return autoDetectToolchains(compilerPathFromEnvironment("icpc"), Abi::hostAbi(),
|
||||||
Constants::LINUXICC_TOOLCHAIN_TYPEID, alreadyKnown);
|
Constants::CXX_LANGUAGE_ID, Constants::LINUXICC_TOOLCHAIN_TYPEID,
|
||||||
|
alreadyKnown);
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const FileName &compilerPath, const Core::Id &language)
|
QList<ToolChain *> LinuxIccToolChainFactory::autoDetect(const FileName &compilerPath, const Core::Id &language)
|
||||||
|
@@ -69,9 +69,12 @@ protected:
|
|||||||
QList<ToolChain *> &tcs,
|
QList<ToolChain *> &tcs,
|
||||||
QList<ToolChain *> &known,
|
QList<ToolChain *> &known,
|
||||||
const QSet<QString> &filteredNames = {});
|
const QSet<QString> &filteredNames = {});
|
||||||
QList<ToolChain *> autoDetectToolchains(const QString &compiler, const Abi &requiredAbi,
|
|
||||||
Core::Id language, const Core::Id requiredTypeId,
|
Utils::FileName compilerPathFromEnvironment(const QString &compilerName);
|
||||||
const QList<ToolChain *> &alreadyKnown);
|
|
||||||
|
QList<ToolChain *> autoDetectToolchains(
|
||||||
|
const Utils::FileName &compilerPath, const Abi &requiredAbi, Core::Id language,
|
||||||
|
const Core::Id requiredTypeId, const QList<ToolChain *> &alreadyKnown);
|
||||||
QList<ToolChain *> autoDetectToolChain(const Utils::FileName &compilerPath, const Core::Id language,
|
QList<ToolChain *> autoDetectToolChain(const Utils::FileName &compilerPath, const Core::Id language,
|
||||||
const Abi &requiredAbi = Abi());
|
const Abi &requiredAbi = Abi());
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user