aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/backend/ninjabackend.py6
-rw-r--r--mesonbuild/compilers/cython.py10
2 files changed, 14 insertions, 2 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py
index 619bf7c..92d9bdd 100644
--- a/mesonbuild/backend/ninjabackend.py
+++ b/mesonbuild/backend/ninjabackend.py
@@ -2234,10 +2234,14 @@ class NinjaBackend(backends.Backend):
description = 'Compiling Cython source $in'
command = compiler.get_exelist()
- args = ['$ARGS', '$in']
+ depargs = compiler.get_dependency_gen_args('$out', '$DEPFILE')
+ depfile = '$out.dep' if depargs else None
+
+ args = depargs + ['$ARGS', '$in']
args += NinjaCommandArg.list(compiler.get_output_args('$out'), Quoting.none)
self.add_rule(NinjaRule(rule, command + args, [],
description,
+ depfile=depfile,
extra='restat = 1'))
def generate_rust_compile_rules(self, compiler):
diff --git a/mesonbuild/compilers/cython.py b/mesonbuild/compilers/cython.py
index 763279e..9bbfebe 100644
--- a/mesonbuild/compilers/cython.py
+++ b/mesonbuild/compilers/cython.py
@@ -7,7 +7,7 @@ from __future__ import annotations
import typing as T
from .. import coredata
-from ..mesonlib import EnvironmentException, OptionKey
+from ..mesonlib import EnvironmentException, OptionKey, version_compare
from .compilers import Compiler
if T.TYPE_CHECKING:
@@ -40,6 +40,14 @@ class CythonCompiler(Compiler):
# compiler might though
return []
+ def get_dependency_gen_args(self, outtarget: str, outfile: str) -> T.List[str]:
+ if version_compare(self.version, '>=0.29.33'):
+ return ['-M']
+ return []
+
+ def get_depfile_suffix(self) -> str:
+ return 'dep'
+
def sanity_check(self, work_dir: str, environment: 'Environment') -> None:
code = 'print("hello world")'
with self.cached_compile(code, environment.coredata) as p: