diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py index b100d86d8d39..45d024d28fe4 100644 --- a/mesonbuild/modules/python.py +++ b/mesonbuild/modules/python.py @@ -216,8 +216,24 @@ def extension_module_method(self, args: T.Tuple[str, T.List[BuildTargetSource]], kwargs['link_args'] = new_link_args cython_compiler = next((c for c in compilers.values() if c.get_id() == 'cython'), None) - if cython_compiler is not None and mesonlib.version_compare(cython_compiler.version, '< 3.0.0'): - mlog.warning(f'Limited API not supported by Cython versions < 3.0.0 (detected: {cython_compiler.version})', location=self.current_node) + if cython_compiler is not None: + # Determine if any of the supplied source files are Cython source. + def has_cython_files(cython_compiler, args): + cython_suffixes = cython_compiler.file_suffixes + for arg in args: + if isinstance(arg, mesonlib.File): + arg = arg.fname + suffix = os.path.splitext(arg)[1][1:].lower() + if suffix in cython_suffixes: + return True + return False + + # Cython's support for the Limited API was added in version 3.0 + def has_cython_limited_api(cython_compiler): + return mesonlib.version_compare(cython_compiler.version, '>= 3.0.0') + + if has_cython_files(cython_compiler, args[1]) and not has_cython_limited_api(cython_compiler): + mlog.error(f'Limited API not supported by Cython versions < 3.0.0 (detected: {cython_compiler.version})', location=self.current_node) kwargs['dependencies'] = new_deps