diff options
| author | Xavier Claessens <xclaessens@netflix.com> | 2025-10-27 16:42:21 +0000 |
|---|---|---|
| committer | Xavier Claessens <xclaesse@gmail.com> | 2025-10-28 17:44:16 +0100 |
| commit | 44ce04537d0853f4c1565a7c7a7519f4e290c4ba (patch) | |
| tree | 52c922be5cec5b4c2549f92dac2de719ff7bf337 /mesonbuild/cargo/interpreter.py | |
| parent | 1c620b2b783e0f53e7aafaee2fbdfdb72a0b9781 (diff) | |
| download | meson-44ce04537d0853f4c1565a7c7a7519f4e290c4ba.tar.gz | |
cargo: Add library API version into its name
It is required to have unique library names for rust_dependency_map to
work. In the case we have foo crate in multiple versions, we have to
make sure their .rlib file have a different name.
Diffstat (limited to 'mesonbuild/cargo/interpreter.py')
| -rw-r--r-- | mesonbuild/cargo/interpreter.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/mesonbuild/cargo/interpreter.py b/mesonbuild/cargo/interpreter.py index 6af7469ae..8fae44b91 100644 --- a/mesonbuild/cargo/interpreter.py +++ b/mesonbuild/cargo/interpreter.py @@ -43,6 +43,15 @@ def _dependency_varname(dep: Dependency) -> str: return f'{fixup_meson_varname(dep.package)}_{(dep.api.replace(".", "_"))}_dep' +def _library_name(name: str, api: str, lib_type: Literal['rust', 'c', 'proc-macro'] = 'rust') -> str: + # Add the API version to the library name to avoid conflicts when multiple + # versions of the same crate are used. The Ninja backend removed everything + # after the + to form the crate name. + if lib_type == 'c': + return name + return f'{name}+{api.replace(".", "_")}' + + def _extra_args_varname() -> str: return 'extra_args' @@ -652,8 +661,8 @@ class Interpreter: dependencies.append(build.identifier(_dependency_varname(dep))) if name != dep.package: dep_pkg = self._dep_package(pkg, dep) - dep_lib_name = dep_pkg.manifest.lib.name - dependency_map[build.string(fixup_meson_varname(dep_lib_name))] = build.string(name) + dep_lib_name = _library_name(dep_pkg.manifest.lib.name, dep_pkg.manifest.package.api) + dependency_map[build.string(dep_lib_name)] = build.string(name) for name, sys_dep in pkg.manifest.system_dependencies.items(): if sys_dep.enabled(pkg.features): dependencies.append(build.identifier(f'{fixup_meson_varname(name)}_system_dep')) @@ -673,7 +682,7 @@ class Interpreter: } posargs: T.List[mparser.BaseNode] = [ - build.string(fixup_meson_varname(pkg.manifest.lib.name)), + build.string(_library_name(pkg.manifest.lib.name, pkg.manifest.package.api, lib_type)), build.string(pkg.manifest.lib.path), ] |
