From 271dbd81c3821c7535056470b52ddbd6f5ada703 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Fri, 12 Sep 2025 13:41:21 +0200 Subject: rust: unify conversion from target name to crate name _get_rust_dependency_name was less lenient in accepting targets containing invalid characters for a crate name. This made it impossible to link to those targets without using a dependency map. Use the same algorithm to do the conversion. Signed-off-by: Paolo Bonzini --- mesonbuild/backend/ninjabackend.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index f1f28043c..5486b089b 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -1947,11 +1947,16 @@ class NinjaBackend(backends.Backend): self.rust_crates[name] = crate - def _get_rust_dependency_name(self, target: build.BuildTarget, dependency: LibTypes) -> str: - # Convert crate names with dashes to underscores by default like - # cargo does as dashes can't be used as parts of identifiers - # in Rust - return target.rust_dependency_map.get(dependency.name, dependency.name).replace('-', '_') + @staticmethod + def _get_rust_crate_name(target_name: str) -> str: + # Rustc replaces - with _. spaces or dots are not allowed, so we replace them with underscores + crate_name = target_name.replace('-', '_').replace(' ', '_').replace('.', '_') + return crate_name + + @staticmethod + def _get_rust_dependency_name(target: build.BuildTarget, dependency: LibTypes) -> str: + crate_name_raw = target.rust_dependency_map.get(dependency.name, dependency.name) + return NinjaBackend._get_rust_crate_name(crate_name_raw) def generate_rust_sources(self, target: build.BuildTarget) -> T.Tuple[T.List[str], str]: orderdeps: T.List[str] = [] @@ -2026,8 +2031,7 @@ class NinjaBackend(backends.Backend): args.extend(rustc.get_linker_always_args()) args += self.generate_basic_compiler_args(target, rustc) - # Rustc replaces - with _. spaces or dots are not allowed, so we replace them with underscores - args += ['--crate-name', target.name.replace('-', '_').replace(' ', '_').replace('.', '_')] + args += ['--crate-name', self._get_rust_crate_name(target.name)] if depfile: args += rustc.get_dependency_gen_args(target_name, depfile) args += rustc.get_output_args(target_name) -- cgit v1.2.3