diff options
Diffstat (limited to 'src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.cpp')
-rw-r--r-- | src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.cpp | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.cpp index df8e08a68f5..be0ab87e547 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseutils.cpp @@ -22,15 +22,6 @@ using namespace Utils; namespace CompilationDatabaseProjectManager { namespace Internal { -static QString updatedPathFlag(const QString &pathStr, const QString &workingDir) -{ - QString result = pathStr; - if (QDir(pathStr).isRelative()) - result = workingDir + "/" + pathStr; - - return result; -} - static CppEditor::ProjectFile::Kind fileKindFromString(QString flag) { using namespace CppEditor; @@ -86,13 +77,13 @@ QStringList filterFromFileName(const QStringList &flags, QString fileName) return result; } -void filteredFlags(const QString &fileName, - const QString &workingDir, +void filteredFlags(const FilePath &filePath, + const FilePath &workingDir, QStringList &flags, HeaderPaths &headerPaths, Macros ¯os, CppEditor::ProjectFile::Kind &fileKind, - Utils::FilePath &sysRoot) + FilePath &sysRoot) { if (flags.empty()) return; @@ -113,7 +104,7 @@ void filteredFlags(const QString &fileName, } if (includePathType) { - const QString pathStr = updatedPathFlag(flag, workingDir); + const QString pathStr = workingDir.resolvePath(flag).toString(); headerPaths.append({pathStr, includePathType.value()}); includePathType.reset(); continue; @@ -145,14 +136,14 @@ void filteredFlags(const QString &fileName, continue; } - const QStringList userIncludeFlags{"-I", "/I"}; - const QStringList systemIncludeFlags{"-isystem", "-imsvc", "/imsvc"}; + const QStringList userIncludeFlags{"-I", "-iquote", "/I"}; + const QStringList systemIncludeFlags{"-isystem", "-idirafter", "-imsvc", "/imsvc"}; const QStringList allIncludeFlags = QStringList(userIncludeFlags) << systemIncludeFlags; const QString includeOpt = Utils::findOrDefault(allIncludeFlags, [flag](const QString &opt) { return flag.startsWith(opt) && flag != opt; }); if (!includeOpt.isEmpty()) { - const QString pathStr = updatedPathFlag(flag.mid(includeOpt.length()), workingDir); + const QString pathStr = workingDir.resolvePath(flag.mid(includeOpt.length())).toString(); headerPaths.append({pathStr, userIncludeFlags.contains(includeOpt) ? HeaderPathType::User : HeaderPathType::System}); continue; @@ -182,14 +173,14 @@ void filteredFlags(const QString &fileName, if (flag.startsWith("--sysroot=")) { if (sysRoot.isEmpty()) - sysRoot = FilePath::fromUserInput(updatedPathFlag(flag.mid(10), workingDir)); + sysRoot = workingDir.resolvePath(flag.mid(10)); continue; } if ((flag.startsWith("-std=") || flag.startsWith("/std:")) && fileKind == CppEditor::ProjectFile::Unclassified) { const bool cpp = (flag.contains("c++") || flag.contains("gnu++")); - if (CppEditor::ProjectFile::isHeader(CppEditor::ProjectFile::classify(fileName))) + if (CppEditor::ProjectFile::isHeader(CppEditor::ProjectFile::classify(filePath.path()))) fileKind = cpp ? CppEditor::ProjectFile::CXXHeader : CppEditor::ProjectFile::CHeader; else fileKind = cpp ? CppEditor::ProjectFile::CXXSource : CppEditor::ProjectFile::CSource; @@ -203,7 +194,7 @@ void filteredFlags(const QString &fileName, } if (fileKind == CppEditor::ProjectFile::Unclassified) - fileKind = CppEditor::ProjectFile::classify(fileName); + fileKind = CppEditor::ProjectFile::classify(filePath.path()); flags = filtered; } |