QbsPM: Fix wrong {GCC|Clang} compiler name and prefix handling

When the GCC or Clang compiler name ends with the version sub-string
(f.e. arm-none-eabi-gcc-8.2.1.exe), this leads to the wrong cCompilerName
detection, that causes the project parsing errors and disables the project:

  The following properties are not set. Set them in your profile or product:
  cpp.compilerIncludePaths
  cpp.compilerFrameworkPaths
  cpp.compilerLibraryPaths

  Product 'xyz' had errors and was disabled.

Now we return a proper prefix (e.g. arm-none-eabi-) and cCompilerName
with a version (e.g. 'gcc-8.2.1.exe')

Change-Id: I5dd42a343a0982326ed0f23b821e5016b8df39f1
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Denis Shienkov
2020-03-16 17:35:15 +03:00
parent c8e560b3bd
commit 3ad7ef4796

View File

@@ -65,14 +65,14 @@ static QString extractToolchainPrefix(QString *compilerName)
QString prefix; QString prefix;
const QStringList candidates = {QLatin1String("g++"), QLatin1String("clang++"), const QStringList candidates = {QLatin1String("g++"), QLatin1String("clang++"),
QLatin1String("gcc"), QLatin1String("clang")}; QLatin1String("gcc"), QLatin1String("clang")};
foreach (const QString &candidate, candidates) { for (const QString &candidate : candidates) {
const QString suffix = Utils::HostOsInfo::withExecutableSuffix(QLatin1Char('-') const QString suffix = QLatin1Char('-') + candidate;
+ candidate); const int suffixIndex = compilerName->lastIndexOf(suffix);
if (compilerName->endsWith(suffix)) { if (suffixIndex == -1)
const int idx = compilerName->lastIndexOf(QLatin1Char('-')) + 1; continue;
prefix = compilerName->left(idx); prefix = compilerName->left(suffixIndex + 1);
compilerName->remove(0, idx); compilerName->remove(0, suffixIndex + 1);
} break;
} }
return prefix; return prefix;
} }