ClangCodeModel: Support setting additional preprocessor directives

... for a document.
This was only ever implemented for the built-in code model.

Fixes: QTCREATORBUG-20423
Change-Id: Ia99d0136e9995a5626058ad06173ea077be024d8
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2022-09-08 15:27:55 +02:00
parent fbd4775f89
commit f7efefb6d4
7 changed files with 54 additions and 35 deletions

View File

@@ -171,7 +171,7 @@ GenerateCompilationDbResult generateCompilationDB(QList<ProjectInfo::ConstPtr> p
QTC_ASSERT(projectInfo, continue);
QStringList args;
const CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(
*projectPart, warningsConfig, clangIncludeDir);
*projectPart, warningsConfig, clangIncludeDir, {});
QJsonArray ppOptions;
if (purpose == CompilationDbPurpose::Project) {
args = projectPartArguments(*projectPart);
@@ -328,7 +328,8 @@ QString textUntilPreviousStatement(TextEditor::TextDocumentManipulatorInterface
CompilerOptionsBuilder clangOptionsBuilder(const ProjectPart &projectPart,
const ClangDiagnosticConfig &warningsConfig,
const Utils::FilePath &clangIncludeDir)
const FilePath &clangIncludeDir,
const Macros &extraMacros)
{
const auto useBuildSystemWarnings = warningsConfig.useBuildSystemWarnings()
? UseBuildSystemWarnings::Yes
@@ -336,7 +337,9 @@ CompilerOptionsBuilder clangOptionsBuilder(const ProjectPart &projectPart,
CompilerOptionsBuilder optionsBuilder(projectPart, UseSystemHeader::No,
UseTweakedHeaderPaths::Yes, UseLanguageDefines::No,
useBuildSystemWarnings, clangIncludeDir);
optionsBuilder.provideAdditionalMacros({ProjectExplorer::Macro("Q_CREATOR_RUN", "1")});
Macros fullMacroList = extraMacros;
fullMacroList += Macro("Q_CREATOR_RUN", "1");
optionsBuilder.provideAdditionalMacros(fullMacroList);
optionsBuilder.build(ProjectFile::Unclassified, UsePrecompiledHeaders::No);
optionsBuilder.add("-fmessage-length=0", /*gccOnlyOption=*/true);
optionsBuilder.add("-fdiagnostics-show-note-include-stack", /*gccOnlyOption=*/true);