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-
5349def _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