Skip to content

Commit 0f0def0

Browse files
committed
cargo: use dependencies() method to get dependencies
Signed-off-by: Paolo Bonzini <[email protected]>
1 parent 6da3d43 commit 0f0def0

File tree

1 file changed

+22
-62
lines changed

1 file changed

+22
-62
lines changed

mesonbuild/cargo/interpreter.py

Lines changed: 22 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
from .. import mparser
3535
from typing_extensions import Literal
3636

37-
from .manifest import Dependency, SystemDependency
37+
from .manifest import Dependency
3838
from ..environment import Environment
3939
from ..interpreterbase import SubProject
4040
from ..compilers.rust import RustCompiler
@@ -46,10 +46,6 @@ def _dependency_name(package_name: str, api: str, suffix: str = '-rs') -> str:
4646
return f'{basename}-{api}{suffix}'
4747

4848

49-
def _dependency_varname(dep: Dependency) -> str:
50-
return f'{fixup_meson_varname(dep.package)}_{(dep.api.replace(".", "_"))}_dep'
51-
52-
5349
def _library_name(name: str, api: str, lib_type: Literal['rust', 'c', 'proc-macro'] = 'rust') -> str:
5450
# Add the API version to the library name to avoid conflicts when multiple
5551
# versions of the same crate are used. The Ninja backend removed everything
@@ -696,40 +692,15 @@ def _create_dependencies(self, pkg: PackageState, build: builder.Builder) -> T.L
696692
dep_pkg = self._dep_package(pkg, dep)
697693
if dep_pkg.manifest.lib:
698694
ast += self._create_dependency(dep_pkg, dep, build)
699-
for name, sys_dep in pkg.manifest.system_dependencies.items():
700-
if sys_dep.enabled(cfg.features):
701-
ast += self._create_system_dependency(name, sys_dep, build)
702695
return ast
703696

704-
def _create_system_dependency(self, name: str, dep: SystemDependency, build: builder.Builder) -> T.List[mparser.BaseNode]:
705-
# TODO: handle feature_overrides
706-
kw = {
707-
'version': build.array([build.string(s) for s in dep.meson_version]),
708-
'required': build.bool(not dep.optional),
709-
}
710-
varname = f'{fixup_meson_varname(name)}_system_dep'
711-
return [
712-
build.assign(
713-
build.method(
714-
'to_system_dependency',
715-
build.identifier('rust'), [
716-
build.function(
717-
'dependency',
718-
[build.string(dep.name)],
719-
kw,
720-
),
721-
build.string(name)
722-
]),
723-
varname,
724-
),
725-
]
726-
727697
def _create_dependency(self, pkg: PackageState, dep: Dependency, build: builder.Builder) -> T.List[mparser.BaseNode]:
728698
cfg = pkg.cfg
729-
dep_obj: mparser.BaseNode
699+
feat_obj: mparser.BaseNode
730700
if self.cargolock and self.resolve_package(dep.package, dep.api):
731-
dep_obj = build.method(
732-
'dependency',
701+
# actual_features = cargo.subproject(...).features()
702+
feat_obj = build.method(
703+
'features',
733704
build.method(
734705
'subproject',
735706
build.identifier('cargo'),
@@ -739,10 +710,21 @@ def _create_dependency(self, pkg: PackageState, dep: Dependency, build: builder.
739710
kw = {
740711
'version': build.array([build.string(s) for s in version_]),
741712
}
713+
# actual_features = dependency(...).get_variable('features', default_value : '').split(',')
742714
dep_obj = build.function(
743715
'dependency',
744716
[build.string(_dependency_name(dep.package, dep.api))],
745717
kw)
718+
feat_obj = build.method(
719+
'split',
720+
build.method(
721+
'get_variable',
722+
dep_obj,
723+
[build.string('features')],
724+
{'default_value': build.string('')}
725+
),
726+
[build.string(',')],
727+
)
746728

747729
# However, this subproject could have been previously configured with a
748730
# different set of features. Cargo collects the set of features globally
@@ -754,23 +736,9 @@ def _create_dependency(self, pkg: PackageState, dep: Dependency, build: builder.
754736
# option manually with -Dxxx-rs:feature-yyy=true, or the main project can do
755737
# that in its project(..., default_options: ['xxx-rs:feature-yyy=true']).
756738
return [
757-
# xxx_dep = cargo.subproject('xxx', 'api').dependency()
739+
# actual_features = dependency(...).get_variable('features', default_value : '').split(',')
758740
build.assign(
759-
dep_obj,
760-
_dependency_varname(dep),
761-
),
762-
# actual_features = xxx_dep.get_variable('features', default_value : '').split(',')
763-
build.assign(
764-
build.method(
765-
'split',
766-
build.method(
767-
'get_variable',
768-
build.identifier(_dependency_varname(dep)),
769-
[build.string('features')],
770-
{'default_value': build.string('')}
771-
),
772-
[build.string(',')],
773-
),
741+
feat_obj,
774742
'actual_features'
775743
),
776744
# needed_features = [f1, f2, ...]
@@ -815,22 +783,14 @@ def _create_meson_subdir(self, build: builder.Builder) -> T.List[mparser.BaseNod
815783
def _create_lib(self, pkg: PackageState, build: builder.Builder, subdir: str,
816784
lib_type: RUST_ABI,
817785
static: bool = False, shared: bool = False) -> T.List[mparser.BaseNode]:
818-
cfg = pkg.cfg
819-
dependencies: T.List[mparser.BaseNode] = []
820-
for name in cfg.required_deps:
821-
dep = pkg.manifest.dependencies[name]
822-
dependencies.append(build.identifier(_dependency_varname(dep)))
823-
824-
for name, sys_dep in pkg.manifest.system_dependencies.items():
825-
if sys_dep.enabled(cfg.features):
826-
dependencies.append(build.identifier(f'{fixup_meson_varname(name)}_system_dep'))
786+
pkg_dependencies = build.method('dependencies', build.identifier('pkg_obj'))
787+
extra_deps_ref = build.identifier(_extra_deps_varname())
788+
dependencies = build.plus(pkg_dependencies, extra_deps_ref)
827789

828790
package_rust_args = build.method('rust_args', build.identifier('pkg_obj'))
829791
extra_args_ref = build.identifier(_extra_args_varname())
830792
rust_args = build.plus(package_rust_args, extra_args_ref)
831793

832-
dependencies.append(build.identifier(_extra_deps_varname()))
833-
834794
override_options: T.Dict[mparser.BaseNode, mparser.BaseNode] = {
835795
build.string('rust_std'): build.string(pkg.manifest.package.edition),
836796
}
@@ -841,7 +801,7 @@ def _create_lib(self, pkg: PackageState, build: builder.Builder, subdir: str,
841801
]
842802

843803
kwargs: T.Dict[str, mparser.BaseNode] = {
844-
'dependencies': build.array(dependencies),
804+
'dependencies': dependencies,
845805
'rust_dependency_map': build.method('rust_dependency_map', build.identifier('pkg_obj')),
846806
'rust_args': rust_args,
847807
'override_options': build.dict(override_options),

0 commit comments

Comments
 (0)