diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2025-11-28 17:51:46 +0100 |
|---|---|---|
| committer | Dylan Baker <dylan@pnwbakers.com> | 2025-12-08 10:07:44 -0800 |
| commit | 908e85b326ff161273f079a4f4fa3dfd207ced9c (patch) | |
| tree | dec74f71ccaf3d9bc892c76978acfa1165d771f8 /mesonbuild/cargo | |
| parent | 7f6967f7ddc9268869718393c7d9043f6e1d255d (diff) | |
| download | meson-908e85b326ff161273f079a4f4fa3dfd207ced9c.tar.gz | |
cargo: autodetect patch directory
Many crates that have a build.rs will usually require an overlay
with the translated meson/meson.build file. To avoid having to
create a .wrap file, when parsing Cargo.lock autodetect a directory
in subproject/packagefiles/ and add it as the patch_directory.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'mesonbuild/cargo')
| -rw-r--r-- | mesonbuild/cargo/interpreter.py | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/mesonbuild/cargo/interpreter.py b/mesonbuild/cargo/interpreter.py index 06076fa69..e26298641 100644 --- a/mesonbuild/cargo/interpreter.py +++ b/mesonbuild/cargo/interpreter.py @@ -819,6 +819,7 @@ def load_cargo_lock(filename: str, subproject_dir: str) -> T.Optional[CargoLock] toml = load_toml(filename) raw_cargolock = T.cast('raw.CargoLock', toml) cargolock = CargoLock.from_raw(raw_cargolock) + packagefiles_dir = os.path.join(subproject_dir, 'packagefiles') wraps: T.Dict[str, PackageDefinition] = {} for package in cargolock.package: meson_depname = _dependency_name(package.name, version.api(package.version)) @@ -832,6 +833,7 @@ def load_cargo_lock(filename: str, subproject_dir: str) -> T.Optional[CargoLock] url = f'https://crates.io/api/v1/crates/{package.name}/{package.version}/download' directory = f'{package.name}-{package.version}' name = meson_depname + wrap_type = 'file' cfg = { 'directory': directory, 'source_url': url, @@ -842,17 +844,19 @@ def load_cargo_lock(filename: str, subproject_dir: str) -> T.Optional[CargoLock] elif package.source.startswith('git+'): url, revision, directory = _parse_git_url(package.source) name = directory + wrap_type = 'git' cfg = { 'url': url, 'revision': revision, 'method': 'cargo', } - wraps[directory].add_provided_dep(meson_depname) else: mlog.warning(f'Unsupported source URL in {filename}: {package.source}') continue + if os.path.isdir(os.path.join(packagefiles_dir, name)): + cfg['patch_directory'] = name if directory not in wraps: - wraps[directory] = PackageDefinition.from_values(name, subproject_dir, 'file', cfg) + wraps[directory] = PackageDefinition.from_values(name, subproject_dir, wrap_type, cfg) wraps[directory].add_provided_dep(meson_depname) cargolock.wraps = {w.name: w for w in wraps.values()} return cargolock |
