aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-03-07 08:59:27 +0100
committerJussi Pakkanen <jpakkane@gmail.com>2025-03-07 16:35:16 +0200
commitf89a587753618a73996e2b44f46bdd11707fce2e (patch)
tree979f8e099fe83cab387a7583edb67df029ea82ae
parent22d970d9006e731874585495601c981587eb0ecf (diff)
downloadmeson-f89a587753618a73996e2b44f46bdd11707fce2e.zip
meson-f89a587753618a73996e2b44f46bdd11707fce2e.tar.gz
meson-f89a587753618a73996e2b44f46bdd11707fce2e.tar.bz2
clang-tidy: build pch files before running clang-tidy
"ninja clang-tidy" will not work if you are using pch files and have not run a full build yet: the pch files will not yet be built and there is no dependency between the pch targets and the clang-tidy target. Fixes: #13499
-rw-r--r--mesonbuild/backend/ninjabackend.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 74fb86c..2ae6963 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -4,7 +4,7 @@
from __future__ import annotations
-from collections import OrderedDict
+from collections import defaultdict, OrderedDict
from dataclasses import dataclass
from enum import Enum, unique
from functools import lru_cache
@@ -503,6 +503,7 @@ class NinjaBackend(backends.Backend):
self.ninja_filename = 'build.ninja'
self.fortran_deps: T.Dict[str, T.Dict[str, File]] = {}
self.all_outputs: T.Set[str] = set()
+ self.all_pch: T.Dict[str, T.Set[str]] = defaultdict(set)
self.all_structured_sources: T.Set[str] = set()
self.introspection_data = {}
self.created_llvm_ir_rule = PerMachine(False, False)
@@ -3271,6 +3272,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
elem.add_item('ARGS', commands)
elem.add_item('DEPFILE', dep)
self.add_build(elem)
+ self.all_pch[compiler.id].update(objs + [dst])
return pch_objects
def get_target_shsym_filename(self, target):
@@ -3727,7 +3729,7 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
elem.add_item('pool', 'console')
self.add_build(elem)
- def generate_clangtool(self, name: str, extra_arg: T.Optional[str] = None) -> None:
+ def generate_clangtool(self, name: str, extra_arg: T.Optional[str] = None, need_pch: bool = False) -> None:
target_name = 'clang-' + name
extra_args = []
if extra_arg:
@@ -3747,6 +3749,8 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
elem = self.create_phony_target(target_name, 'CUSTOM_COMMAND', 'PHONY')
elem.add_item('COMMAND', cmd)
elem.add_item('pool', 'console')
+ if need_pch:
+ elem.add_dep(list(self.all_pch['clang']))
self.add_build(elem)
def generate_clangformat(self) -> None:
@@ -3758,10 +3762,10 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
def generate_clangtidy(self) -> None:
if not environment.detect_clangtidy():
return
- self.generate_clangtool('tidy')
+ self.generate_clangtool('tidy', need_pch=True)
if not environment.detect_clangapply():
return
- self.generate_clangtool('tidy', 'fix')
+ self.generate_clangtool('tidy', 'fix', need_pch=True)
def generate_tags(self, tool: str, target_name: str) -> None:
import shutil