Kangie and I have already discussed this a bit but filing a bug to keep track. OpenJDK (dev-lang/openjdk, dev-lang/openjdk-bin), Go (dev-lang/go, dev-lang/go-bootstrap), Ada (sys-devel/gcc, dev-lang/ada-bootstrap) all follow the model of "main package never downloads any binaries, depends on || ( self bootstrap-pkg )". Rust currently doesn't conform to this. We have dev-lang/rust and dev-lang/rust-bin, but dev-lang/rust[-system-bootstrap] downloads its *own* binary (same as rust-bin) rather than depending on dev-lang/rust-bin as appropriate. This situation is inconsistent with other ecosystems, makes it awkward when we provide our own binaries for certain arches (because we only put them in dev-lang/rust-bin right now and have to force system-bootstrap on dev-lang/rust, despite that being misleading and confusing for Portage), and also makes it hard for users to see a binary is even being used. All of this is easier now we have proper slotted Rust.
Note that for Go, we did briefly do what Rust did, but on IRC we discussed it and consensus was to not do that: commit 7d13afbc883539b4f9fffc7d6f115b4aea591b4e Author: William Hubbs <williamh@gentoo.org> Date: Sat Feb 17 12:05:36 2024 -0600 dev-lang/go: simplify bootstrapping This changes the live ebuild to download the appropriate bootstrap tarball directly instead of using the dev-lang/go-bootstrap package. Signed-off-by: William Hubbs <williamh@gentoo.org> commit 8b57b79cbeb7c24133a423620b27b60fab34d0f0 Author: William Hubbs <williamh@gentoo.org> Date: Wed Feb 21 12:52:34 2024 -0600 dev-lang/go: add system-bootstrap use flag The system-bootstrap use flag allows you to bootstrap with the installed version of go. Signed-off-by: William Hubbs <williamh@gentoo.org> commit 5e8b4bffc0d3655fefb05537f3f5a79339ae4cc0 Author: William Hubbs <williamh@gentoo.org> Date: Wed Mar 6 09:05:47 2024 -0600 dev-lang/go: add 1.22.1 This version adds a system-bootstrap use flag that controls whether the installed version of go is used for bootstrapping. This folows the same convention as openjdk, rust and sbcl. Signed-off-by: William Hubbs <williamh@gentoo.org> commit ffca1c57532c5912b9f5394906d2b3db6af5ff58 Author: William Hubbs <williamh@gentoo.org> Date: Wed Mar 6 12:28:32 2024 -0600 dev-lang/go: drop system-bootstrap use flag from live version Signed-off-by: William Hubbs <williamh@gentoo.org> commit c58e3dba67e7593f145f930e7b4fdecb218eb723 Author: William Hubbs <williamh@gentoo.org> Date: Wed Mar 6 14:20:38 2024 -0600 dev-lang/go: update EAPI 7 -> 8 also bootstrap with go-bootstrap instead of downloading the bootstrap binaries in this ebuild. Signed-off-by: William Hubbs <williamh@gentoo.org> commit 9e3a0152cb4d983aaacb3db2a93e48ffb2aa9710 Author: William Hubbs <williamh@gentoo.org> Date: Wed Mar 6 14:43:23 2024 -0600 dev-lang/go: sync live, typo fix for 1.22.1 Signed-off-by: William Hubbs <williamh@gentoo.org>
The bug has been referenced in the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=309a391f9ebb245e1016e3ff49a21398c212614b commit 309a391f9ebb245e1016e3ff49a21398c212614b Author: Matt Jolly <kangie@gentoo.org> AuthorDate: 2024-11-11 13:28:04 +0000 Commit: Matt Jolly <kangie@gentoo.org> CommitDate: 2024-11-11 14:35:48 +0000 dev-lang/rust: use rust.eclass for USE=system-bootstrap Take advantage of rust.eclass for dependency generation and appropriate bootstrap slot selection. Between the PATH manipulation that the eclass performs and the exported `RUSTC` we should see significantly more consistent bootstraps. Without this change `eselect-rust` would determine which `rustc` to run, resulting in build failures if an incorrect Rust was selected (which is nearly always in the age of slotted Rust). This is also one step towards removing USE=system-bootstrap entirely; now that we can reliably (and trivially) select appropriate slots for both dev-lang/rust and dev-lang/rust-bin we'll shortly be able to avoid downloading bootstrap bins at all. Bug: https://bugs.gentoo.org/943144 Closes: https://bugs.gentoo.org/943145 Signed-off-by: Matt Jolly <kangie@gentoo.org> dev-lang/rust/rust-1.71.1-r100.ebuild | 56 +++++++---------------------------- dev-lang/rust/rust-1.74.1-r100.ebuild | 53 ++++++--------------------------- dev-lang/rust/rust-1.75.0-r100.ebuild | 56 +++++++---------------------------- dev-lang/rust/rust-1.77.1-r100.ebuild | 55 +++++++--------------------------- dev-lang/rust/rust-1.79.0-r100.ebuild | 53 ++++++--------------------------- dev-lang/rust/rust-1.80.1-r100.ebuild | 53 ++++++--------------------------- dev-lang/rust/rust-1.81.0-r100.ebuild | 53 ++++++--------------------------- dev-lang/rust/rust-1.82.0-r100.ebuild | 53 ++++++--------------------------- 8 files changed, 75 insertions(+), 357 deletions(-)
The bug has been closed via the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=349e9c05f6e7b9ee98f700c72f8023d1d3f61223 commit 349e9c05f6e7b9ee98f700c72f8023d1d3f61223 Author: Matt Jolly <kangie@gentoo.org> AuthorDate: 2024-11-11 21:12:24 +0000 Commit: Matt Jolly <kangie@gentoo.org> CommitDate: 2024-11-11 23:40:15 +0000 dev-lang/rust: drop USE=system-bootstrap To be consistent with other ecosystems (e.g. Ada, Go), we can take advantage of the new Rust eclass (and some earlier prep work on USE=system-bootstrap) to completely remove that build path. This isn't a big change; dev-lang/rust without system-bootstrap would previously download its own bootstrap binary (same as rust-bin) instead of depending on dev-lang/rust-bin as appropriate. dev-lang/rust will now always receive an `||` dependency which ensures that an appropriate dev-lang/rust{,-bin} is available on the system to do any required bootstrapping. This will reduce Rust maintenance overhead, and make it more transparent to users that a Rust binary is required to bootstrap rust. Closes: https://bugs.gentoo.org/943144 Signed-off-by: Matt Jolly <kangie@gentoo.org> dev-lang/rust/rust-1.71.1-r100.ebuild | 52 ++--------------------------- dev-lang/rust/rust-1.74.1-r100.ebuild | 60 ++-------------------------------- dev-lang/rust/rust-1.75.0-r100.ebuild | 60 ++-------------------------------- dev-lang/rust/rust-1.77.1-r100.ebuild | 60 ++-------------------------------- dev-lang/rust/rust-1.79.0-r100.ebuild | 60 ++-------------------------------- dev-lang/rust/rust-1.80.1-r100.ebuild | 60 ++-------------------------------- dev-lang/rust/rust-1.81.0-r100.ebuild | 61 +++-------------------------------- dev-lang/rust/rust-1.82.0-r100.ebuild | 58 +++------------------------------ 8 files changed, 26 insertions(+), 445 deletions(-)
Did you forget to drop "system-bootstrap" from IUSE in dev-lang/rust-1.{71,74,75,77,79,80}*-r100.ebuild, or did you intentionally leave the flag in those older versions as a no-op?
The bug has been referenced in the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d4e5edb8e1f8703d7682f50f6ba6ee238f0428c1 commit d4e5edb8e1f8703d7682f50f6ba6ee238f0428c1 Author: Sam James <sam@gentoo.org> AuthorDate: 2024-11-12 20:48:29 +0000 Commit: Sam James <sam@gentoo.org> CommitDate: 2024-11-12 20:48:29 +0000 dev-lang/rust: cleanup leftover USE=system-bootstrap Followup to 349e9c05f6e7b9ee98f700c72f8023d1d3f61223. Bug: https://bugs.gentoo.org/943144 Signed-off-by: Sam James <sam@gentoo.org> dev-lang/rust/rust-1.71.1-r100.ebuild | 2 +- dev-lang/rust/rust-1.74.1-r100.ebuild | 2 +- dev-lang/rust/rust-1.75.0-r100.ebuild | 2 +- dev-lang/rust/rust-1.77.1-r100.ebuild | 2 +- dev-lang/rust/rust-1.79.0-r100.ebuild | 2 +- dev-lang/rust/rust-1.80.1-r100.ebuild | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-)
wrt the Go parts, see bug 941769 too.