|
20 | 20 | from . import builder, version, cfg |
21 | 21 | from .toml import load_toml |
22 | 22 | from .manifest import Manifest, CargoLock, fixup_meson_varname |
23 | | -from ..mesonlib import MesonException, MachineChoice |
| 23 | +from ..mesonlib import MesonException, MachineChoice, version_compare |
24 | 24 | from .. import coredata, mlog |
25 | 25 | from ..wrap.wrap import PackageDefinition |
26 | 26 |
|
@@ -165,6 +165,19 @@ def _dep_package(self, dep: Dependency) -> PackageState: |
165 | 165 | _, _, directory = _parse_git_url(dep.git, dep.branch) |
166 | 166 | dep_pkg, _ = self._fetch_package_from_subproject(dep.package, directory) |
167 | 167 | else: |
| 168 | + # From all available versions from Cargo.lock, pick the most recent |
| 169 | + # satisfying the constraints |
| 170 | + if self.cargolock: |
| 171 | + cargo_lock_pkgs = self.cargolock.named(dep.package) |
| 172 | + else: |
| 173 | + cargo_lock_pkgs = [] |
| 174 | + for cargo_pkg in cargo_lock_pkgs: |
| 175 | + if all(version_compare(cargo_pkg.version, v) for v in dep.meson_version): |
| 176 | + dep.update_version(f'={cargo_pkg.version}') |
| 177 | + break |
| 178 | + else: |
| 179 | + if not dep.meson_version: |
| 180 | + raise MesonException(f'Cannot determine version of cargo package {dep.package}') |
168 | 181 | dep_pkg, _ = self._fetch_package(dep.package, dep.api) |
169 | 182 | return dep_pkg |
170 | 183 |
|
|
0 commit comments