public inbox for qemu-devel@nongnu.org
 help / color / mirror / Atom feed
* [PATCH] rust: suggest passing --locked to "cargo install"
@ 2026-03-18  8:21 Paolo Bonzini
  2026-03-18  8:51 ` Manos Pitsidianakis
  2026-03-18  8:54 ` Daniel P. Berrangé
  0 siblings, 2 replies; 8+ messages in thread
From: Paolo Bonzini @ 2026-03-18  8:21 UTC (permalink / raw)
  To: qemu-devel; +Cc: Daniel P. Berrangé, Peter Maydell

Without the option, cargo will try using the latest version of the
dependencies of bindgen-cli. While it will obviously respect the
constraints in Cargo.toml, old versions of Cargo do not have
version-constrained resolution and will choke on dependencies
that need Rust 2024.

Cc: Daniel P. Berrangé <berrange@redhat.com>
Cc: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 docs/about/build-platforms.rst                      | 2 +-
 meson.build                                         | 2 +-
 tests/docker/dockerfiles/fedora-rust-nightly.docker | 2 +-
 tests/docker/dockerfiles/ubuntu2204.docker          | 2 +-
 tests/lcitool/refresh                               | 4 ++--
 5 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/docs/about/build-platforms.rst b/docs/about/build-platforms.rst
index 6e3088d524a..3d23dfbd779 100644
--- a/docs/about/build-platforms.rst
+++ b/docs/about/build-platforms.rst
@@ -114,7 +114,7 @@ Rust build dependencies
   bindgen tool, which is too big to package and distribute.  The minimum
   supported version of bindgen is 0.60.x.  For distributions that do not
   include bindgen or have an older version, it is recommended to install
-  a newer version using ``cargo install bindgen-cli``.
+  a newer version using ``cargo install --locked bindgen-cli``.
 
   QEMU requires Rust 1.83.0.  This is available on all supported platforms
   except for the ``mips64el`` architecture on Debian bookworm.  For all other
diff --git a/meson.build b/meson.build
index d016482db1b..62fab727f4e 100644
--- a/meson.build
+++ b/meson.build
@@ -114,7 +114,7 @@ if have_rust
   bindgen = find_program('bindgen', required: get_option('rust'))
   if not bindgen.found() or bindgen.version().version_compare('<0.60.0')
     if get_option('rust').enabled()
-      error('bindgen version ' + bindgen.version() + ' is unsupported. You can install a new version with "cargo install bindgen-cli"')
+      error('bindgen version ' + bindgen.version() + ' is unsupported. You can install a new version with "cargo install --locked bindgen-cli"')
     else
       if bindgen.found()
         warning('bindgen version ' + bindgen.version() + ' is unsupported, disabling Rust compilation.')
diff --git a/tests/docker/dockerfiles/fedora-rust-nightly.docker b/tests/docker/dockerfiles/fedora-rust-nightly.docker
index 043b42a0a9b..38381ef8f59 100644
--- a/tests/docker/dockerfiles/fedora-rust-nightly.docker
+++ b/tests/docker/dockerfiles/fedora-rust-nightly.docker
@@ -179,7 +179,7 @@ RUN set -eux && \
   test "$RUSTDOC" = "$(/usr/local/cargo/bin/rustup +nightly which rustdoc)" && \
   test "$RUSTC" = "$(/usr/local/cargo/bin/rustup +nightly which rustc)"
 ENV PATH=$CARGO_HOME/bin:$PATH
-RUN /usr/local/cargo/bin/rustup run nightly cargo install bindgen-cli
+RUN /usr/local/cargo/bin/rustup run nightly cargo install --locked bindgen-cli
 RUN $CARGO --list
 # As a final step configure the user (if env is defined)
 ARG USER
diff --git a/tests/docker/dockerfiles/ubuntu2204.docker b/tests/docker/dockerfiles/ubuntu2204.docker
index 23b33d6ad44..44e763f571a 100644
--- a/tests/docker/dockerfiles/ubuntu2204.docker
+++ b/tests/docker/dockerfiles/ubuntu2204.docker
@@ -162,7 +162,7 @@ ENV CARGO_HOME=/usr/local/cargo
 ENV PATH=$CARGO_HOME/bin:$PATH
 RUN DEBIAN_FRONTEND=noninteractive eatmydata \
   apt install -y --no-install-recommends cargo
-RUN cargo install bindgen-cli
+RUN cargo install --locked bindgen-cli
 # As a final step configure the user (if env is defined)
 ARG USER
 ARG UID
diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh
index 259e6ea0729..79a280feab4 100755
--- a/tests/lcitool/refresh
+++ b/tests/lcitool/refresh
@@ -147,7 +147,7 @@ fedora_rustup_nightly_extras = [
     '  test "$RUSTDOC" = "$(/usr/local/cargo/bin/rustup +nightly which rustdoc)" && \\\n',
     '  test "$RUSTC" = "$(/usr/local/cargo/bin/rustup +nightly which rustc)"\n',
     'ENV PATH=$CARGO_HOME/bin:$PATH\n',
-    'RUN /usr/local/cargo/bin/rustup run nightly cargo install bindgen-cli\n',
+    'RUN /usr/local/cargo/bin/rustup run nightly cargo install --locked bindgen-cli\n',
     'RUN $CARGO --list\n',
 ]
 
@@ -158,7 +158,7 @@ ubuntu2204_rust_extras = [
     'ENV PATH=$CARGO_HOME/bin:$PATH\n',
     "RUN DEBIAN_FRONTEND=noninteractive eatmydata \\\n",
     "  apt install -y --no-install-recommends cargo\n",
-    'RUN cargo install bindgen-cli\n',
+    'RUN cargo install --locked bindgen-cli\n',
 ]
 
 debian_all_test_cross_compilers = [
-- 
2.53.0



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] rust: suggest passing --locked to "cargo install"
  2026-03-18  8:21 [PATCH] rust: suggest passing --locked to "cargo install" Paolo Bonzini
@ 2026-03-18  8:51 ` Manos Pitsidianakis
  2026-03-18  9:28   ` Paolo Bonzini
  2026-03-18  8:54 ` Daniel P. Berrangé
  1 sibling, 1 reply; 8+ messages in thread
From: Manos Pitsidianakis @ 2026-03-18  8:51 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, Daniel P. Berrangé, Peter Maydell

On Wed, Mar 18, 2026 at 10:21 AM Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> Without the option, cargo will try using the latest version of the
> dependencies of bindgen-cli. While it will obviously respect the
> constraints in Cargo.toml, old versions of Cargo do not have
> version-constrained resolution and will choke on dependencies
> that need Rust 2024.
>
> Cc: Daniel P. Berrangé <berrange@redhat.com>
> Cc: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  docs/about/build-platforms.rst                      | 2 +-
>  meson.build                                         | 2 +-
>  tests/docker/dockerfiles/fedora-rust-nightly.docker | 2 +-
>  tests/docker/dockerfiles/ubuntu2204.docker          | 2 +-
>  tests/lcitool/refresh                               | 4 ++--
>  5 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/docs/about/build-platforms.rst b/docs/about/build-platforms.rst
> index 6e3088d524a..3d23dfbd779 100644
> --- a/docs/about/build-platforms.rst
> +++ b/docs/about/build-platforms.rst
> @@ -114,7 +114,7 @@ Rust build dependencies
>    bindgen tool, which is too big to package and distribute.  The minimum
>    supported version of bindgen is 0.60.x.  For distributions that do not
>    include bindgen or have an older version, it is recommended to install
> -  a newer version using ``cargo install bindgen-cli``.
> +  a newer version using ``cargo install --locked bindgen-cli``.
>
>    QEMU requires Rust 1.83.0.  This is available on all supported platforms
>    except for the ``mips64el`` architecture on Debian bookworm.  For all other
> diff --git a/meson.build b/meson.build
> index d016482db1b..62fab727f4e 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -114,7 +114,7 @@ if have_rust
>    bindgen = find_program('bindgen', required: get_option('rust'))
>    if not bindgen.found() or bindgen.version().version_compare('<0.60.0')
>      if get_option('rust').enabled()
> -      error('bindgen version ' + bindgen.version() + ' is unsupported. You can install a new version with "cargo install bindgen-cli"')
> +      error('bindgen version ' + bindgen.version() + ' is unsupported. You can install a new version with "cargo install --locked bindgen-cli"')

Am I missing something or is bindgen not in Cargo.lock? Also doesn't
this depend on `cargo-install` being invoked in the same path as
Cargo.lock, i.e. `rust/` subdir? (Not sure about this)

I'd do `cargo install --version 0.60.0 bindgen-cli` instead


>      else
>        if bindgen.found()
>          warning('bindgen version ' + bindgen.version() + ' is unsupported, disabling Rust compilation.')
> diff --git a/tests/docker/dockerfiles/fedora-rust-nightly.docker b/tests/docker/dockerfiles/fedora-rust-nightly.docker
> index 043b42a0a9b..38381ef8f59 100644
> --- a/tests/docker/dockerfiles/fedora-rust-nightly.docker
> +++ b/tests/docker/dockerfiles/fedora-rust-nightly.docker
> @@ -179,7 +179,7 @@ RUN set -eux && \
>    test "$RUSTDOC" = "$(/usr/local/cargo/bin/rustup +nightly which rustdoc)" && \
>    test "$RUSTC" = "$(/usr/local/cargo/bin/rustup +nightly which rustc)"
>  ENV PATH=$CARGO_HOME/bin:$PATH
> -RUN /usr/local/cargo/bin/rustup run nightly cargo install bindgen-cli
> +RUN /usr/local/cargo/bin/rustup run nightly cargo install --locked bindgen-cli
>  RUN $CARGO --list
>  # As a final step configure the user (if env is defined)
>  ARG USER
> diff --git a/tests/docker/dockerfiles/ubuntu2204.docker b/tests/docker/dockerfiles/ubuntu2204.docker
> index 23b33d6ad44..44e763f571a 100644
> --- a/tests/docker/dockerfiles/ubuntu2204.docker
> +++ b/tests/docker/dockerfiles/ubuntu2204.docker
> @@ -162,7 +162,7 @@ ENV CARGO_HOME=/usr/local/cargo
>  ENV PATH=$CARGO_HOME/bin:$PATH
>  RUN DEBIAN_FRONTEND=noninteractive eatmydata \
>    apt install -y --no-install-recommends cargo
> -RUN cargo install bindgen-cli
> +RUN cargo install --locked bindgen-cli
>  # As a final step configure the user (if env is defined)
>  ARG USER
>  ARG UID
> diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh
> index 259e6ea0729..79a280feab4 100755
> --- a/tests/lcitool/refresh
> +++ b/tests/lcitool/refresh
> @@ -147,7 +147,7 @@ fedora_rustup_nightly_extras = [
>      '  test "$RUSTDOC" = "$(/usr/local/cargo/bin/rustup +nightly which rustdoc)" && \\\n',
>      '  test "$RUSTC" = "$(/usr/local/cargo/bin/rustup +nightly which rustc)"\n',
>      'ENV PATH=$CARGO_HOME/bin:$PATH\n',
> -    'RUN /usr/local/cargo/bin/rustup run nightly cargo install bindgen-cli\n',
> +    'RUN /usr/local/cargo/bin/rustup run nightly cargo install --locked bindgen-cli\n',
>      'RUN $CARGO --list\n',
>  ]
>
> @@ -158,7 +158,7 @@ ubuntu2204_rust_extras = [
>      'ENV PATH=$CARGO_HOME/bin:$PATH\n',
>      "RUN DEBIAN_FRONTEND=noninteractive eatmydata \\\n",
>      "  apt install -y --no-install-recommends cargo\n",
> -    'RUN cargo install bindgen-cli\n',
> +    'RUN cargo install --locked bindgen-cli\n',
>  ]
>
>  debian_all_test_cross_compilers = [
> --
> 2.53.0
>
>

-- 
Manos Pitsidianakis
Emulation and Virtualization Engineer at Linaro Ltd


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] rust: suggest passing --locked to "cargo install"
  2026-03-18  8:21 [PATCH] rust: suggest passing --locked to "cargo install" Paolo Bonzini
  2026-03-18  8:51 ` Manos Pitsidianakis
@ 2026-03-18  8:54 ` Daniel P. Berrangé
  1 sibling, 0 replies; 8+ messages in thread
From: Daniel P. Berrangé @ 2026-03-18  8:54 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, Peter Maydell

On Wed, Mar 18, 2026 at 09:21:13AM +0100, Paolo Bonzini wrote:
> Without the option, cargo will try using the latest version of the
> dependencies of bindgen-cli. While it will obviously respect the
> constraints in Cargo.toml, old versions of Cargo do not have
> version-constrained resolution and will choke on dependencies
> that need Rust 2024.

Ah ha, the  "--do-what-I-thought-should-be-the-default"
option :-)

> 
> Cc: Daniel P. Berrangé <berrange@redhat.com>
> Cc: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  docs/about/build-platforms.rst                      | 2 +-
>  meson.build                                         | 2 +-
>  tests/docker/dockerfiles/fedora-rust-nightly.docker | 2 +-
>  tests/docker/dockerfiles/ubuntu2204.docker          | 2 +-
>  tests/lcitool/refresh                               | 4 ++--
>  5 files changed, 6 insertions(+), 6 deletions(-)

Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>


> 
> diff --git a/docs/about/build-platforms.rst b/docs/about/build-platforms.rst
> index 6e3088d524a..3d23dfbd779 100644
> --- a/docs/about/build-platforms.rst
> +++ b/docs/about/build-platforms.rst
> @@ -114,7 +114,7 @@ Rust build dependencies
>    bindgen tool, which is too big to package and distribute.  The minimum
>    supported version of bindgen is 0.60.x.  For distributions that do not
>    include bindgen or have an older version, it is recommended to install
> -  a newer version using ``cargo install bindgen-cli``.
> +  a newer version using ``cargo install --locked bindgen-cli``.
>  
>    QEMU requires Rust 1.83.0.  This is available on all supported platforms
>    except for the ``mips64el`` architecture on Debian bookworm.  For all other
> diff --git a/meson.build b/meson.build
> index d016482db1b..62fab727f4e 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -114,7 +114,7 @@ if have_rust
>    bindgen = find_program('bindgen', required: get_option('rust'))
>    if not bindgen.found() or bindgen.version().version_compare('<0.60.0')
>      if get_option('rust').enabled()
> -      error('bindgen version ' + bindgen.version() + ' is unsupported. You can install a new version with "cargo install bindgen-cli"')
> +      error('bindgen version ' + bindgen.version() + ' is unsupported. You can install a new version with "cargo install --locked bindgen-cli"')
>      else
>        if bindgen.found()
>          warning('bindgen version ' + bindgen.version() + ' is unsupported, disabling Rust compilation.')
> diff --git a/tests/docker/dockerfiles/fedora-rust-nightly.docker b/tests/docker/dockerfiles/fedora-rust-nightly.docker
> index 043b42a0a9b..38381ef8f59 100644
> --- a/tests/docker/dockerfiles/fedora-rust-nightly.docker
> +++ b/tests/docker/dockerfiles/fedora-rust-nightly.docker
> @@ -179,7 +179,7 @@ RUN set -eux && \
>    test "$RUSTDOC" = "$(/usr/local/cargo/bin/rustup +nightly which rustdoc)" && \
>    test "$RUSTC" = "$(/usr/local/cargo/bin/rustup +nightly which rustc)"
>  ENV PATH=$CARGO_HOME/bin:$PATH
> -RUN /usr/local/cargo/bin/rustup run nightly cargo install bindgen-cli
> +RUN /usr/local/cargo/bin/rustup run nightly cargo install --locked bindgen-cli
>  RUN $CARGO --list
>  # As a final step configure the user (if env is defined)
>  ARG USER
> diff --git a/tests/docker/dockerfiles/ubuntu2204.docker b/tests/docker/dockerfiles/ubuntu2204.docker
> index 23b33d6ad44..44e763f571a 100644
> --- a/tests/docker/dockerfiles/ubuntu2204.docker
> +++ b/tests/docker/dockerfiles/ubuntu2204.docker
> @@ -162,7 +162,7 @@ ENV CARGO_HOME=/usr/local/cargo
>  ENV PATH=$CARGO_HOME/bin:$PATH
>  RUN DEBIAN_FRONTEND=noninteractive eatmydata \
>    apt install -y --no-install-recommends cargo
> -RUN cargo install bindgen-cli
> +RUN cargo install --locked bindgen-cli
>  # As a final step configure the user (if env is defined)
>  ARG USER
>  ARG UID
> diff --git a/tests/lcitool/refresh b/tests/lcitool/refresh
> index 259e6ea0729..79a280feab4 100755
> --- a/tests/lcitool/refresh
> +++ b/tests/lcitool/refresh
> @@ -147,7 +147,7 @@ fedora_rustup_nightly_extras = [
>      '  test "$RUSTDOC" = "$(/usr/local/cargo/bin/rustup +nightly which rustdoc)" && \\\n',
>      '  test "$RUSTC" = "$(/usr/local/cargo/bin/rustup +nightly which rustc)"\n',
>      'ENV PATH=$CARGO_HOME/bin:$PATH\n',
> -    'RUN /usr/local/cargo/bin/rustup run nightly cargo install bindgen-cli\n',
> +    'RUN /usr/local/cargo/bin/rustup run nightly cargo install --locked bindgen-cli\n',
>      'RUN $CARGO --list\n',
>  ]
>  
> @@ -158,7 +158,7 @@ ubuntu2204_rust_extras = [
>      'ENV PATH=$CARGO_HOME/bin:$PATH\n',
>      "RUN DEBIAN_FRONTEND=noninteractive eatmydata \\\n",
>      "  apt install -y --no-install-recommends cargo\n",
> -    'RUN cargo install bindgen-cli\n',
> +    'RUN cargo install --locked bindgen-cli\n',
>  ]
>  
>  debian_all_test_cross_compilers = [
> -- 
> 2.53.0
> 

With regards,
Daniel
-- 
|: https://berrange.com       ~~        https://hachyderm.io/@berrange :|
|: https://libvirt.org          ~~          https://entangle-photo.org :|
|: https://pixelfed.art/berrange   ~~    https://fstop138.berrange.com :|



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] rust: suggest passing --locked to "cargo install"
  2026-03-18  8:51 ` Manos Pitsidianakis
@ 2026-03-18  9:28   ` Paolo Bonzini
  2026-03-18  9:32     ` Manos Pitsidianakis
  0 siblings, 1 reply; 8+ messages in thread
From: Paolo Bonzini @ 2026-03-18  9:28 UTC (permalink / raw)
  To: Manos Pitsidianakis; +Cc: qemu-devel, Daniel P. Berrangé, Peter Maydell

On 3/18/26 09:51, Manos Pitsidianakis wrote:
>> +      error('bindgen version ' + bindgen.version() + ' is unsupported. You can install a new version with "cargo install --locked bindgen-cli"')
> 
> Am I missing something or is bindgen not in Cargo.lock? Also doesn't
> this depend on `cargo-install` being invoked in the same path as
> Cargo.lock, i.e. `rust/` subdir? (Not sure about this)

Because the bindgen step is done in Meson it uses a bindgen binary that 
is preinstalled in $PATH; it doesn't build bindgen-cli the way you'd see 
it happen when done with build.rs(*).  Usually it can use the distro 
package, but as you can see from the tests/lcitool/ part of the patch 
it's too old for Ubuntu 22.04.

The "cargo install bindgen-cli" command does not use QEMU's Cargo.lock, 
it downloads bindgen-cli as a standalone package from crates.io and 
builds it.  It works even if invoked from `rust/`, that is QEMU's 
Cargo.lock does not interact with "cargo install".

	(*) which I hate.  It's 67 crates and takes 5 minutes of CPU
	    time (1 minute wallclock).  Why did no one write a
	    simplified implementation of the same bindgen::Builder
	    struct, that calls out to a preinstalled bindgen binary?
	    But I digress.


> I'd do `cargo install --version 0.60.0 bindgen-cli` instead

Picking a specific version of bindgen-cli can be a good idea for the 
Ubuntu 22.04 container, but it does not fix the problem with the lack of 
--locked.  The breakage happened due to a new release of clap_lex, not 
bindgen.

Paolo



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] rust: suggest passing --locked to "cargo install"
  2026-03-18  9:28   ` Paolo Bonzini
@ 2026-03-18  9:32     ` Manos Pitsidianakis
  2026-03-18  9:43       ` Daniel P. Berrangé
  0 siblings, 1 reply; 8+ messages in thread
From: Manos Pitsidianakis @ 2026-03-18  9:32 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel, Daniel P. Berrangé, Peter Maydell

Hi Paolo,

On Wed, Mar 18, 2026 at 11:28 AM Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> On 3/18/26 09:51, Manos Pitsidianakis wrote:
> >> +      error('bindgen version ' + bindgen.version() + ' is unsupported. You can install a new version with "cargo install --locked bindgen-cli"')
> >
> > Am I missing something or is bindgen not in Cargo.lock? Also doesn't
> > this depend on `cargo-install` being invoked in the same path as
> > Cargo.lock, i.e. `rust/` subdir? (Not sure about this)
>
> Because the bindgen step is done in Meson it uses a bindgen binary that
> is preinstalled in $PATH; it doesn't build bindgen-cli the way you'd see
> it happen when done with build.rs(*).  Usually it can use the distro
> package, but as you can see from the tests/lcitool/ part of the patch
> it's too old for Ubuntu 22.04.
>
> The "cargo install bindgen-cli" command does not use QEMU's Cargo.lock,

So what does `--locked` do here? As per `--help`: "--locked Assert
that `Cargo.lock` will remain unchanged" What Cargo.lock does it not
change?

> it downloads bindgen-cli as a standalone package from crates.io and
> builds it.  It works even if invoked from `rust/`, that is QEMU's
> Cargo.lock does not interact with "cargo install".
>
>         (*) which I hate.  It's 67 crates and takes 5 minutes of CPU
>             time (1 minute wallclock).  Why did no one write a
>             simplified implementation of the same bindgen::Builder
>             struct, that calls out to a preinstalled bindgen binary?
>             But I digress.
>
>
> > I'd do `cargo install --version 0.60.0 bindgen-cli` instead
>
> Picking a specific version of bindgen-cli can be a good idea for the
> Ubuntu 22.04 container, but it does not fix the problem with the lack of
> --locked.  The breakage happened due to a new release of clap_lex, not
> bindgen.
>
> Paolo
>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] rust: suggest passing --locked to "cargo install"
  2026-03-18  9:32     ` Manos Pitsidianakis
@ 2026-03-18  9:43       ` Daniel P. Berrangé
  2026-03-18 12:27         ` Paolo Bonzini
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel P. Berrangé @ 2026-03-18  9:43 UTC (permalink / raw)
  To: Manos Pitsidianakis; +Cc: Paolo Bonzini, qemu-devel, Peter Maydell

On Wed, Mar 18, 2026 at 11:32:59AM +0200, Manos Pitsidianakis wrote:
> Hi Paolo,
> 
> On Wed, Mar 18, 2026 at 11:28 AM Paolo Bonzini <pbonzini@redhat.com> wrote:
> >
> > On 3/18/26 09:51, Manos Pitsidianakis wrote:
> > >> +      error('bindgen version ' + bindgen.version() + ' is unsupported. You can install a new version with "cargo install --locked bindgen-cli"')
> > >
> > > Am I missing something or is bindgen not in Cargo.lock? Also doesn't
> > > this depend on `cargo-install` being invoked in the same path as
> > > Cargo.lock, i.e. `rust/` subdir? (Not sure about this)
> >
> > Because the bindgen step is done in Meson it uses a bindgen binary that
> > is preinstalled in $PATH; it doesn't build bindgen-cli the way you'd see
> > it happen when done with build.rs(*).  Usually it can use the distro
> > package, but as you can see from the tests/lcitool/ part of the patch
> > it's too old for Ubuntu 22.04.
> >
> > The "cargo install bindgen-cli" command does not use QEMU's Cargo.lock,
> 
> So what does `--locked` do here? As per `--help`: "--locked Assert
> that `Cargo.lock` will remain unchanged" What Cargo.lock does it not
> change?

--locked ensures that cargo honours the Cargo.lock from the bindgen.git
repo, instead of pulling in arbitrarily newer dependencies. The
fixed versions of deps in bindgen's Cargo.lock are still compatible
with edition2021, but the latest deps are only compatible with edition2024,
and we need edition2021


With regards,
Daniel
-- 
|: https://berrange.com       ~~        https://hachyderm.io/@berrange :|
|: https://libvirt.org          ~~          https://entangle-photo.org :|
|: https://pixelfed.art/berrange   ~~    https://fstop138.berrange.com :|



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] rust: suggest passing --locked to "cargo install"
  2026-03-18  9:43       ` Daniel P. Berrangé
@ 2026-03-18 12:27         ` Paolo Bonzini
  2026-03-18 12:31           ` Daniel P. Berrangé
  0 siblings, 1 reply; 8+ messages in thread
From: Paolo Bonzini @ 2026-03-18 12:27 UTC (permalink / raw)
  To: Daniel P. Berrangé, Manos Pitsidianakis; +Cc: qemu-devel, Peter Maydell

On 3/18/26 10:43, Daniel P. Berrangé wrote:
> On Wed, Mar 18, 2026 at 11:32:59AM +0200, Manos Pitsidianakis wrote:
>>> The "cargo install bindgen-cli" command does not use QEMU's Cargo.lock,
>>
>> So what does `--locked` do here? As per `--help`: "--locked Assert
>> that `Cargo.lock` will remain unchanged" What Cargo.lock does it not
>> change?
> 
> --locked ensures that cargo honours the Cargo.lock from the bindgen.git
> repo, instead of pulling in arbitrarily newer dependencies. The
> fixed versions of deps in bindgen's Cargo.lock are still compatible
> with edition2021, but the latest deps are only compatible with edition2024,
> and we need edition2021

... and that does mean that sooner or later bindgen might update to a 
version that requires 2024 and we're out of luck.  So we could indeed 
add "--version" too, just like Manos suggested.  (Separately because 
this issue was breaking the build and Peter speed-runned the merging).

That said, support for 22.04 is going away soon and at that point "cargo 
install" will only be needed for the nightly job.  So it's not super 
necessary, either.

Paolo



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] rust: suggest passing --locked to "cargo install"
  2026-03-18 12:27         ` Paolo Bonzini
@ 2026-03-18 12:31           ` Daniel P. Berrangé
  0 siblings, 0 replies; 8+ messages in thread
From: Daniel P. Berrangé @ 2026-03-18 12:31 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: Manos Pitsidianakis, qemu-devel, Peter Maydell

On Wed, Mar 18, 2026 at 01:27:35PM +0100, Paolo Bonzini wrote:
> On 3/18/26 10:43, Daniel P. Berrangé wrote:
> > On Wed, Mar 18, 2026 at 11:32:59AM +0200, Manos Pitsidianakis wrote:
> > > > The "cargo install bindgen-cli" command does not use QEMU's Cargo.lock,
> > > 
> > > So what does `--locked` do here? As per `--help`: "--locked Assert
> > > that `Cargo.lock` will remain unchanged" What Cargo.lock does it not
> > > change?
> > 
> > --locked ensures that cargo honours the Cargo.lock from the bindgen.git
> > repo, instead of pulling in arbitrarily newer dependencies. The
> > fixed versions of deps in bindgen's Cargo.lock are still compatible
> > with edition2021, but the latest deps are only compatible with edition2024,
> > and we need edition2021
> 
> ... and that does mean that sooner or later bindgen might update to a
> version that requires 2024 and we're out of luck.  So we could indeed add
> "--version" too, just like Manos suggested.  (Separately because this issue
> was breaking the build and Peter speed-runned the merging).
> 
> That said, support for 22.04 is going away soon and at that point "cargo
> install" will only be needed for the nightly job.  So it's not super
> necessary, either.

Indeed, as soon as this pending release of QEMU is finalized, we can
bump the min Ubuntu to 24.04

With regards,
Daniel
-- 
|: https://berrange.com       ~~        https://hachyderm.io/@berrange :|
|: https://libvirt.org          ~~          https://entangle-photo.org :|
|: https://pixelfed.art/berrange   ~~    https://fstop138.berrange.com :|



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-03-18 12:32 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-18  8:21 [PATCH] rust: suggest passing --locked to "cargo install" Paolo Bonzini
2026-03-18  8:51 ` Manos Pitsidianakis
2026-03-18  9:28   ` Paolo Bonzini
2026-03-18  9:32     ` Manos Pitsidianakis
2026-03-18  9:43       ` Daniel P. Berrangé
2026-03-18 12:27         ` Paolo Bonzini
2026-03-18 12:31           ` Daniel P. Berrangé
2026-03-18  8:54 ` Daniel P. Berrangé

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox