From b81e295f580415392f3b8047aac70408cebc97ce Mon Sep 17 00:00:00 2001 From: Orgad Shaneh Date: Tue, 11 Oct 2022 09:24:46 +0300 Subject: [PATCH] Toolchain: Support also concatenated syntax for MSVC included file For example: /FIC:/Projects/test/config.h Change-Id: I18dcda6593effa58ece019ce40bca7860cebfc8c Reviewed-by: Christian Kandeler --- src/plugins/projectexplorer/gcctoolchain.cpp | 2 +- src/plugins/projectexplorer/msvctoolchain.cpp | 2 +- src/plugins/projectexplorer/toolchain.cpp | 16 +++++++++++++--- src/plugins/projectexplorer/toolchain.h | 4 +++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index e4581419faf..dae5d277fd2 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -566,7 +566,7 @@ WarningFlags GccToolChain::warningFlags(const QStringList &cflags) const QStringList GccToolChain::includedFiles(const QStringList &flags, const QString &directoryPath) const { - return ToolChain::includedFiles("-include", flags, directoryPath); + return ToolChain::includedFiles("-include", flags, directoryPath, PossiblyConcatenatedFlag::No); } QStringList GccToolChain::gccPrepareArguments(const QStringList &flags, diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index e3f506c0595..d86a0ce116c 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -1113,7 +1113,7 @@ WarningFlags MsvcToolChain::warningFlags(const QStringList &cflags) const QStringList MsvcToolChain::includedFiles(const QStringList &flags, const QString &directoryPath) const { - return ToolChain::includedFiles("/FI", flags, directoryPath); + return ToolChain::includedFiles("/FI", flags, directoryPath, PossiblyConcatenatedFlag::Yes); } ToolChain::BuiltInHeaderPathsRunner MsvcToolChain::createBuiltInHeaderPathsRunner( diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index cca95c8158a..fbbc748d8e9 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -468,13 +468,23 @@ Utils::LanguageVersion ToolChain::languageVersion(const Utils::Id &language, con QStringList ToolChain::includedFiles(const QString &option, const QStringList &flags, - const QString &directoryPath) + const QString &directoryPath, + PossiblyConcatenatedFlag possiblyConcatenated) { QStringList result; for (int i = 0; i < flags.size(); ++i) { - if (flags[i] == option && i + 1 < flags.size()) { - QString includeFile = flags[++i]; + QString includeFile; + const QString flag = flags[i]; + if (possiblyConcatenated == PossiblyConcatenatedFlag::Yes + && flag.startsWith(option) + && flag.size() > option.size()) { + includeFile = flag.mid(option.size()); + } + if (includeFile.isEmpty() && flag == option && i + 1 < flags.size()) + includeFile = flags[++i]; + + if (!includeFile.isEmpty()) { if (!QFileInfo(includeFile).isAbsolute()) includeFile = directoryPath + "/" + includeFile; result.append(QDir::cleanPath(includeFile)); diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index fb9c622246a..807e0c5671c 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -185,9 +185,11 @@ protected: // Make sure to call this function when deriving! virtual bool fromMap(const QVariantMap &data); + enum class PossiblyConcatenatedFlag { No, Yes }; static QStringList includedFiles(const QString &option, const QStringList &flags, - const QString &directoryPath); + const QString &directoryPath, + PossiblyConcatenatedFlag possiblyConcatenated); private: ToolChain(const ToolChain &) = delete;