* [PATCH 1/9] scripts: print build.rs diff
2026-08-21 8:39 [PATCH 0/9] scripts: introduce script to update cargo .wrap files Paolo Bonzini
@ 2026-08-21 8:39 ` Paolo Bonzini
2026-08-21 8:39 ` [PATCH 2/9] scripts: rename variable in scripts/get-wraps-from-cargo-registry.py Paolo Bonzini
` (8 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Paolo Bonzini @ 2026-08-21 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-rust
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
scripts/get-wraps-from-cargo-registry.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/scripts/get-wraps-from-cargo-registry.py b/scripts/get-wraps-from-cargo-registry.py
index 3820d121183..84c652127f9 100755
--- a/scripts/get-wraps-from-cargo-registry.py
+++ b/scripts/get-wraps-from-cargo-registry.py
@@ -59,8 +59,10 @@ def compare_build_rs(self, orig_dir: str, registry_namever: str) -> None:
if os.path.isfile(new_build_rs):
msg = f"build.rs added in {registry_namever}"
- elif os.path.isfile(orig_build_rs) and not filecmp.cmp(orig_build_rs, new_build_rs):
+ elif os.path.isfile(orig_build_rs) and not filecmp.cmp(orig_build_rs, new_build_rs, shallow=False):
msg = f"build.rs changed from {orig_dir} to {registry_namever}"
+ # diff exits non-zero when the files differ, which is expected here
+ subprocess.run(["diff", "-u", orig_build_rs, new_build_rs])
if msg:
print(f"⚠️ Warning: {msg}")
--
2.55.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 2/9] scripts: rename variable in scripts/get-wraps-from-cargo-registry.py
2026-08-21 8:39 [PATCH 0/9] scripts: introduce script to update cargo .wrap files Paolo Bonzini
2026-08-21 8:39 ` [PATCH 1/9] scripts: print build.rs diff Paolo Bonzini
@ 2026-08-21 8:39 ` Paolo Bonzini
2026-08-21 8:39 ` [PATCH 3/9] scripts: do not assume the new version of the crate is present Paolo Bonzini
` (7 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Paolo Bonzini @ 2026-08-21 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-rust
Do first the change that makes the diff larger than it should be.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
scripts/get-wraps-from-cargo-registry.py | 32 ++++++++++++------------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/scripts/get-wraps-from-cargo-registry.py b/scripts/get-wraps-from-cargo-registry.py
index 84c652127f9..0095bd937ec 100755
--- a/scripts/get-wraps-from-cargo-registry.py
+++ b/scripts/get-wraps-from-cargo-registry.py
@@ -47,20 +47,20 @@ def find_installed_crate(self, namever: str) -> str | None:
matches = sorted(glob.glob(f"{path}.*"))
return os.path.basename(matches[0]) if matches else None
- def compare_build_rs(self, orig_dir: str, registry_namever: str) -> None:
+ def compare_build_rs(self, orig_dir: str, source_namever: str) -> None:
"""Warn if the build.rs in the original directory differs from the registry version."""
orig_build_rs = os.path.join(orig_dir, "build.rs")
- new_build_rs = os.path.join(self.cargo_registry, registry_namever, "build.rs")
+ new_build_rs = os.path.join(self.cargo_registry, source_namever, "build.rs")
msg = None
if os.path.isfile(orig_build_rs) != os.path.isfile(new_build_rs):
if os.path.isfile(orig_build_rs):
- msg = f"build.rs removed in {registry_namever}"
+ msg = f"build.rs removed in {source_namever}"
if os.path.isfile(new_build_rs):
- msg = f"build.rs added in {registry_namever}"
+ msg = f"build.rs added in {source_namever}"
elif os.path.isfile(orig_build_rs) and not filecmp.cmp(orig_build_rs, new_build_rs, shallow=False):
- msg = f"build.rs changed from {orig_dir} to {registry_namever}"
+ msg = f"build.rs changed from {orig_dir} to {source_namever}"
# diff exits non-zero when the files differ, which is expected here
subprocess.run(["diff", "-u", orig_build_rs, new_build_rs])
@@ -68,7 +68,7 @@ def compare_build_rs(self, orig_dir: str, registry_namever: str) -> None:
print(f"⚠️ Warning: {msg}")
print(" This may affect the build process - please review the differences.")
- def update_subproject(self, wrap_file: str, registry_namever: str) -> None:
+ def update_subproject(self, wrap_file: str, source_namever: str) -> None:
"""Modify [wrap-file] section to point to self.cargo_registry."""
assert wrap_file.endswith("-rs.wrap")
wrap_name = wrap_file[:-5]
@@ -83,18 +83,18 @@ def update_subproject(self, wrap_file: str, registry_namever: str) -> None:
# do not download the wrap, always use the local copy
orig_dir = config["wrap-file"]["directory"]
- if os.path.exists(orig_dir) and orig_dir != registry_namever:
- self.compare_build_rs(orig_dir, registry_namever)
+ if os.path.exists(orig_dir) and orig_dir != source_namever:
+ self.compare_build_rs(orig_dir, source_namever)
if self.dry_run:
- if orig_dir == registry_namever:
+ if orig_dir == source_namever:
print(f"Will install {orig_dir} from registry.")
else:
- print(f"Will replace {orig_dir} with {registry_namever}.")
+ print(f"Will replace {orig_dir} with {source_namever}.")
self.changes += 1
return
- config["wrap-file"]["directory"] = registry_namever
+ config["wrap-file"]["directory"] = source_namever
for key in list(config["wrap-file"].keys()):
if key.startswith("source"):
del config["wrap-file"][key]
@@ -111,10 +111,10 @@ def update_subproject(self, wrap_file: str, registry_namever: str) -> None:
with open(wrap_file, "w") as f:
config.write(f)
- if orig_dir == registry_namever:
+ if orig_dir == source_namever:
print(f"Installing {orig_dir} from registry.")
else:
- print(f"Replacing {orig_dir} with {registry_namever}.")
+ print(f"Replacing {orig_dir} with {source_namever}.")
subprocess.run(
["meson", "subprojects", "download", wrap_name],
@@ -162,12 +162,12 @@ def main(self) -> None:
for wrap_file in sorted(glob.glob("*-rs.wrap")):
namever = wrap_file[:-8] # Remove '-rs.wrap'
- registry_namever = self.find_installed_crate(namever)
- if not registry_namever:
+ source_namever = self.find_installed_crate(namever)
+ if not source_namever:
print(f"No installed crate found for {wrap_file}")
continue
- self.update_subproject(wrap_file, registry_namever)
+ self.update_subproject(wrap_file, source_namever)
if self.changes:
if self.dry_run:
--
2.55.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 3/9] scripts: do not assume the new version of the crate is present
2026-08-21 8:39 [PATCH 0/9] scripts: introduce script to update cargo .wrap files Paolo Bonzini
2026-08-21 8:39 ` [PATCH 1/9] scripts: print build.rs diff Paolo Bonzini
2026-08-21 8:39 ` [PATCH 2/9] scripts: rename variable in scripts/get-wraps-from-cargo-registry.py Paolo Bonzini
@ 2026-08-21 8:39 ` Paolo Bonzini
2026-08-21 8:39 ` [PATCH 4/9] scripts: prepare for introduction of CrateSource class Paolo Bonzini
` (6 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Paolo Bonzini @ 2026-08-21 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-rust
Until now, the new version of the crate was always there in
the registry. This will be different when crates are downloaded
from Cargo.lock, so delay the comparison of build.rs until a
point at which both source directories have been extracted.
Since the .wrap file at this point points to the new directory,
delete the old one "by hand" with shutil.rmtree instead of asking
Meson to do it before the .wrap file is changed.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
scripts/get-wraps-from-cargo-registry.py | 19 ++++++-------------
1 file changed, 6 insertions(+), 13 deletions(-)
diff --git a/scripts/get-wraps-from-cargo-registry.py b/scripts/get-wraps-from-cargo-registry.py
index 0095bd937ec..8b45c1551f5 100755
--- a/scripts/get-wraps-from-cargo-registry.py
+++ b/scripts/get-wraps-from-cargo-registry.py
@@ -15,6 +15,7 @@
import filecmp
import glob
import os
+import shutil
import subprocess
import sys
@@ -50,7 +51,7 @@ def find_installed_crate(self, namever: str) -> str | None:
def compare_build_rs(self, orig_dir: str, source_namever: str) -> None:
"""Warn if the build.rs in the original directory differs from the registry version."""
orig_build_rs = os.path.join(orig_dir, "build.rs")
- new_build_rs = os.path.join(self.cargo_registry, source_namever, "build.rs")
+ new_build_rs = os.path.join(source_namever, "build.rs")
msg = None
if os.path.isfile(orig_build_rs) != os.path.isfile(new_build_rs):
@@ -81,10 +82,7 @@ def update_subproject(self, wrap_file: str, source_namever: str) -> None:
if "wrap-file" not in config:
return
- # do not download the wrap, always use the local copy
orig_dir = config["wrap-file"]["directory"]
- if os.path.exists(orig_dir) and orig_dir != source_namever:
- self.compare_build_rs(orig_dir, source_namever)
if self.dry_run:
if orig_dir == source_namever:
@@ -99,15 +97,6 @@ def update_subproject(self, wrap_file: str, source_namever: str) -> None:
if key.startswith("source"):
del config["wrap-file"][key]
- # replace existing directory with installed version
- if os.path.exists(orig_dir):
- subprocess.run(
- ["meson", "subprojects", "purge", "--confirm", wrap_name],
- cwd=self.top_srcdir,
- env=env,
- check=True,
- )
-
with open(wrap_file, "w") as f:
config.write(f)
@@ -124,6 +113,10 @@ def update_subproject(self, wrap_file: str, source_namever: str) -> None:
)
self.changes += 1
+ if os.path.exists(orig_dir) and orig_dir != source_namever:
+ self.compare_build_rs(orig_dir, source_namever)
+ shutil.rmtree(orig_dir)
+
@staticmethod
def parse_cmdline() -> argparse.Namespace:
parser = argparse.ArgumentParser(
--
2.55.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 4/9] scripts: prepare for introduction of CrateSource class
2026-08-21 8:39 [PATCH 0/9] scripts: introduce script to update cargo .wrap files Paolo Bonzini
` (2 preceding siblings ...)
2026-08-21 8:39 ` [PATCH 3/9] scripts: do not assume the new version of the crate is present Paolo Bonzini
@ 2026-08-21 8:39 ` Paolo Bonzini
2026-08-21 8:39 ` [PATCH 5/9] scripts: introduce CrateSource abstract class Paolo Bonzini
` (5 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Paolo Bonzini @ 2026-08-21 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-rust
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
scripts/get-wraps-from-cargo-registry.py | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/scripts/get-wraps-from-cargo-registry.py b/scripts/get-wraps-from-cargo-registry.py
index 8b45c1551f5..8114f0731be 100755
--- a/scripts/get-wraps-from-cargo-registry.py
+++ b/scripts/get-wraps-from-cargo-registry.py
@@ -48,6 +48,14 @@ def find_installed_crate(self, namever: str) -> str | None:
matches = sorted(glob.glob(f"{path}.*"))
return os.path.basename(matches[0]) if matches else None
+ def rewrite_source(self, section: configparser.SectionProxy, orig_namever: str, registry_namever: str) -> bool:
+ # the registry already holds the extracted sources, so Meson does not
+ # download anything: drop the source_* keys.
+ for key in list(section.keys()):
+ if key.startswith("source"):
+ del section[key]
+ return True
+
def compare_build_rs(self, orig_dir: str, source_namever: str) -> None:
"""Warn if the build.rs in the original directory differs from the registry version."""
orig_build_rs = os.path.join(orig_dir, "build.rs")
@@ -82,7 +90,8 @@ def update_subproject(self, wrap_file: str, source_namever: str) -> None:
if "wrap-file" not in config:
return
- orig_dir = config["wrap-file"]["directory"]
+ section = config["wrap-file"]
+ orig_dir = section["directory"]
if self.dry_run:
if orig_dir == source_namever:
@@ -92,10 +101,10 @@ def update_subproject(self, wrap_file: str, source_namever: str) -> None:
self.changes += 1
return
- config["wrap-file"]["directory"] = source_namever
- for key in list(config["wrap-file"].keys()):
- if key.startswith("source"):
- del config["wrap-file"][key]
+ section["directory"] = source_namever
+ if self.rewrite_source(section, orig_dir, source_namever):
+ with open(wrap_file, "w") as f:
+ config.write(f)
with open(wrap_file, "w") as f:
config.write(f)
--
2.55.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 5/9] scripts: introduce CrateSource abstract class
2026-08-21 8:39 [PATCH 0/9] scripts: introduce script to update cargo .wrap files Paolo Bonzini
` (3 preceding siblings ...)
2026-08-21 8:39 ` [PATCH 4/9] scripts: prepare for introduction of CrateSource class Paolo Bonzini
@ 2026-08-21 8:39 ` Paolo Bonzini
2026-08-21 8:39 ` [PATCH 6/9] scripts: add functionality to update wrap files from Cargo.lock Paolo Bonzini
` (4 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Paolo Bonzini @ 2026-08-21 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-rust
Prepare for making the script able to update .wrap files with
versions from Cargo.lock.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
scripts/get-wraps-from-cargo-registry.py | 49 ++++++++++++++++++------
1 file changed, 38 insertions(+), 11 deletions(-)
diff --git a/scripts/get-wraps-from-cargo-registry.py b/scripts/get-wraps-from-cargo-registry.py
index 8114f0731be..636e4ba3474 100755
--- a/scripts/get-wraps-from-cargo-registry.py
+++ b/scripts/get-wraps-from-cargo-registry.py
@@ -29,18 +29,36 @@ def get_name_and_semver(namever: str) -> tuple[str, str]:
return parts[0], parts[1]
-class UpdateSubprojects:
- cargo_registry: str
- top_srcdir: str
- dry_run: bool
- changes: int = 0
+class CrateSource:
+ """Class for locating crate versions and pointing wrap files at them.
+ Subclasses know where the source of a crate comes from and how to
+ rewrite the ``[wrap-file]`` to consume it."""
- def find_installed_crate(self, namever: str) -> str | None:
+ origin: str
+
+ def find(self, namever: str) -> str | None:
+ """Resolve a 'name-semver' prefix to a concrete 'name-version'."""
+ raise NotImplementedError
+
+ def rewrite_source(self, section: configparser.SectionProxy, orig_namever: str, source_namever: str) -> bool:
+ """Update the download-related keys of a [wrap-file] section."""
+ raise NotImplementedError
+
+
+class CargoRegistry(CrateSource):
+ """Locate crates already extracted in a local Cargo registry directory."""
+
+ origin = "the Cargo registry"
+
+ def __init__(self, path: str):
+ self.path = path
+
+ def find(self, namever: str) -> str | None:
"""Find installed crate matching name and semver prefix"""
name, semver = get_name_and_semver(namever)
# exact version match
- path = os.path.join(self.cargo_registry, f"{name}-{semver}")
+ path = os.path.join(self.path, f"{name}-{semver}")
if os.path.exists(path):
return f"{name}-{semver}"
@@ -56,6 +74,14 @@ def rewrite_source(self, section: configparser.SectionProxy, orig_namever: str,
del section[key]
return True
+
+class UpdateSubprojects:
+ cargo_registry: str
+ source: CrateSource
+ top_srcdir: str
+ dry_run: bool
+ changes: int = 0
+
def compare_build_rs(self, orig_dir: str, source_namever: str) -> None:
"""Warn if the build.rs in the original directory differs from the registry version."""
orig_build_rs = os.path.join(orig_dir, "build.rs")
@@ -102,7 +128,7 @@ def update_subproject(self, wrap_file: str, source_namever: str) -> None:
return
section["directory"] = source_namever
- if self.rewrite_source(section, orig_dir, source_namever):
+ if self.source.rewrite_source(section, orig_dir, source_namever):
with open(wrap_file, "w") as f:
config.write(f)
@@ -110,9 +136,9 @@ def update_subproject(self, wrap_file: str, source_namever: str) -> None:
config.write(f)
if orig_dir == source_namever:
- print(f"Installing {orig_dir} from registry.")
+ print(f"👉 Installing {orig_dir} from {self.source.origin}.")
else:
- print(f"Replacing {orig_dir} with {source_namever}.")
+ print(f"👉 Replacing {orig_dir} with {source_namever}.")
subprocess.run(
["meson", "subprojects", "download", wrap_name],
@@ -154,6 +180,7 @@ def __init__(self, args: argparse.Namespace):
self.cargo_registry = args.cargo_registry
self.dry_run = args.dry_run
self.top_srcdir = os.getcwd()
+ self.source = CargoRegistry(args.cargo_registry)
def main(self) -> None:
if not os.path.exists("subprojects"):
@@ -164,7 +191,7 @@ def main(self) -> None:
for wrap_file in sorted(glob.glob("*-rs.wrap")):
namever = wrap_file[:-8] # Remove '-rs.wrap'
- source_namever = self.find_installed_crate(namever)
+ source_namever = self.source.find(namever)
if not source_namever:
print(f"No installed crate found for {wrap_file}")
continue
--
2.55.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 6/9] scripts: add functionality to update wrap files from Cargo.lock
2026-08-21 8:39 [PATCH 0/9] scripts: introduce script to update cargo .wrap files Paolo Bonzini
` (4 preceding siblings ...)
2026-08-21 8:39 ` [PATCH 5/9] scripts: introduce CrateSource abstract class Paolo Bonzini
@ 2026-08-21 8:39 ` Paolo Bonzini
2026-08-21 8:39 ` [PATCH 7/9] scripts: add the possibility of a quick update of the pacakge Paolo Bonzini
` (3 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Paolo Bonzini @ 2026-08-21 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-rust
.wrap files and Cargo.lock contain pretty much the same information.
QEMU uses the former to make it easier for distros to use a local
registry, and also because Meson <1.13 does not use Cargo.lock for
the "meson subprojects" command. This however introduces an
inconvenience when running "cargo update", in that the wrap
files have to be updated by hand.
Add the possibility to get new versions from Cargo.lock and not
just from a local registry, thus automating the update.
For now, only existing wrap files are modified. This means
that semver-breaking updates need to be done (at least partly)
by hand; it is enough to rename the wrap file prior to running
the script.
While the need for this script is a lot smaller with Meson 1.13, it
would still remain useful for packages that have a patch directory.
Perhaps a bit overengineered, but since we have it...
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
scripts/get-wraps-from-cargo-registry.py | 77 +++++++++++++++++++++---
1 file changed, 69 insertions(+), 8 deletions(-)
diff --git a/scripts/get-wraps-from-cargo-registry.py b/scripts/get-wraps-from-cargo-registry.py
index 636e4ba3474..b3ae5a2c284 100755
--- a/scripts/get-wraps-from-cargo-registry.py
+++ b/scripts/get-wraps-from-cargo-registry.py
@@ -3,7 +3,8 @@
# SPDX-License-Identifier: GPL-2.0-or-later
"""
-get-wraps-from-cargo-registry.py - Update Meson subprojects from a global registry
+get-wraps-from-cargo-registry.py - Update Meson subprojects from a Cargo
+registry or from the versions pinned in Cargo.lock.
"""
# Copyright (C) 2025 Red Hat, Inc.
@@ -18,6 +19,7 @@
import shutil
import subprocess
import sys
+import tomllib
def get_name_and_semver(namever: str) -> tuple[str, str]:
@@ -75,6 +77,49 @@ def rewrite_source(self, section: configparser.SectionProxy, orig_namever: str,
return True
+class CargoLock(CrateSource):
+ """Locate crates by the versions pinned in a Cargo.lock file."""
+
+ origin = "crates.io"
+
+ def __init__(self, path: str):
+ with open(path, "rb") as f:
+ data = tomllib.load(f)
+
+ self.versions: dict[str, list[str]] = {}
+ self.checksums: dict[str, str] = {}
+ for pkg in data.get("package", []):
+ # workspace members have neither a checksum nor a crates.io tarball
+ if "checksum" not in pkg:
+ continue
+ name, version = pkg["name"], pkg["version"]
+ self.versions.setdefault(name, []).append(version)
+ self.checksums[f"{name}-{version}"] = pkg["checksum"]
+
+ def find(self, namever: str) -> str | None:
+ """Find pinned crate matching name and semver prefix"""
+ name, semver = get_name_and_semver(namever)
+ versions = sorted(self.versions.get(name, []))
+
+ # exact version match
+ if semver in versions:
+ return f"{name}-{semver}"
+
+ # semver match
+ matches = [v for v in versions if v.startswith(f"{semver}.")]
+ return f"{name}-{matches[0]}" if matches else None
+
+ def rewrite_source(self, section: configparser.SectionProxy, orig_namever: str, new_namever: str) -> bool:
+ # rewrite the download keys to fetch the pinned version from crates.io.
+ if orig_namever == new_namever:
+ return False
+ name, version = get_name_and_semver(new_namever)
+ section["source_url"] = f"https://crates.io/api/v1/crates/{name}/{version}/download"
+ section["source_filename"] = f"{new_namever}.tar.gz"
+ section["source_hash"] = self.checksums[new_namever]
+ return True
+
+
class UpdateSubprojects:
cargo_registry: str
source: CrateSource
@@ -104,12 +149,13 @@ def compare_build_rs(self, orig_dir: str, source_namever: str) -> None:
print(" This may affect the build process - please review the differences.")
def update_subproject(self, wrap_file: str, source_namever: str) -> None:
- """Modify [wrap-file] section to point to self.cargo_registry."""
+ """Modify [wrap-file] section to use the crate resolved as `source_namever`."""
assert wrap_file.endswith("-rs.wrap")
wrap_name = wrap_file[:-5]
env = os.environ.copy()
- env["MESON_PACKAGE_CACHE_DIR"] = self.cargo_registry
+ if self.cargo_registry:
+ env["MESON_PACKAGE_CACHE_DIR"] = self.cargo_registry
config = configparser.ConfigParser()
config.read(wrap_file)
@@ -157,9 +203,15 @@ def parse_cmdline() -> argparse.Namespace:
parser = argparse.ArgumentParser(
description="Replace Meson subprojects with packages in a Cargo registry"
)
+ parser.add_argument(
+ "--cargo-lock",
+ action='store_true',
+ default=False,
+ help="Update wraps from Cargo.lock",
+ )
parser.add_argument(
"--cargo-registry",
- default=os.environ.get("CARGO_REGISTRY"),
+ default=None,
help="Path to Cargo registry (default: CARGO_REGISTRY env var)",
)
parser.add_argument(
@@ -170,9 +222,15 @@ def parse_cmdline() -> argparse.Namespace:
)
args = parser.parse_args()
- if not args.cargo_registry:
- print("error: CARGO_REGISTRY environment variable not set and --cargo-registry not provided")
+ if args.cargo_registry and args.cargo_lock:
+ print("error: --cargo-registry and --cargo-lock are incompatible")
sys.exit(1)
+ if not args.cargo_registry and not args.cargo_lock:
+ args.cargo_registry = os.environ.get("CARGO_REGISTRY")
+ if not args.cargo_registry:
+ print("error: CARGO_REGISTRY environment variable not set and " +
+ "--cargo-registry or --cargo-lock not provided")
+ sys.exit(1)
return args
@@ -180,7 +238,10 @@ def __init__(self, args: argparse.Namespace):
self.cargo_registry = args.cargo_registry
self.dry_run = args.dry_run
self.top_srcdir = os.getcwd()
- self.source = CargoRegistry(args.cargo_registry)
+ if args.cargo_lock:
+ self.source = CargoLock(os.path.join(self.top_srcdir, "Cargo.lock"))
+ else:
+ self.source = CargoRegistry(args.cargo_registry)
def main(self) -> None:
if not os.path.exists("subprojects"):
@@ -193,7 +254,7 @@ def main(self) -> None:
source_namever = self.source.find(namever)
if not source_namever:
- print(f"No installed crate found for {wrap_file}")
+ print(f"No crate found for {wrap_file}")
continue
self.update_subproject(wrap_file, source_namever)
--
2.55.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 7/9] scripts: add the possibility of a quick update of the pacakge
2026-08-21 8:39 [PATCH 0/9] scripts: introduce script to update cargo .wrap files Paolo Bonzini
` (5 preceding siblings ...)
2026-08-21 8:39 ` [PATCH 6/9] scripts: add functionality to update wrap files from Cargo.lock Paolo Bonzini
@ 2026-08-21 8:39 ` Paolo Bonzini
2026-08-21 8:39 ` [PATCH 8/9] scripts: rename get-wraps-from-cargo-registry.py Paolo Bonzini
` (2 subsequent siblings)
9 siblings, 0 replies; 12+ messages in thread
From: Paolo Bonzini @ 2026-08-21 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-rust
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
scripts/get-wraps-from-cargo-registry.py | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/scripts/get-wraps-from-cargo-registry.py b/scripts/get-wraps-from-cargo-registry.py
index b3ae5a2c284..a26fe135eb9 100755
--- a/scripts/get-wraps-from-cargo-registry.py
+++ b/scripts/get-wraps-from-cargo-registry.py
@@ -166,10 +166,13 @@ def update_subproject(self, wrap_file: str, source_namever: str) -> None:
orig_dir = section["directory"]
if self.dry_run:
- if orig_dir == source_namever:
- print(f"Will install {orig_dir} from registry.")
- else:
+ if orig_dir != source_namever:
print(f"Will replace {orig_dir} with {source_namever}.")
+ elif not os.path.exists(orig_dir) or self.cargo_registry:
+ print(f"Will install {orig_dir} from {self.source.origin}.")
+ else:
+ print(f"Will update {orig_dir} from cache.")
+ return
self.changes += 1
return
@@ -181,10 +184,19 @@ def update_subproject(self, wrap_file: str, source_namever: str) -> None:
with open(wrap_file, "w") as f:
config.write(f)
- if orig_dir == source_namever:
+ if orig_dir != source_namever:
+ print(f"👉 Replacing {orig_dir} with {source_namever}.")
+ elif not os.path.exists(orig_dir) or self.cargo_registry:
print(f"👉 Installing {orig_dir} from {self.source.origin}.")
else:
- print(f"👉 Replacing {orig_dir} with {source_namever}.")
+ print(f"👉 Updating {orig_dir} from cache.")
+ subprocess.run(
+ ["meson", "subprojects", "update", "--reset", wrap_name],
+ cwd=self.top_srcdir,
+ env=env,
+ check=True,
+ )
+ return
subprocess.run(
["meson", "subprojects", "download", wrap_name],
--
2.55.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH 8/9] scripts: rename get-wraps-from-cargo-registry.py
2026-08-21 8:39 [PATCH 0/9] scripts: introduce script to update cargo .wrap files Paolo Bonzini
` (6 preceding siblings ...)
2026-08-21 8:39 ` [PATCH 7/9] scripts: add the possibility of a quick update of the pacakge Paolo Bonzini
@ 2026-08-21 8:39 ` Paolo Bonzini
2026-08-26 9:11 ` Zhao Liu
2026-08-21 8:39 ` [PATCH 9/9] rust: update crates Paolo Bonzini
2026-08-24 7:17 ` [PATCH 0/9] scripts: introduce script to update cargo .wrap files Marc-André Lureau
9 siblings, 1 reply; 12+ messages in thread
From: Paolo Bonzini @ 2026-08-21 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-rust
It does more than that now.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
.../{get-wraps-from-cargo-registry.py => update-cargo-wraps.py} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename scripts/{get-wraps-from-cargo-registry.py => update-cargo-wraps.py} (100%)
diff --git a/scripts/get-wraps-from-cargo-registry.py b/scripts/update-cargo-wraps.py
similarity index 100%
rename from scripts/get-wraps-from-cargo-registry.py
rename to scripts/update-cargo-wraps.py
--
2.55.0
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH 8/9] scripts: rename get-wraps-from-cargo-registry.py
2026-08-21 8:39 ` [PATCH 8/9] scripts: rename get-wraps-from-cargo-registry.py Paolo Bonzini
@ 2026-08-26 9:11 ` Zhao Liu
0 siblings, 0 replies; 12+ messages in thread
From: Zhao Liu @ 2026-08-26 9:11 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: qemu-devel, qemu-rust
On Fri, Aug 21, 2026 at 10:39:23AM +0200, Paolo Bonzini wrote:
> Date: Fri, 21 Aug 2026 10:39:23 +0200
> From: Paolo Bonzini <pbonzini@redhat.com>
> Subject: [PATCH 8/9] scripts: rename get-wraps-from-cargo-registry.py
> X-Mailer: git-send-email 2.55.0
>
> It does more than that now.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
> .../{get-wraps-from-cargo-registry.py => update-cargo-wraps.py} | 0
> 1 file changed, 0 insertions(+), 0 deletions(-)
> rename scripts/{get-wraps-from-cargo-registry.py => update-cargo-wraps.py} (100%)
Just a nit, these places were missed ;).
$ grep -nr get-wraps-from-cargo-registry.py
MAINTAINERS:3780:F: scripts/get-wraps-from-cargo-registry.py
scripts/update-cargo-wraps.py:6:get-wraps-from-cargo-registry.py - Update Meson subprojects from a Cargo
docs/about/build-platforms.rst:131: script, ``scripts/get-wraps-from-cargo-registry.py``, that automatically
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 9/9] rust: update crates
2026-08-21 8:39 [PATCH 0/9] scripts: introduce script to update cargo .wrap files Paolo Bonzini
` (7 preceding siblings ...)
2026-08-21 8:39 ` [PATCH 8/9] scripts: rename get-wraps-from-cargo-registry.py Paolo Bonzini
@ 2026-08-21 8:39 ` Paolo Bonzini
2026-08-24 7:17 ` [PATCH 0/9] scripts: introduce script to update cargo .wrap files Marc-André Lureau
9 siblings, 0 replies; 12+ messages in thread
From: Paolo Bonzini @ 2026-08-21 8:39 UTC (permalink / raw)
To: qemu-devel; +Cc: qemu-rust
Until a new version of bitfield-struct is released,
skip the ones that introduce a new dependency on syn 3.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
Cargo.lock | 48 +++++++++----------
Cargo.toml | 2 +-
subprojects/attrs-0.2-rs.wrap | 9 ++--
subprojects/foreign-0.3-rs.wrap | 9 ++--
...sys-0.21-rs.wrap => glib-sys-0.22-rs.wrap} | 9 ++--
subprojects/libc-0.2-rs.wrap | 10 ++--
.../libc-0.2-rs/meson/meson.build | 20 ++------
subprojects/quote-1-rs.wrap | 10 ++--
subprojects/unicode-ident-1-rs.wrap | 10 ++--
9 files changed, 56 insertions(+), 71 deletions(-)
rename subprojects/{glib-sys-0.21-rs.wrap => glib-sys-0.22-rs.wrap} (13%)
diff --git a/Cargo.lock b/Cargo.lock
index ad664a812d2..acf5516c5c4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -10,9 +10,9 @@ checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
[[package]]
name = "attrs"
-version = "0.2.9"
+version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a207d40f43de65285f3de0509bb6cb16bc46098864fce957122bbacce327e5f"
+checksum = "60e397c905850173fdc02285fe7f94f1b0c3ff55ff6e103efbe98074d80601c4"
dependencies = [
"proc-macro2",
"syn",
@@ -46,9 +46,9 @@ dependencies = [
[[package]]
name = "cfg-expr"
-version = "0.20.3"
+version = "0.20.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a2c5f3bf25ec225351aa1c8e230d04d880d3bd89dea133537dafad4ae291e5c"
+checksum = "fb693542bcafa528e198be0ebd9d3632ca5b7c93dbe7237460e199910835997c"
dependencies = [
"smallvec",
"target-lexicon",
@@ -93,18 +93,18 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "foreign"
-version = "0.3.1"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17ca1b5be8c9d320daf386f1809c7acc0cb09accbae795c2001953fa50585846"
+checksum = "bec05eb9c07a3f66653535e5e50eb5eb935eb00d3bb7e06ea26a9d3a1d016182"
dependencies = [
"libc",
]
[[package]]
name = "glib-sys"
-version = "0.21.2"
+version = "0.22.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d09d3d0fddf7239521674e57b0465dfbd844632fec54f059f7f56112e3f927e1"
+checksum = "030967459f9f676851872c6304adea7825c6d462ec9b72554c733cf0c5952233"
dependencies = [
"libc",
"system-deps",
@@ -175,9 +175,9 @@ dependencies = [
[[package]]
name = "libc"
-version = "0.2.162"
+version = "0.2.189"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398"
+checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
[[package]]
name = "migration"
@@ -202,9 +202,9 @@ dependencies = [
[[package]]
name = "pkg-config"
-version = "0.3.32"
+version = "0.3.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
+checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548"
[[package]]
name = "pl011"
@@ -272,9 +272,9 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.36"
+version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
dependencies = [
"proc-macro2",
]
@@ -366,9 +366,9 @@ dependencies = [
[[package]]
name = "target-lexicon"
-version = "0.13.2"
+version = "0.13.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e502f78cdbb8ba4718f566c418c52bc729126ffd16baee5baa718cf25dd5a69a"
+checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
[[package]]
name = "tests"
@@ -386,9 +386,9 @@ dependencies = [
[[package]]
name = "toml"
-version = "1.1.3+spec-1.1.0"
+version = "1.1.4+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53c96ecdfa941c8fc4fcaed14f99ada8ebed502eef533015095a07e3301d4c3c"
+checksum = "3aace63f4bbcdfc2c965b059de67119c89c4017a70d633be6c104910f67056f5"
dependencies = [
"indexmap",
"serde_core",
@@ -410,9 +410,9 @@ dependencies = [
[[package]]
name = "toml_parser"
-version = "1.1.2+spec-1.1.0"
+version = "1.1.3+spec-1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526"
+checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56"
dependencies = [
"winnow",
]
@@ -433,9 +433,9 @@ dependencies = [
[[package]]
name = "unicode-ident"
-version = "1.0.12"
+version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]]
name = "util"
@@ -458,9 +458,9 @@ dependencies = [
[[package]]
name = "version-compare"
-version = "0.2.0"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
+checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e"
[[package]]
name = "winnow"
diff --git a/Cargo.toml b/Cargo.toml
index b35704faabe..693dccb73c2 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -19,7 +19,7 @@ authors = ["The QEMU Project Developers <qemu-devel@nongnu.org>"]
anyhow = "~1.0"
foreign = "~0.3.1"
libc = "0.2.162"
-glib-sys = { version = "0.21.2", features = ["v2_66"] }
+glib-sys = { version = "0.22.8", features = ["v2_66"] }
[workspace.lints.rust]
unexpected_cfgs = { level = "deny", check-cfg = ['cfg(MESON)'] }
diff --git a/subprojects/attrs-0.2-rs.wrap b/subprojects/attrs-0.2-rs.wrap
index fef89ea9368..fdab9646207 100644
--- a/subprojects/attrs-0.2-rs.wrap
+++ b/subprojects/attrs-0.2-rs.wrap
@@ -1,6 +1,7 @@
[wrap-file]
-directory = attrs-0.2.9
-source_url = https://crates.io/api/v1/crates/attrs/0.2.9/download
-source_filename = attrs-0.2.9.tar.gz
-source_hash = 2a207d40f43de65285f3de0509bb6cb16bc46098864fce957122bbacce327e5f
+directory = attrs-0.2.10
+source_url = https://crates.io/api/v1/crates/attrs/0.2.10/download
+source_filename = attrs-0.2.10.tar.gz
+source_hash = 60e397c905850173fdc02285fe7f94f1b0c3ff55ff6e103efbe98074d80601c4
method = cargo
+
diff --git a/subprojects/foreign-0.3-rs.wrap b/subprojects/foreign-0.3-rs.wrap
index 95d450397ee..3d49f5a85f4 100644
--- a/subprojects/foreign-0.3-rs.wrap
+++ b/subprojects/foreign-0.3-rs.wrap
@@ -1,6 +1,7 @@
[wrap-file]
-directory = foreign-0.3.1
-source_url = https://crates.io/api/v1/crates/foreign/0.3.1/download
-source_filename = foreign-0.3.1.tar.gz
-source_hash = 17ca1b5be8c9d320daf386f1809c7acc0cb09accbae795c2001953fa50585846
+directory = foreign-0.3.2
+source_url = https://crates.io/api/v1/crates/foreign/0.3.2/download
+source_filename = foreign-0.3.2.tar.gz
+source_hash = bec05eb9c07a3f66653535e5e50eb5eb935eb00d3bb7e06ea26a9d3a1d016182
method = cargo
+
diff --git a/subprojects/glib-sys-0.21-rs.wrap b/subprojects/glib-sys-0.22-rs.wrap
similarity index 13%
rename from subprojects/glib-sys-0.21-rs.wrap
rename to subprojects/glib-sys-0.22-rs.wrap
index ea4d5f66a58..8177da567d3 100644
--- a/subprojects/glib-sys-0.21-rs.wrap
+++ b/subprojects/glib-sys-0.22-rs.wrap
@@ -1,6 +1,7 @@
[wrap-file]
-directory = glib-sys-0.21.2
-source_url = https://crates.io/api/v1/crates/glib-sys/0.21.2/download
-source_filename = glib-sys-0.21.2.tar.gz
-source_hash = d09d3d0fddf7239521674e57b0465dfbd844632fec54f059f7f56112e3f927e1
+directory = glib-sys-0.22.8
+source_url = https://crates.io/api/v1/crates/glib-sys/0.22.8/download
+source_filename = glib-sys-0.22.8.tar.gz
+source_hash = 030967459f9f676851872c6304adea7825c6d462ec9b72554c733cf0c5952233
method = cargo
+
diff --git a/subprojects/libc-0.2-rs.wrap b/subprojects/libc-0.2-rs.wrap
index 6e225579795..2bdb7c1750b 100644
--- a/subprojects/libc-0.2-rs.wrap
+++ b/subprojects/libc-0.2-rs.wrap
@@ -1,10 +1,8 @@
[wrap-file]
-directory = libc-0.2.162
-source_url = https://crates.io/api/v1/crates/libc/0.2.162/download
-source_filename = libc-0.2.162.tar.gz
-source_hash = 18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398
+directory = libc-0.2.189
+source_url = https://crates.io/api/v1/crates/libc/0.2.189/download
+source_filename = libc-0.2.189.tar.gz
+source_hash = 3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2
method = cargo
patch_directory = libc-0.2-rs
-# bump this version number on every change to meson.build or the patches:
-# v1
diff --git a/subprojects/packagefiles/libc-0.2-rs/meson/meson.build b/subprojects/packagefiles/libc-0.2-rs/meson/meson.build
index db9480ada1c..ba770a697f8 100644
--- a/subprojects/packagefiles/libc-0.2-rs/meson/meson.build
+++ b/subprojects/packagefiles/libc-0.2-rs/meson/meson.build
@@ -1,16 +1,4 @@
-extra_args += [
- '--cfg', 'freebsd11',
- '--cfg', 'libc_priv_mod_use',
- '--cfg', 'libc_union',
- '--cfg', 'libc_const_size_of',
- '--cfg', 'libc_align',
- '--cfg', 'libc_int128',
- '--cfg', 'libc_core_cvoid',
- '--cfg', 'libc_packedN',
- '--cfg', 'libc_cfg_target_vendor',
- '--cfg', 'libc_non_exhaustive',
- '--cfg', 'libc_long_array',
- '--cfg', 'libc_ptr_addr_of',
- '--cfg', 'libc_underscore_const_names',
- '--cfg', 'libc_const_extern_fn',
-]
+extra_args += ['--cfg', 'freebsd12']
+
+# TODO: linux_time_bits64, file_offset_bits64, gnu_time_bits64 are still unstable for glibc
+# as of libc 0.2.189
diff --git a/subprojects/quote-1-rs.wrap b/subprojects/quote-1-rs.wrap
index 5f38f56499e..c6360ceab43 100644
--- a/subprojects/quote-1-rs.wrap
+++ b/subprojects/quote-1-rs.wrap
@@ -1,9 +1,7 @@
[wrap-file]
-directory = quote-1.0.36
-source_url = https://crates.io/api/v1/crates/quote/1.0.36/download
-source_filename = quote-1.0.36.0.tar.gz
-source_hash = 0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7
+directory = quote-1.0.47
+source_url = https://crates.io/api/v1/crates/quote/1.0.47/download
+source_filename = quote-1.0.47.tar.gz
+source_hash = 1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001
method = cargo
-# bump this version number on every change to meson.build or the patches:
-# v2
diff --git a/subprojects/unicode-ident-1-rs.wrap b/subprojects/unicode-ident-1-rs.wrap
index 90aae02ba0a..2563f101d40 100644
--- a/subprojects/unicode-ident-1-rs.wrap
+++ b/subprojects/unicode-ident-1-rs.wrap
@@ -1,9 +1,7 @@
[wrap-file]
-directory = unicode-ident-1.0.12
-source_url = https://crates.io/api/v1/crates/unicode-ident/1.0.12/download
-source_filename = unicode-ident-1.0.12.tar.gz
-source_hash = 3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b
+directory = unicode-ident-1.0.24
+source_url = https://crates.io/api/v1/crates/unicode-ident/1.0.24/download
+source_filename = unicode-ident-1.0.24.tar.gz
+source_hash = e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75
method = cargo
-# bump this version number on every change to meson.build or the patches:
-# v2
--
2.55.0
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH 0/9] scripts: introduce script to update cargo .wrap files
2026-08-21 8:39 [PATCH 0/9] scripts: introduce script to update cargo .wrap files Paolo Bonzini
` (8 preceding siblings ...)
2026-08-21 8:39 ` [PATCH 9/9] rust: update crates Paolo Bonzini
@ 2026-08-24 7:17 ` Marc-André Lureau
9 siblings, 0 replies; 12+ messages in thread
From: Marc-André Lureau @ 2026-08-24 7:17 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: qemu-devel, qemu-rust
Hi
On Fri, Aug 21, 2026 at 12:40 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> Another small piece of the usability puzzle for Rust, this time
> tackling dependency updates.
>
> Extend the existing scripts/get-wraps-from-cargo-registry.py so
> that it is also able to use the versions in Cargo.lock. This
> makes it much easier to update .wrap files after running
> "cargo update", though manual work is (intentionally) still
> needed when the semver of a crate changes.
>
> It's possible that this functionality will be moved to Meson either
> wholly or in part. As usual, introduce the prototype in QEMU so that
> it's clear what is needed.
>
Series lgtm, but I wasn't able to apply on master (patchew neither)
thanks
> Paolo
>
>
> Paolo Bonzini (9):
> scripts: print build.rs diff
> scripts: rename variable in scripts/get-wraps-from-cargo-registry.py
> scripts: do not assume the new version of the crate is present
> scripts: prepare for introduction of CrateSource class
> scripts: introduce CrateSource abstract class
> scripts: add functionality to update wrap files from Cargo.lock
> scripts: add the possibility of a quick update of the pacakge
> scripts: rename get-wraps-from-cargo-registry.py
> rust: update crates
>
> Cargo.lock | 48 ++---
> Cargo.toml | 2 +-
> ...argo-registry.py => update-cargo-wraps.py} | 198 +++++++++++++-----
> subprojects/attrs-0.2-rs.wrap | 9 +-
> subprojects/foreign-0.3-rs.wrap | 9 +-
> ...sys-0.21-rs.wrap => glib-sys-0.22-rs.wrap} | 9 +-
> subprojects/libc-0.2-rs.wrap | 10 +-
> .../libc-0.2-rs/meson/meson.build | 20 +-
> subprojects/quote-1-rs.wrap | 10 +-
> subprojects/unicode-ident-1-rs.wrap | 10 +-
> 10 files changed, 207 insertions(+), 118 deletions(-)
> rename scripts/{get-wraps-from-cargo-registry.py => update-cargo-wraps.py} (38%)
> rename subprojects/{glib-sys-0.21-rs.wrap => glib-sys-0.22-rs.wrap} (13%)
>
> --
> 2.55.0
>
>
--
Marc-André Lureau
^ permalink raw reply [flat|nested] 12+ messages in thread