diff options
author | Sebastian Dröge <sebastian@centricular.com> | 2023-04-13 23:04:51 +0300 |
---|---|---|
committer | Xavier Claessens <xclaesse@gmail.com> | 2023-04-21 15:35:06 -0400 |
commit | 01420bf8fc1ee6c1466e2fa4c9805267192dce26 (patch) | |
tree | c419d8b14d4a4144a4a3ce093f853e0c7d385875 /mesonbuild/backend/ninjabackend.py | |
parent | 474e3ea8afd170ae86cc5c3a547caee65f97ecb8 (diff) | |
download | meson-01420bf8fc1ee6c1466e2fa4c9805267192dce26.zip meson-01420bf8fc1ee6c1466e2fa4c9805267192dce26.tar.gz meson-01420bf8fc1ee6c1466e2fa4c9805267192dce26.tar.bz2 |
rust: Add new `rust_dependency_map` target configuration
This allows changing the crate name with which a library ends up being
available inside the Rust code, similar to cargo's dependency renaming
feature or `extern crate foo as bar` inside Rust code.
Diffstat (limited to 'mesonbuild/backend/ninjabackend.py')
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index 4d367ed..edf9c1f 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -50,7 +50,7 @@ if T.TYPE_CHECKING: from typing_extensions import Literal from .._typing import ImmutableListProtocol - from ..build import ExtractedObjects + from ..build import ExtractedObjects, LibTypes from ..interpreter import Interpreter from ..linkers import DynamicLinker, StaticLinker from ..compilers.cs import CsCompiler @@ -1830,6 +1830,12 @@ 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('-', '_') + def generate_rust_target(self, target: build.BuildTarget) -> None: rustc = target.compilers['rust'] # Rust compiler takes only the main file as input and @@ -1936,11 +1942,7 @@ class NinjaBackend(backends.Backend): # specify `extern CRATE_NAME=OUTPUT_FILE` for each Rust # dependency, so that collisions with libraries in rustc's # sysroot don't cause ambiguity - # - # Also convert crate names with dashes to underscores like - # cargo does as dashes can't be used as parts of identifiers - # in Rust - d_name = d.name.replace('-', '_') + d_name = self._get_rust_dependency_name(target, d) args += ['--extern', '{}={}'.format(d_name, os.path.join(d.subdir, d.filename))] project_deps.append(RustDep(d_name, self.rust_crates[d.name].order)) elif isinstance(d, build.StaticLibrary): @@ -1979,11 +1981,7 @@ class NinjaBackend(backends.Backend): # specify `extern CRATE_NAME=OUTPUT_FILE` for each Rust # dependency, so that collisions with libraries in rustc's # sysroot don't cause ambiguity - # - # Also convert crate names with dashes to underscores like - # cargo does as dashes can't be used as parts of identifiers - # in Rust - d_name = d.name.replace('-', '_') + d_name = self._get_rust_dependency_name(target, d) args += ['--extern', '{}={}'.format(d_name, os.path.join(d.subdir, d.filename))] project_deps.append(RustDep(d_name, self.rust_crates[d.name].order)) else: |