summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2025-09-12 13:41:21 +0200
committerXavier Claessens <xclaesse@gmail.com>2025-10-27 21:14:30 +0100
commit271dbd81c3821c7535056470b52ddbd6f5ada703 (patch)
tree3e0fbdf3626226621c9deba202456f707f6f52be
parentd819ed3fe05967f0b9c9c15018d2feb5755d2d1c (diff)
downloadmeson-271dbd81c3821c7535056470b52ddbd6f5ada703.tar.gz
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 <pbonzini@redhat.com>
-rw-r--r--mesonbuild/backend/ninjabackend.py18
1 files 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)