[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#46399] [PATCH] build-system/cargo: Propagate crates across builds.
From: |
Efraim Flashner |
Subject: |
[bug#46399] [PATCH] build-system/cargo: Propagate crates across builds. |
Date: |
Mon, 12 Apr 2021 09:40:17 +0300 |
On Sun, Apr 11, 2021 at 05:11:21PM +0200, pelzflorian (Florian Pelz) wrote:
> Hello Efraim!
>
> Thank you for improving Rust development with Guix. I have a question
> about this change to doc/guix.texi when translating. Sorry for
> noticing so late just before the string freeze.
>
> On Tue, Feb 09, 2021 at 12:58:43PM +0200, Efraim Flashner wrote:
> > diff --git a/doc/guix.texi b/doc/guix.texi
> > index 7d18703283..0d153a1470 100644
> > --- a/doc/guix.texi
> > +++ b/doc/guix.texi
> > […]
> > @@ -7437,8 +7437,10 @@ supports builds of packages using Cargo, the build
> > tool of the
> > It adds @code{rustc} and @code{cargo} to the set of inputs.
> > A different Rust package can be specified with the @code{#:rust} parameter.
> >
> > -Regular cargo dependencies should be added to the package definition via
> > the
> > -@code{#:cargo-inputs} parameter as a list of name and spec pairs, where the
> > +Regular cargo dependencies should be added to the package definition
> > similarly
> > +to other packages; those needed only at build time to native-inputs,
> > others to
> > +inputs. If you need to add source-only crates then you should add them to
> > via
> > +the @code{#:cargo-inputs} parameter as a list of name and spec pairs,
> > where the
> > spec can be a package or a source definition. Note that the spec must
> > evaluate to a path to a gzipped tarball which includes a @code{Cargo.toml}
> > file at its root, or it will be ignored. Similarly, cargo dev-dependencies
>
> I have no experience in Rust. Do I understand correctly that
> source-only crates among the inputs should be added both to inputs and
> to #:cargo-inputs? Is the
>
> > +inputs. If you need to add source-only crates then you should add them to
> > via
>
> a typo which should read “add them too” instead of “add them to”?
I went back and refreshed myself with what I wrote there. source-only
crates should be added to both regular inputs and to #:cargo-inputs.
Actually converting the ~1000 rust packages to actually make good use of
the changes will allow us to drop nearly all the #:cargo-inputs and just
use regular inputs, but until then we still need the propagated source
magic that comes from #:cargo-inputs.
Yes, definitely a typo, it should be "add them too".
> I look at the subsequent change
> f35ab79e033aa8e4955e9c9100c74ecbb3ce4d0b to rust-wayland-commons
>
> > diff --git a/gnu/packages/crates-graphics.scm
> > b/gnu/packages/crates-graphics.scm
> > index d67e9dc02f..7dde00ffdb 100644
> > --- a/gnu/packages/crates-graphics.scm
> > +++ b/gnu/packages/crates-graphics.scm
> > @@ -2415,8 +2415,11 @@ the wayland protocol, client side.")
> > (arguments
> > - `(#:skip-build? #t
> > - #:cargo-inputs
> > + `(#:cargo-inputs
> > (("rust-nix" ,rust-nix-0.18)
> > ("rust-once-cell" ,rust-once-cell-1)
> > - ("rust-smallvec" ,rust-smallvec-1)
> > - ("rust-wayland-sys" ,rust-wayland-sys-0.28))))
> > + ("rust-smallvec" ,rust-smallvec-1))))
> > + (inputs
> > + `(("rust-nix" ,rust-nix-0.18)
> > + ("rust-once-cell" ,rust-once-cell-1)
> > + ("rust-smallvec" ,rust-smallvec-1)
> > + ("rust-wayland-sys" ,rust-wayland-sys-0.28)))
> > (home-page "https://github.com/smithay/wayland-rs")
>
> and do not understand why rust-wayland-sys is only part of inputs but
> rust-once-cell is also among the cargo-inputs. Also the inputs are
> empty for older versions of rust-wayland-commons.
#:cargo-inputs are "magic" in that they propagate their own #:cargo-inputs
to future builds. The changes to the cargo-build-system mimic this so we
can use regular inputs and not #:cargo-inputs. rust-wayland-sys-0.28 has
enough of its dependencies converted that it can be used as just an
input but rust-once-cell-1 hasn't yet so it still needs to be in
#:cargo-inputs. As far as the other versions of rust-wayland-commons, I
started by focusing on alacritty so we could remove some of the build
phases and move them to the crates which actually needed patching.
> Could you clarify what is written in the doc/guix.texi?
>
> Regards,
> Florian
I think for now the best option is to add the rust inputs of all types
to both inputs and #:cargo-inputs (or native-inputs and
#:cargo-development-inputs) and then remove them from #:cargo-inputs
when it's possible to do so. Ultimately Someone™ should revive the
wip-rust branch and convert all the crates over in one go and adjust the
importer and manual.
--
Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
signature.asc
Description: PGP signature