aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCristian Adam <cristian.adam@qt.io>2022-05-13 13:17:02 +0200
committerCristian Adam <cristian.adam@qt.io>2022-05-13 14:44:20 +0000
commitd0a9b873cb3c8a8b54cbfaa51fbf9a913bf192e7 (patch)
tree4c6e95cf40e2a2f6886c59db68d324dd7d14e074
parent1bfd5da0248be7b7992075b12a65157412a92cea (diff)
ProjectExplorer: Include symlinks for compiler import name matching
On macOS /Library/Developer/CommandLineTools/usr/bin/cc is a symlink to /Library/Developer/CommandLineTools/usr/bin/clang, and should not be matched as a GCC toolchain. Fixes: QTCREATORBUG-27523 Change-Id: I8885a263b46fa8d8a8145f7c0faa31f21aae920a Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--src/plugins/projectexplorer/gcctoolchain.cpp36
1 files changed, 26 insertions, 10 deletions
diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp
index 047ddb02b4..666ef9624e 100644
--- a/src/plugins/projectexplorer/gcctoolchain.cpp
+++ b/src/plugins/projectexplorer/gcctoolchain.cpp
@@ -1077,12 +1077,19 @@ Toolchains GccToolChainFactory::autoDetect(const ToolchainDetector &detector) co
Toolchains GccToolChainFactory::detectForImport(const ToolChainDescription &tcd) const
{
const QString fileName = tcd.compilerPath.completeBaseName();
- if ((tcd.language == Constants::C_LANGUAGE_ID && (fileName.startsWith("gcc")
- || fileName.endsWith("gcc")
- || fileName == "cc"))
- || (tcd.language == Constants::CXX_LANGUAGE_ID && (fileName.startsWith("g++")
- || fileName.endsWith("g++")
- || fileName == "c++"))) {
+ const QString resolvedSymlinksFileName = tcd.compilerPath.resolveSymlinks().completeBaseName();
+
+ const bool isCCompiler = tcd.language == Constants::C_LANGUAGE_ID
+ && (fileName.startsWith("gcc")
+ || fileName.endsWith("gcc")
+ || (fileName == "cc" && !resolvedSymlinksFileName.contains("clang")));
+
+ const bool isCxxCompiler = tcd.language == Constants::CXX_LANGUAGE_ID
+ && (fileName.startsWith("g++")
+ || fileName.endsWith("g++")
+ || (fileName == "c++" && !resolvedSymlinksFileName.contains("clang")));
+
+ if (isCCompiler || isCxxCompiler) {
return autoDetectToolChain(tcd, [](const ToolChain *tc) {
return tc->targetAbi().osFlavor() != Abi::WindowsMSysFlavor;
});
@@ -1756,9 +1763,18 @@ Toolchains ClangToolChainFactory::autoDetect(const ToolchainDetector &detector)
Toolchains ClangToolChainFactory::detectForImport(const ToolChainDescription &tcd) const
{
- const QString fileName = tcd.compilerPath.toString();
- if ((tcd.language == Constants::C_LANGUAGE_ID && fileName.startsWith("clang") && !fileName.startsWith("clang++"))
- || (tcd.language == Constants::CXX_LANGUAGE_ID && fileName.startsWith("clang++"))) {
+ const QString fileName = tcd.compilerPath.completeBaseName();
+ const QString resolvedSymlinksFileName = tcd.compilerPath.resolveSymlinks().completeBaseName();
+
+ const bool isCCompiler = tcd.language == Constants::C_LANGUAGE_ID
+ && ((fileName.startsWith("clang") && !fileName.startsWith("clang++"))
+ || (fileName == "cc" && resolvedSymlinksFileName.contains("clang")));
+
+ const bool isCxxCompiler = tcd.language == Constants::CXX_LANGUAGE_ID
+ && (fileName.startsWith("clang++")
+ || (fileName == "c++" && resolvedSymlinksFileName.contains("clang")));
+
+ if (isCCompiler || isCxxCompiler) {
return autoDetectToolChain(tcd);
}
return {};
@@ -2014,7 +2030,7 @@ Toolchains LinuxIccToolChainFactory::autoDetect(const ToolchainDetector &detecto
Toolchains LinuxIccToolChainFactory::detectForImport(const ToolChainDescription &tcd) const
{
- const QString fileName = tcd.compilerPath.toString();
+ const QString fileName = tcd.compilerPath.completeBaseName();
if ((tcd.language == Constants::CXX_LANGUAGE_ID && fileName.startsWith("icpc")) ||
(tcd.language == Constants::C_LANGUAGE_ID && fileName.startsWith("icc"))) {
return autoDetectToolChain(tcd);