Hi, >> the documentation for 'cargo-build-system' [1] refers to parameter >> '#:rust' which allows user to specify the Rust compiler version. >> However, I've found this commit >> 9635119a61a9ab1b023558727fcdf1816fdc7fc6 from Maxim which makes all >> 'rust-.*' definitions private. Is there a way to specify newer Rust >> compiler? Something like 'rust-next'? The package requires version >> 1.62 but the current is 1.60. Also both version are already defined. >> What's missing is just way to select them. >> >> [1] https://guix.gnu.org/manual/en/html_node/Build-Systems.html >> > > I checked gnu/packages/rust.scm and it looks like the rust packages > aren't hidden but actually not exported. If they were just hidden then > you could still do `#:rust ,rust-1.62`. Since they're actually not > exported you need to use the not-really-supported `@@` to refer to that > variable, so you'd have to use something like: > #:rust ,(@@ (gnu packages rust) rust-1.62)
Thanks Efraim, this is exactly what I've been looking for atm as temporary hack. > Given how it would be useful to have access to newer rust versions I > think it'd be worthwhile to make a post in guix-devel about making the > newer versions of rust use define-public but be hidden, so they can be > used as expected for the #:rust keyword. It would be definitely great to have access to the latest packaged version of rust. However, I understand this will trigger a lot of rebuilds. > > > > > > the documentation for 'cargo-build-system' [1] refers to parameter > > > '#:rust' which allows user to specify the Rust compiler version. > > > However, I've found this commit > > > 9635119a61a9ab1b023558727fcdf1816fdc7fc6 from Maxim which makes all > > > 'rust-.*' definitions private. Is there a way to specify newer Rust > > > compiler? Something like 'rust-next'? The package requires version > > > 1.62 but the current is 1.60. Also both version are already defined. > > > What's missing is just way to select them. > > > > > > [1] https://guix.gnu.org/manual/en/html_node/Build-Systems.html > > > > I checked gnu/packages/rust.scm and it looks like the rust packages > > aren't hidden but actually not exported. If they were just hidden then > > you could still do `#:rust ,rust-1.62`. Since they're actually not > > exported you need to use the not-really-supported `@@` to refer to that > > variable, so you'd have to use something like: > > #:rust ,(@@ (gnu packages rust) rust-1.62) > > > Normally only the newest released Rust version is supported by upstream, > so what we should do is add a newer rust and use it by default. > > The reasons previous rust versions are not exported is because they > aren't intended to be used by applications; they are built using > '--stage=1' to speed up compilation, which creates slower binaries and > may expose ABI stability problems (*if I remember the rust people's > explanation correctly). > > When adding new version of rust, we move all the tests and final rust > version specifics to the leaf (last) rust version, and keep the > intermediary rusts minimal (no test, no tools, stage=1, etc.) > > > Given how it would be useful to have access to newer rust versions I > > think it'd be worthwhile to make a post in guix-devel about making the > > newer versions of rust use define-public but be hidden, so they can be > > used as expected for the #:rust keyword. > > > It's typical that build system or services expose a way for the user to > use a variant of a package, but in the case of rust, I don't think it > should be advertised as a way to use different rust versions (given only > the last version is supported by upstream, e.g. sometimes fixing CVEs). I have to agree with you that this is just an anti-pattern and the #:rust should not be advertised. The best approach would be to add new rust version and switch to it. So do you think Maxim the `#:rust` parameter should be dropped and the documentation also removed? I guess same approach would apply for antioxidant-build-system, right? [1] 1 https://notabug.org/maximed/cargoless-rust-experiments ---- Petr
