aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend/ninjabackend.py
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2023-04-13 23:04:51 +0300
committerXavier Claessens <xclaesse@gmail.com>2023-04-21 15:35:06 -0400
commit01420bf8fc1ee6c1466e2fa4c9805267192dce26 (patch)
treec419d8b14d4a4144a4a3ce093f853e0c7d385875 /mesonbuild/backend/ninjabackend.py
parent474e3ea8afd170ae86cc5c3a547caee65f97ecb8 (diff)
downloadmeson-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.py20
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: