diff options
Diffstat (limited to 'mesonbuild/cargo/interpreter.py')
| -rw-r--r-- | mesonbuild/cargo/interpreter.py | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/mesonbuild/cargo/interpreter.py b/mesonbuild/cargo/interpreter.py index bd505d7c7..6af7469ae 100644 --- a/mesonbuild/cargo/interpreter.py +++ b/mesonbuild/cargo/interpreter.py @@ -39,8 +39,8 @@ def _dependency_name(package_name: str, api: str, suffix: str = '-rs') -> str: return f'{basename}-{api}{suffix}' -def _dependency_varname(package_name: str) -> str: - return f'{fixup_meson_varname(package_name)}_dep' +def _dependency_varname(dep: Dependency) -> str: + return f'{fixup_meson_varname(dep.package)}_{(dep.api.replace(".", "_"))}_dep' def _extra_args_varname() -> str: @@ -329,6 +329,8 @@ class Interpreter: if not dep.meson_version: raise MesonException(f'Cannot determine version of cargo package {dep.package}') dep_pkg = self._fetch_package(dep.package, dep.api) + if not dep.version: + dep.update_version(f'={dep_pkg.manifest.package.version}') return dep_pkg def _load_manifest(self, subdir: str, workspace: T.Optional[Workspace] = None, member_path: str = '') -> T.Union[Manifest, Workspace]: @@ -513,7 +515,6 @@ class Interpreter: def _create_dependency(self, pkg: PackageState, dep: Dependency, build: builder.Builder) -> T.List[mparser.BaseNode]: version_ = dep.meson_version or [pkg.manifest.package.version] - api = dep.api or pkg.manifest.package.api kw = { 'version': build.array([build.string(s) for s in version_]), } @@ -533,10 +534,10 @@ class Interpreter: build.assign( build.function( 'dependency', - [build.string(_dependency_name(dep.package, api))], + [build.string(_dependency_name(dep.package, dep.api))], kw, ), - _dependency_varname(dep.package), + _dependency_varname(dep), ), # actual_features = xxx_dep.get_variable('features', default_value : '').split(',') build.assign( @@ -544,7 +545,7 @@ class Interpreter: 'split', build.method( 'get_variable', - build.identifier(_dependency_varname(dep.package)), + build.identifier(_dependency_varname(dep)), [build.string('features')], {'default_value': build.string('')} ), @@ -563,7 +564,7 @@ class Interpreter: build.if_(build.not_in(build.identifier('f'), build.identifier('actual_features')), build.block([ build.function('error', [ build.string('Dependency'), - build.string(_dependency_name(dep.package, api)), + build.string(_dependency_name(dep.package, dep.api)), build.string('previously configured with features'), build.identifier('actual_features'), build.string('but need'), @@ -648,7 +649,7 @@ class Interpreter: dependency_map: T.Dict[mparser.BaseNode, mparser.BaseNode] = {} for name in pkg.required_deps: dep = pkg.manifest.dependencies[name] - dependencies.append(build.identifier(_dependency_varname(dep.package))) + 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 |
