commit:     f2fd8f4b418395d9bf39a5f1bc1a2db91d7828e9
Author:     orbea <orbea <AT> riseup <DOT> net>
AuthorDate: Tue Feb 25 20:59:44 2025 +0000
Commit:     orbea <orbea <AT> riseup <DOT> net>
CommitDate: Tue Feb 25 21:44:02 2025 +0000
URL:        https://gitweb.gentoo.org/repo/proj/libressl.git/commit/?id=f2fd8f4b

dev-lang/rust: sync ::gentoo

This reverts commit 96e7baae4c236f10b99587dc37366b4e40d766cb.
This reverts commit aaef031e3ea75d641415d8bff8d7e77141ea21b2.

Signed-off-by: orbea <orbea <AT> riseup.net>

 dev-lang/rust/Manifest                             |   2 +
 .../rust/files/1.85.0-cross-compile-libz.patch     |  26 +++
 dev-lang/rust/rust-1.71.1-r101.ebuild              |  24 ++-
 dev-lang/rust/rust-1.74.1-r101.ebuild              |  24 ++-
 dev-lang/rust/rust-1.75.0-r101.ebuild              |  24 ++-
 dev-lang/rust/rust-1.76.0-r101.ebuild              |  24 ++-
 dev-lang/rust/rust-1.77.1-r101.ebuild              |  24 ++-
 dev-lang/rust/rust-1.78.0-r101.ebuild              |  24 ++-
 dev-lang/rust/rust-1.79.0-r101.ebuild              |  24 ++-
 dev-lang/rust/rust-1.80.1-r101.ebuild              |  24 ++-
 dev-lang/rust/rust-1.81.0-r101.ebuild              |  24 ++-
 dev-lang/rust/rust-1.82.0-r102.ebuild              |  24 ++-
 dev-lang/rust/rust-1.83.0-r2.ebuild                |  24 ++-
 dev-lang/rust/rust-1.84.0-r1.ebuild                |  11 +-
 dev-lang/rust/rust-1.84.1-r1.ebuild                |  23 ++-
 .../{rust-1.84.1-r1.ebuild => rust-1.85.0.ebuild}  | 221 +++++++++++++++------
 16 files changed, 386 insertions(+), 161 deletions(-)

diff --git a/dev-lang/rust/Manifest b/dev-lang/rust/Manifest
index f47aaa2..53bc7b9 100644
--- a/dev-lang/rust/Manifest
+++ b/dev-lang/rust/Manifest
@@ -24,3 +24,5 @@ DIST rustc-1.84.0-src.tar.xz 354993944 BLAKE2B 
e4697d8a9f42484556ed490390aef535b
 DIST rustc-1.84.0-src.tar.xz.asc 801 BLAKE2B 
b1846702f36b92c479499f5eb704ce1e272131fc1b6b625c8d64c873a82ed79b1de8cceb1f21ae4b9dccf81e258547debf367b7b769ac94ed10a59dee18f79f1
 SHA512 
5ada0e0fed9901044eaa0d7cb657f685c7e183e91245714abe4a0a8bf3062a7de281932c7de7587220df0542511f6011d057bd8bed19d98c755eab74091cdfdb
 DIST rustc-1.84.1-src.tar.xz 355078168 BLAKE2B 
849e8c909493bf76ce9749b9dcb1967180223b91a41d690bc477e78557d4e24949c9a8d8276d824af8c54ad62bc4a998e7a8efbc0bbd2008a4f64f51a7690d48
 SHA512 
f1cc4765736551508408126e44086988e8ddc30c1a929bf7b61c6be85ad0d65928dd5fb1041cfaeee8eb37d2208f2c1917e276aef2bc9a8e40e34f6713b349e1
 DIST rustc-1.84.1-src.tar.xz.asc 801 BLAKE2B 
f3decd3470fd1eff33adbb376490a30eb8db28dd4176bde0fefe4f60acf79c3dd0e1a330d519b5319360136ea7d0a124f6720dea08617202d9e9298da992ccf6
 SHA512 
a241fe3efba293f3e872b74f09dd0d184e0239afd1416326d57bf1134d92721c65b187f5c99962b51671877a539f18e82d2d797c76af42615c11a8bb3905f796
+DIST rustc-1.85.0-src.tar.xz 274011696 BLAKE2B 
9cb1c5b9fa9b0ee8a3150d634b58f4d14c38342f19cffbdcaa4e783150f9b3c516763d549d9998d90e11377cd59e9d9442a99079aafccdc005739b075574447a
 SHA512 
3e9c933d1d9b6e5fb081837cf07eb1638b1a6b4fd1cb607dd860c5021ba7b521edbaf8ba0fa8f182f62178b72a3e1a3e6b26675e8fb6530871137852a074443c
+DIST rustc-1.85.0-src.tar.xz.asc 801 BLAKE2B 
8168c984f69356898f7a51199f3250a51c58a6512463cd5011acdff8c63754ba196bb050dba95b73d37c7e6d4bbcd3d1cb471d067a6615cd81b8969394e3539a
 SHA512 
b96fffde7eb3d98cca6abe44e671fd4752416357ab3180d2a09a60fc022ac03d10e64ae285ef6276b8d881d6154fd7398f46666f5a2ea6f3023ea38fd543f59e

diff --git a/dev-lang/rust/files/1.85.0-cross-compile-libz.patch 
b/dev-lang/rust/files/1.85.0-cross-compile-libz.patch
new file mode 100644
index 0000000..7bd45c4
--- /dev/null
+++ b/dev-lang/rust/files/1.85.0-cross-compile-libz.patch
@@ -0,0 +1,26 @@
+From 768f7e50a6d9a3db4e4eef45dcb4c56e9b580389 Mon Sep 17 00:00:00 2001
+From: Matt Jolly <[email protected]>
+Date: Sun, 9 Feb 2025 21:12:43 +1000
+Subject: [PATCH] Update libz cross-compile patch for 9999 (1.86.0)
+
+See-also: 
https://paste.sr.ht/~kchibisov/682321e0fd4a3ece4a4b7b71591896f5cd3cdb22
+See-also: https://github.com/gentoo/gentoo/pull/35246#discussion_r1484525497
+--- a/compiler/rustc_llvm/build.rs
++++ b/compiler/rustc_llvm/build.rs
+@@ -219,13 +219,7 @@ fn main() {
+     // of llvm-config, not the target that we're attempting to link.
+     let mut cmd = Command::new(&llvm_config);
+     cmd.arg(llvm_link_arg).arg("--libs");
+-
+-    // Don't link system libs if cross-compiling unless targeting Windows.
+-    // On Windows system DLLs aren't linked directly, instead import 
libraries are used.
+-    // These import libraries are independent of the host.
+-    if !is_crossed || target.contains("windows") {
+-        cmd.arg("--system-libs");
+-    }
++    cmd.arg("--system-libs");
+ 
+     // We need libkstat for getHostCPUName on SPARC builds.
+     // See also: https://github.com/llvm/llvm-project/issues/64186
+-- 
+2.48.0

diff --git a/dev-lang/rust/rust-1.71.1-r101.ebuild 
b/dev-lang/rust/rust-1.71.1-r101.ebuild
index b03b7a9..5cb2313 100644
--- a/dev-lang/rust/rust-1.71.1-r101.ebuild
+++ b/dev-lang/rust/rust-1.71.1-r101.ebuild
@@ -38,7 +38,12 @@ ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM AVR BPF Hexagon Lanai 
LoongArch Mips MSP43
 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+# 
https://github.com/rust-lang/llvm-project/blob/rustc-1.71.0/llvm/CMakeLists.txt
+_ALL_RUST_EXPERIMENTAL_TARGETS=()
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4 UoI-NCSA"
 SLOT="${PV}"
@@ -49,6 +54,9 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -56,7 +64,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -252,13 +260,13 @@ src_configure() {
 
        rust_target="$(rust_abi)"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
        cat <<- _EOF_ > "${S}"/config.toml
@@ -270,7 +278,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632

diff --git a/dev-lang/rust/rust-1.74.1-r101.ebuild 
b/dev-lang/rust/rust-1.74.1-r101.ebuild
index c664c49..ca86027 100644
--- a/dev-lang/rust/rust-1.74.1-r101.ebuild
+++ b/dev-lang/rust/rust-1.74.1-r101.ebuild
@@ -44,7 +44,12 @@ ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY 
DirectX Hexagon Lanai
 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+# 
https://github.com/rust-lang/llvm-project/blob/rustc-1.74.1/llvm/CMakeLists.txt
+_ALL_RUST_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV}"
@@ -55,6 +60,9 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -62,7 +70,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -306,13 +314,13 @@ src_configure() {
        rust_build="$(rust_abi "${CBUILD}")"
        rust_host="$(rust_abi "${CHOST}")"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
        cat <<- _EOF_ > "${S}"/config.toml
@@ -324,7 +332,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632

diff --git a/dev-lang/rust/rust-1.75.0-r101.ebuild 
b/dev-lang/rust/rust-1.75.0-r101.ebuild
index cb6615f..ea3ad95 100644
--- a/dev-lang/rust/rust-1.75.0-r101.ebuild
+++ b/dev-lang/rust/rust-1.75.0-r101.ebuild
@@ -39,7 +39,12 @@ ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY 
DirectX Hexagon Lanai
 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+# 
https://github.com/rust-lang/llvm-project/blob/rustc-1.75.0/llvm/CMakeLists.txt
+_ALL_RUST_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV}"
@@ -50,6 +55,9 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -57,7 +65,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -275,13 +283,13 @@ src_configure() {
        rust_build="$(rust_abi "${CBUILD}")"
        rust_host="$(rust_abi "${CHOST}")"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
        cat <<- _EOF_ > "${S}"/config.toml
@@ -293,7 +301,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632

diff --git a/dev-lang/rust/rust-1.76.0-r101.ebuild 
b/dev-lang/rust/rust-1.76.0-r101.ebuild
index 6c38b73..1fafe74 100644
--- a/dev-lang/rust/rust-1.76.0-r101.ebuild
+++ b/dev-lang/rust/rust-1.76.0-r101.ebuild
@@ -39,7 +39,12 @@ ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY 
DirectX Hexagon Lanai
 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+# 
https://github.com/rust-lang/llvm-project/blob/rustc-1.76.0/llvm/CMakeLists.txt
+_ALL_RUST_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV}"
@@ -50,6 +55,9 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -57,7 +65,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -275,13 +283,13 @@ src_configure() {
        rust_build="$(rust_abi "${CBUILD}")"
        rust_host="$(rust_abi "${CHOST}")"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
        cat <<- _EOF_ > "${S}"/config.toml
@@ -293,7 +301,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632

diff --git a/dev-lang/rust/rust-1.77.1-r101.ebuild 
b/dev-lang/rust/rust-1.77.1-r101.ebuild
index 63a3b8b..d834c65 100644
--- a/dev-lang/rust/rust-1.77.1-r101.ebuild
+++ b/dev-lang/rust/rust-1.77.1-r101.ebuild
@@ -39,7 +39,12 @@ ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY 
DirectX Hexagon Lanai
 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+# 
https://github.com/rust-lang/llvm-project/blob/rustc-1.77.1/llvm/CMakeLists.txt
+_ALL_RUST_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV}"
@@ -50,6 +55,9 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -57,7 +65,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -274,13 +282,13 @@ src_configure() {
        rust_build="$(rust_abi "${CBUILD}")"
        rust_host="$(rust_abi "${CHOST}")"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
        cat <<- _EOF_ > "${S}"/config.toml
@@ -292,7 +300,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632

diff --git a/dev-lang/rust/rust-1.78.0-r101.ebuild 
b/dev-lang/rust/rust-1.78.0-r101.ebuild
index 2557b51..984ce3e 100644
--- a/dev-lang/rust/rust-1.78.0-r101.ebuild
+++ b/dev-lang/rust/rust-1.78.0-r101.ebuild
@@ -39,7 +39,12 @@ ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY 
DirectX Hexagon Lanai
 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+# 
https://github.com/rust-lang/llvm-project/blob/rustc-1.78.0/llvm/CMakeLists.txt
+_ALL_RUST_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV}"
@@ -50,6 +55,9 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -57,7 +65,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -274,13 +282,13 @@ src_configure() {
        rust_build="$(rust_abi "${CBUILD}")"
        rust_host="$(rust_abi "${CHOST}")"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
        cat <<- _EOF_ > "${S}"/config.toml
@@ -291,7 +299,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632

diff --git a/dev-lang/rust/rust-1.79.0-r101.ebuild 
b/dev-lang/rust/rust-1.79.0-r101.ebuild
index ccad428..6f8e118 100644
--- a/dev-lang/rust/rust-1.79.0-r101.ebuild
+++ b/dev-lang/rust/rust-1.79.0-r101.ebuild
@@ -39,7 +39,12 @@ ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY 
DirectX Hexagon Lanai
 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+# 
https://github.com/rust-lang/llvm-project/blob/rustc-1.79.0/llvm/CMakeLists.txt
+_ALL_RUST_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV}"
@@ -50,6 +55,9 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -57,7 +65,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -274,13 +282,13 @@ src_configure() {
        rust_build="$(rust_abi "${CBUILD}")"
        rust_host="$(rust_abi "${CHOST}")"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
        cat <<- _EOF_ > "${S}"/config.toml
@@ -291,7 +299,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632

diff --git a/dev-lang/rust/rust-1.80.1-r101.ebuild 
b/dev-lang/rust/rust-1.80.1-r101.ebuild
index 076988c..ebdba51 100644
--- a/dev-lang/rust/rust-1.80.1-r101.ebuild
+++ b/dev-lang/rust/rust-1.80.1-r101.ebuild
@@ -39,7 +39,12 @@ ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY 
DirectX Hexagon Lanai
 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+# 
https://github.com/rust-lang/llvm-project/blob/rustc-1.80.1/llvm/CMakeLists.txt
+_ALL_RUST_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV}"
@@ -50,6 +55,9 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -57,7 +65,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -273,13 +281,13 @@ src_configure() {
        rust_build="$(rust_abi "${CBUILD}")"
        rust_host="$(rust_abi "${CHOST}")"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
        cat <<- _EOF_ > "${S}"/config.toml
@@ -290,7 +298,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632

diff --git a/dev-lang/rust/rust-1.81.0-r101.ebuild 
b/dev-lang/rust/rust-1.81.0-r101.ebuild
index ca411eb..0ecadce 100644
--- a/dev-lang/rust/rust-1.81.0-r101.ebuild
+++ b/dev-lang/rust/rust-1.81.0-r101.ebuild
@@ -40,7 +40,12 @@ ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY 
DirectX Hexagon Lanai
 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+# 
https://github.com/rust-lang/llvm-project/blob/rustc-1.81.0/llvm/CMakeLists.txt
+_ALL_RUST_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV}"
@@ -51,6 +56,9 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -58,7 +66,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -277,13 +285,13 @@ src_configure() {
        rust_build="$(rust_abi "${CBUILD}")"
        rust_host="$(rust_abi "${CHOST}")"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
        cat <<- _EOF_ > "${S}"/config.toml
@@ -294,7 +302,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632

diff --git a/dev-lang/rust/rust-1.82.0-r102.ebuild 
b/dev-lang/rust/rust-1.82.0-r102.ebuild
index 5f6bbb6..459735c 100644
--- a/dev-lang/rust/rust-1.82.0-r102.ebuild
+++ b/dev-lang/rust/rust-1.82.0-r102.ebuild
@@ -39,7 +39,12 @@ ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY 
DirectX Hexagon Lanai
 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+# 
https://github.com/rust-lang/llvm-project/blob/rustc-1.82.0/llvm/CMakeLists.txt
+_ALL_RUST_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV}"
@@ -50,6 +55,9 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -57,7 +65,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -282,13 +290,13 @@ src_configure() {
        rust_build="$(rust_abi "${CBUILD}")"
        rust_host="$(rust_abi "${CHOST}")"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
        cat <<- _EOF_ > "${S}"/config.toml
@@ -299,7 +307,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632

diff --git a/dev-lang/rust/rust-1.83.0-r2.ebuild 
b/dev-lang/rust/rust-1.83.0-r2.ebuild
index 959b64e..1896488 100644
--- a/dev-lang/rust/rust-1.83.0-r2.ebuild
+++ b/dev-lang/rust/rust-1.83.0-r2.ebuild
@@ -39,7 +39,12 @@ ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY 
DirectX Hexagon Lanai
 ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+# 
https://github.com/rust-lang/llvm-project/blob/rustc-1.83.0/llvm/CMakeLists.txt
+_ALL_RUST_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV}"
@@ -50,6 +55,9 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -57,7 +65,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -284,13 +292,13 @@ src_configure() {
        rust_build="$(rust_abi "${CBUILD}")"
        rust_host="$(rust_abi "${CHOST}")"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
        cat <<- _EOF_ > "${S}"/config.toml
@@ -301,7 +309,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632

diff --git a/dev-lang/rust/rust-1.84.0-r1.ebuild 
b/dev-lang/rust/rust-1.84.0-r1.ebuild
index 7fb6246..6433cd6 100644
--- a/dev-lang/rust/rust-1.84.0-r1.ebuild
+++ b/dev-lang/rust/rust-1.84.0-r1.ebuild
@@ -40,7 +40,8 @@ ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
 # 
https://github.com/rust-lang/llvm-project/blob/rustc-1.84.0/llvm/CMakeLists.txt
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+_ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+ALL_LLVM_EXPERIMENTAL_TARGETS=( )
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV}"
@@ -51,6 +52,12 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       for _xx in "${_ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ "${_xx}" == "${_x}" ]] ; then
+                       ALL_LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+                       break
+               fi
+       done
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -58,7 +65,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (

diff --git a/dev-lang/rust/rust-1.84.1-r1.ebuild 
b/dev-lang/rust/rust-1.84.1-r1.ebuild
index c897c25..8d8e1fe 100644
--- a/dev-lang/rust/rust-1.84.1-r1.ebuild
+++ b/dev-lang/rust/rust-1.84.1-r1.ebuild
@@ -40,7 +40,11 @@ ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
 # 
https://github.com/rust-lang/llvm-project/blob/rustc-1.84.0/llvm/CMakeLists.txt
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+_ALL_RUST_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
 SLOT="${PV}"
@@ -51,6 +55,9 @@ LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -58,7 +65,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -284,13 +291,13 @@ src_configure() {
        rust_build="$(rust_abi "${CBUILD}")"
        rust_host="$(rust_abi "${CHOST}")"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
        cat <<- _EOF_ > "${S}"/config.toml
@@ -303,7 +310,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632

diff --git a/dev-lang/rust/rust-1.84.1-r1.ebuild 
b/dev-lang/rust/rust-1.85.0.ebuild
similarity index 75%
copy from dev-lang/rust/rust-1.84.1-r1.ebuild
copy to dev-lang/rust/rust-1.85.0.ebuild
index c897c25..d9afa2e 100644
--- a/dev-lang/rust/rust-1.84.1-r1.ebuild
+++ b/dev-lang/rust/rust-1.85.0.ebuild
@@ -6,32 +6,53 @@ EAPI=8
 LLVM_COMPAT=( 19 )
 PYTHON_COMPAT=( python3_{10..13} )
 
-RUST_MAX_VER=${PV}
-RUST_MIN_VER="$(ver_cut 1).$(($(ver_cut 2) - 1)).0"
+RUST_MAX_VER=${PV%%_*}
+if [[ ${PV} == *9999* ]]; then
+       RUST_MIN_VER="1.85.0" # Update this as new `beta` releases come out.
+elif [[ ${PV} == *beta* ]]; then
+       # Enforce that `beta` is built from `stable`.
+       # While uncommon it is possible for feature changes within `beta` to 
result
+       # in an older snapshot being unable to build a newer one without 
modifying the sources.
+       # 'stable' releases should always be able to build a beta snapshot so 
just use those.
+       RUST_MAX_VER="$(ver_cut 1).$(($(ver_cut 2) - 1)).1"
+       RUST_MIN_VER="$(ver_cut 1).$(($(ver_cut 2) - 1)).0"
+else
+       RUST_MIN_VER="$(ver_cut 1).$(($(ver_cut 2) - 1)).0"
+fi
 
 inherit check-reqs estack flag-o-matic llvm-r1 multiprocessing optfeature \
        multilib multilib-build python-any-r1 rust rust-toolchain 
toolchain-funcs verify-sig
 
-if [[ ${PV} = *beta* ]]; then
+if [[ ${PV} = *9999* ]]; then
+       inherit git-r3
+       EGIT_REPO_URI="https://github.com/rust-lang/rust.git";
+       EGIT_SUBMODULES=(
+               "*"
+               "-src/gcc"
+       )
+elif [[ ${PV} == *beta* ]]; then
+       # Identify the snapshot date of the beta release:
+       # curl -Ls static.rust-lang.org/dist/channel-rust-beta.toml | grep 
beta-src.tar.xz
        betaver=${PV//*beta}
        BETA_SNAPSHOT="${betaver:0:4}-${betaver:4:2}-${betaver:6:2}"
        MY_P="rustc-beta"
-       SRC="${BETA_SNAPSHOT}/rustc-beta-src.tar.xz -> rustc-${PV}-src.tar.xz"
+       
SRC_URI="https://static.rust-lang.org/dist/${BETA_SNAPSHOT}/rustc-beta-src.tar.xz
 -> rustc-${PV}-src.tar.xz
+               verify-sig? ( 
https://static.rust-lang.org/dist/${BETA_SNAPSHOT}/rustc-beta-src.tar.xz.asc
+                       -> rustc-${PV}-src.tar.xz.asc )
+       "
+       S="${WORKDIR}/${MY_P}-src"
 else
        MY_P="rustc-${PV}"
-       SRC="${MY_P}-src.tar.xz"
+       SRC_URI="https://static.rust-lang.org/dist/${MY_P}-src.tar.xz
+               verify-sig? ( 
https://static.rust-lang.org/dist/${MY_P}-src.tar.xz.asc )
+       "
+       S="${WORKDIR}/${MY_P}-src"
        KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~sparc 
~x86"
 fi
 
-DESCRIPTION="Systems programming language from Mozilla"
+DESCRIPTION="Systems programming language originally developed by Mozilla"
 HOMEPAGE="https://www.rust-lang.org/";
 
-SRC_URI="
-       https://static.rust-lang.org/dist/${SRC}
-       verify-sig? ( https://static.rust-lang.org/dist/${SRC}.asc )
-"
-S="${WORKDIR}/${MY_P}-src"
-
 # keep in sync with llvm ebuild of the same version as bundled one.
 ALL_LLVM_TARGETS=( AArch64 AMDGPU ARC ARM AVR BPF CSKY DirectX Hexagon Lanai
        LoongArch M68k Mips MSP430 NVPTX PowerPC RISCV Sparc SPIRV SystemZ VE
@@ -40,17 +61,29 @@ ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" 
)
 LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
 
 # 
https://github.com/rust-lang/llvm-project/blob/rustc-1.84.0/llvm/CMakeLists.txt
-ALL_LLVM_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+_ALL_RUST_EXPERIMENTAL_TARGETS=( ARC CSKY DirectX M68k SPIRV Xtensa )
+declare -A ALL_RUST_EXPERIMENTAL_TARGETS
+for _x in "${_ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+       ALL_RUST_EXPERIMENTAL_TARGETS["llvm_targets_${_x}"]=0
+done
 
 LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
-SLOT="${PV}"
+SLOT="${PV%%_*}" # Beta releases get to share the same SLOT as the eventual 
stable
+
+IUSE="big-endian clippy cpu_flags_x86_sse2 debug dist doc llvm-libunwind lto 
rustfmt rust-analyzer rust-src system-llvm test wasm ${ALL_LLVM_TARGETS[*]}"
 
-IUSE="big-endian clippy cpu_flags_x86_sse2 debug dist doc llvm-libunwind lto 
miri nightly parallel-compiler rustfmt rust-analyzer rust-src system-llvm test 
wasm ${ALL_LLVM_TARGETS[*]}"
+if [[ ${PV} = *9999* ]]; then
+       # These USE flags require nightly rust
+       IUSE+=" miri"
+fi
 
 LLVM_DEPEND=()
 # splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
 for _x in "${ALL_LLVM_TARGETS[@]}"; do
        LLVM_DEPEND+=( "        ${_x}? ( $(llvm_gen_dep 
"llvm-core/llvm:\${LLVM_SLOT}[${_x}]") )" )
+       if [[ -v ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"] ]] ; then
+               ALL_RUST_EXPERIMENTAL_TARGETS["${_x}"]=1
+       fi
 done
 LLVM_DEPEND+=( "       wasm? ( $(llvm_gen_dep 'llvm-core/lld:${LLVM_SLOT}') )" 
)
 LLVM_DEPEND+=( "       $(llvm_gen_dep 'llvm-core/llvm:${LLVM_SLOT}')" )
@@ -58,7 +91,7 @@ LLVM_DEPEND+=( "      $(llvm_gen_dep 
'llvm-core/llvm:${LLVM_SLOT}')" )
 BDEPEND="${PYTHON_DEPS}
        app-eselect/eselect-rust
        || (
-               >=sys-devel/gcc-4.7
+               >=sys-devel/gcc-4.7[cxx]
                >=llvm-core/clang-3.5
        )
        !system-llvm? (
@@ -94,8 +127,6 @@ RDEPEND="${DEPEND}
 "
 
 REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
-       miri? ( nightly )
-       parallel-compiler? ( nightly )
        rust-analyzer? ( rust-src )
        test? ( ${ALL_LLVM_TARGETS[*]} )
        wasm? ( llvm_targets_WebAssembly )
@@ -106,27 +137,27 @@ REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
 CMAKE_WARN_UNUSED_CLI=no
 
 QA_FLAGS_IGNORED="
-       usr/lib/${PN}/${PV}/bin/.*
-       usr/lib/${PN}/${PV}/libexec/.*
-       usr/lib/${PN}/${PV}/lib/lib.*.so
-       usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/.*
-       usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+       usr/lib/${PN}/${SLOT}/bin/.*
+       usr/lib/${PN}/${SLOT}/libexec/.*
+       usr/lib/${PN}/${SLOT}/lib/lib.*.so
+       usr/lib/${PN}/${SLOT}/lib/rustlib/.*/bin/.*
+       usr/lib/${PN}/${SLOT}/lib/rustlib/.*/lib/lib.*.so
 "
 
 QA_SONAME="
-       usr/lib/${PN}/${PV}/lib/lib.*.so.*
-       usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
+       usr/lib/${PN}/${SLOT}/lib/lib.*.so.*
+       usr/lib/${PN}/${SLOT}/lib/rustlib/.*/lib/lib.*.so
 "
 
 QA_PRESTRIPPED="
-       usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/rust-llvm-dwp
-       usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/self-contained/crtn.o
+       usr/lib/${PN}/${SLOT}/lib/rustlib/.*/bin/rust-llvm-dwp
+       usr/lib/${PN}/${SLOT}/lib/rustlib/.*/lib/self-contained/crtn.o
 "
 
 # An rmeta file is custom binary format that contains the metadata for the 
crate.
 # rmeta files do not support linking, since they do not contain compiled 
object files.
 # so we can safely silence the warning for this QA check.
-QA_EXECSTACK="usr/lib/${PN}/${PV}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+QA_EXECSTACK="usr/lib/${PN}/${SLOT}/lib/rustlib/*/lib*.rlib:lib.rmeta"
 
 # causes double bootstrap
 RESTRICT="test"
@@ -134,10 +165,8 @@ RESTRICT="test"
 VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/rust.asc
 
 PATCHES=(
-       "${FILESDIR}"/1.78.0-musl-dynamic-linking.patch
-       "${FILESDIR}"/1.83.0-cross-compile-libz.patch
+       "${FILESDIR}"/1.85.0-cross-compile-libz.patch
        "${FILESDIR}"/1.67.0-doc-wasm.patch
-       "${FILESDIR}"/1.84.1-fix-cross.patch # already upstreamed
 )
 
 clear_vendor_checksums() {
@@ -155,6 +184,48 @@ toml_usex() {
        usex "${1}" true false
 }
 
+src_unpack() {
+       if [[ ${PV} = *9999* ]]; then
+               git-r3_src_unpack
+               mkdir "${S}/.cargo" || die # The vendor script has a check for 
.cargo/config{,.toml}
+               touch "${S}/.cargo/config.toml" || die
+               local rust_stage0_root="$(${RUSTC} --print sysroot || die 
"Can't determine rust's sysroot")"
+               local rust_build=""
+               local rust_host=""
+               # Configure vendor to use the portage-provided toolchain. This 
prevents it from
+               # attempting to fetch a `beta` toolchain from the internet.
+               cat <<- _EOF_ > "${T}/vendor-config.toml"
+                       [build]
+                       build = "$(rust_abi "${CBUILD}")"
+                       host = ["$(rust_abi "${CHOST}")"]
+                       target = ["$(rust_abi "${CHOST}")"]
+                       cargo = "${rust_stage0_root}/bin/cargo"
+                       rustc = "${rust_stage0_root}/bin/rustc"
+                       rustfmt = "${rust_stage0_root}/bin/rustfmt"
+               _EOF_
+               # We're using git sources so we need to run the Vendor script
+               # to ensure that all dependencies are present and up-to-date
+               mkdir "${S}/vendor" || die
+               # This also compiles the 'build helper', there's no way to 
avoid this.
+               ${EPYTHON} "${S}"/x.py vendor -vvv 
--config="${T}"/vendor-config.toml -j$(makeopts_jobs) ||
+                       die "Failed to vendor dependencies"
+               # TODO: This has to be generated somehow, this is from a 1.84.x 
tarball I had lying around.
+               cat <<- _EOF_ > "${S}/.cargo/config.toml"
+                       [source.crates-io]
+                       replace-with = "vendored-sources"
+
+                       [source."git+https://github.com/rust-lang/team";]
+                       git = "https://github.com/rust-lang/team";
+                       replace-with = "vendored-sources"
+
+                       [source.vendored-sources]
+                       directory = "vendor"
+               _EOF_
+       else
+               verify-sig_src_unpack
+       fi
+}
+
 pre_build_checks() {
        local M=9216
        # multiply requirements by 1.3 if we are doing x86-multilib
@@ -162,7 +233,9 @@ pre_build_checks() {
                M=$(( $(usex abi_x86_32 13 10) * ${M} / 10 ))
        fi
        M=$(( $(usex clippy 128 0) + ${M} ))
-       M=$(( $(usex miri 128 0) + ${M} ))
+       if [[ ${PV} == *9999* ]]; then
+               M=$(( $(usex miri 128 0) + ${M} ))
+       fi
        M=$(( $(usex rustfmt 256 0) + ${M} ))
        # add 2G if we compile llvm and 256M per llvm_target
        if ! use system-llvm; then
@@ -231,6 +304,11 @@ src_prepare() {
        eapply_crate openssl-sys-0.9.102 
"${FILESDIR}"/1.79.0-libressl-openssl-sys.patch
        eapply_crate openssl-sys-0.9.104 
"${FILESDIR}"/1.84.0-libressl-openssl-sys-0.9.104.patch
 
+       if [[ ${PV} = *9999* ]]; then
+               # We need to update / generate lockfiles for the workspace
+               ${CARGO} generate-lockfile --offline
+
+       fi
        # Rust baselines to Pentium4 on x86, this patch lowers the baseline to 
i586 when sse2 is not set.
        if use x86; then
                if ! use cpu_flags_x86_sse2; then
@@ -271,11 +349,14 @@ src_configure() {
        # cargo and rustdoc are mandatory and should always be included
        local tools='"cargo","rustdoc"'
        use clippy && tools+=',"clippy"'
-       use miri && tools+=',"miri"'
        use rustfmt && tools+=',"rustfmt"'
        use rust-analyzer && 
tools+=',"rust-analyzer","rust-analyzer-proc-macro-srv"'
        use rust-src && tools+=',"src"'
 
+       if [[ ${PV} == *9999* ]]; then
+               use miri && tools+=',"miri"'
+       fi
+
        local rust_stage0_root="$(${RUSTC} --print sysroot || die "Can't 
determine rust's sysroot")"
        # in case of prefix it will be already prefixed, as --print sysroot 
returns full path
        [[ -d ${rust_stage0_root} ]] || die "${rust_stage0_root} is not a 
directory"
@@ -284,15 +365,28 @@ src_configure() {
        rust_build="$(rust_abi "${CBUILD}")"
        rust_host="$(rust_abi "${CHOST}")"
 
-       LLVM_EXPERIMENTAL_TARGETS=()
-       for _x in "${ALL_LLVM_EXPERIMENTAL_TARGETS[@]}"; do
-               if use llvm_targets_${_x} ; then
-                       LLVM_EXPERIMENTAL_TARGETS+=( ${_x} )
+       RUST_EXPERIMENTAL_TARGETS=()
+       for _x in "${!ALL_RUST_EXPERIMENTAL_TARGETS[@]}"; do
+               if [[ ${ALL_RUST_EXPERIMENTAL_TARGETS[${_x}]} == 1 ]] && use 
${_x} ; then
+                       RUST_EXPERIMENTAL_TARGETS+=( ${_x#llvm_targets_} )
                fi
        done
-       LLVM_EXPERIMENTAL_TARGETS=${LLVM_EXPERIMENTAL_TARGETS[@]}
+       RUST_EXPERIMENTAL_TARGETS=${RUST_EXPERIMENTAL_TARGETS[@]}
 
        local cm_btype="$(usex debug DEBUG RELEASE)"
+       local build_channel
+       local build_miri="false"
+       case "${PV}" in
+               *9999*)
+                       build_channel="nightly"
+                       ;;
+               *beta*)
+                       build_channel="beta"
+                       ;;
+               *)
+                       build_channel="stable"
+                       ;;
+       esac
        cat <<- _EOF_ > "${S}"/config.toml
                # https://github.com/rust-lang/rust/issues/135358 (bug #947897)
                profile = "dist"
@@ -303,7 +397,7 @@ src_configure() {
                assertions = $(toml_usex debug)
                ninja = true
                targets = "${LLVM_TARGETS// /;}"
-               experimental-targets = "${LLVM_EXPERIMENTAL_TARGETS// /;}"
+               experimental-targets = "${RUST_EXPERIMENTAL_TARGETS// /;}"
                link-shared = $(toml_usex system-llvm)
                $(if is_libcxx_linked; then
                        # https://bugs.gentoo.org/732632
@@ -358,7 +452,7 @@ src_configure() {
                profiler = true
                cargo-native-static = false
                [install]
-               prefix = "${EPREFIX}/usr/lib/${PN}/${PV}"
+               prefix = "${EPREFIX}/usr/lib/${PN}/${SLOT}"
                sysconfdir = "etc"
                docdir = "share/doc/rust"
                bindir = "bin"
@@ -381,8 +475,7 @@ src_configure() {
                $(if ! tc-is-cross-compiler; then
                        echo "default-linker = \"$(tc-getCC)\""
                fi)
-               parallel-compiler = $(toml_usex parallel-compiler)
-               channel = "$(usex nightly nightly stable)"
+               channel = "${build_channel}"
                description = "gentoo"
                rpath = true
                verbose-tests = true
@@ -601,11 +694,11 @@ src_test() {
 src_install() {
        DESTDIR="${D}" "${EPYTHON}" ./x.py install -vv 
--config="${S}"/config.toml -j$(makeopts_jobs) || die
 
-       docompress /usr/lib/${PN}/${PV}/share/man/
+       docompress /usr/lib/${PN}/${SLOT}/share/man/
 
        # bug #689562, #689160
-       rm -v "${ED}/usr/lib/${PN}/${PV}/etc/bash_completion.d/cargo" || die
-       rmdir -v "${ED}/usr/lib/${PN}/${PV}"/etc{/bash_completion.d,} || die
+       rm -v "${ED}/usr/lib/${PN}/${SLOT}/etc/bash_completion.d/cargo" || die
+       rmdir -v "${ED}/usr/lib/${PN}/${SLOT}"/etc{/bash_completion.d,} || die
 
        local symlinks=(
                cargo
@@ -617,7 +710,9 @@ src_install() {
        )
 
        use clippy && symlinks+=( clippy-driver cargo-clippy )
-       use miri && symlinks+=( miri cargo-miri )
+       if [[ ${PV} = *9999* ]]; then
+               use miri && symlinks+=( miri cargo-miri )
+       fi
        use rustfmt && symlinks+=( rustfmt cargo-fmt )
        use rust-analyzer && symlinks+=( rust-analyzer )
 
@@ -627,34 +722,34 @@ src_install() {
                # we need realpath on /usr/bin/* symlink return 
version-appended binary path.
                # so /usr/bin/rustc should point to 
/usr/lib/rust/<ver>/bin/rustc-<ver>
                # need to fix eselect-rust to remove this hack.
-               local ver_i="${i}-${PV}"
-               if [[ -f "${ED}/usr/lib/${PN}/${PV}/bin/${i}" ]]; then
+               local ver_i="${i}-${PV%%_*}"
+               if [[ -f "${ED}/usr/lib/${PN}/${SLOT}/bin/${i}" ]]; then
                        einfo "Installing ${i} symlink"
-                       ln -v "${ED}/usr/lib/${PN}/${PV}/bin/${i}" 
"${ED}/usr/lib/${PN}/${PV}/bin/${ver_i}" || die
+                       ln -v "${ED}/usr/lib/${PN}/${SLOT}/bin/${i}" 
"${ED}/usr/lib/${PN}/${SLOT}/bin/${ver_i}" || die
                else
                        ewarn "${i} symlink requested, but source file not 
found"
                        ewarn "please report this"
                fi
-               dosym "../lib/${PN}/${PV}/bin/${ver_i}" "/usr/bin/${ver_i}"
+               dosym "../lib/${PN}/${SLOT}/bin/${ver_i}" "/usr/bin/${ver_i}"
        done
 
        # symlinks to switch components to active rust in eselect
-       dosym "${PV}/lib" "/usr/lib/${PN}/lib-${PV}"
-       use rust-analyzer && dosym "${PV}/libexec" 
"/usr/lib/${PN}/libexec-${PV}"
-       dosym "${PV}/share/man" "/usr/lib/${PN}/man-${PV}"
-       dosym "rust/${PV}/lib/rustlib" "/usr/lib/rustlib-${PV}"
-       dosym "../../lib/${PN}/${PV}/share/doc/rust" "/usr/share/doc/${P}"
+       dosym "${SLOT}/lib" "/usr/lib/${PN}/lib-${SLOT}"
+       use rust-analyzer && dosym "${SLOT}/libexec" 
"/usr/lib/${PN}/libexec-${SLOT}"
+       dosym "${SLOT}/share/man" "/usr/lib/${PN}/man-${SLOT}"
+       dosym "rust/${SLOT}/lib/rustlib" "/usr/lib/rustlib-${SLOT}"
+       dosym "../../lib/${PN}/${SLOT}/share/doc/rust" "/usr/share/doc/${P}"
 
        newenvd - "50${P}" <<-_EOF_
-               MANPATH="${EPREFIX}/usr/lib/rust/man-${PV}"
+               MANPATH="${EPREFIX}/usr/lib/rust/man-${SLOT}"
        _EOF_
 
-       rm -rf "${ED}/usr/lib/${PN}/${PV}"/*.old || die
-       rm -rf "${ED}/usr/lib/${PN}/${PV}/bin"/*.old || die
-       rm -rf "${ED}/usr/lib/${PN}/${PV}/doc"/*.old || die
+       rm -rf "${ED}/usr/lib/${PN}/${SLOT}"/*.old || die
+       rm -rf "${ED}/usr/lib/${PN}/${SLOT}/bin"/*.old || die
+       rm -rf "${ED}/usr/lib/${PN}/${SLOT}/doc"/*.old || die
 
        # note: eselect-rust adds EROOT to all paths below
-       cat <<-_EOF_ > "${T}/provider-${P}"
+       cat <<-_EOF_ > "${T}/provider-${PN}-${SLOT}"
                /usr/bin/cargo
                /usr/bin/rustdoc
                /usr/bin/rust-gdb
@@ -670,7 +765,7 @@ src_install() {
                echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
                echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
        fi
-       if use miri; then
+       if [[ ${SLOT} == *9999* ]] && use miri; then
                echo /usr/bin/miri >> "${T}/provider-${P}"
                echo /usr/bin/cargo-miri >> "${T}/provider-${P}"
        fi
@@ -684,11 +779,11 @@ src_install() {
        fi
 
        insinto /etc/env.d/rust
-       doins "${T}/provider-${P}"
+       doins "${T}/provider-${PN}-${SLOT}"
 
        if use dist; then
                "${EPYTHON}" ./x.py dist -vv --config="${S}"/config.toml 
-j$(makeopts_jobs) || die
-               insinto "/usr/lib/${PN}/${PV}/dist"
+               insinto "/usr/lib/${PN}/${SLOT}/dist"
                doins -r "${S}/build/dist/."
        fi
 }

Reply via email to