public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Matt Jolly" <kangie@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-lang/rust-bin/
Date: Mon,  9 Dec 2024 05:01:31 +0000 (UTC)	[thread overview]
Message-ID: <1733719782.0a2e3e056ba70d19df59f2a22a44e3a53abe933e.kangie@gentoo> (raw)

commit:     0a2e3e056ba70d19df59f2a22a44e3a53abe933e
Author:     mojyack <mojyack <AT> gmail <DOT> com>
AuthorDate: Thu Nov 28 01:59:18 2024 +0000
Commit:     Matt Jolly <kangie <AT> gentoo <DOT> org>
CommitDate: Mon Dec  9 04:49:42 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0a2e3e05

dev-lang/rust-bin: remove hard gcc dependency

Instead of depending to gcc, patch binaries to use libunwind.so when
`llvm-libunwind` USE flag is enabled.

Signed-off-by: mojyack <mojyack <AT> gmail.com>
Closes: https://bugs.gentoo.org/944835
Closes: https://github.com/gentoo/gentoo/pull/39495
Signed-off-by: Matt Jolly <kangie <AT> gentoo.org>

 dev-lang/rust-bin/rust-bin-1.71.1-r101.ebuild | 245 ++++++++++++++++++++++++
 dev-lang/rust-bin/rust-bin-1.74.1-r101.ebuild | 255 +++++++++++++++++++++++++
 dev-lang/rust-bin/rust-bin-1.75.0-r101.ebuild | 255 +++++++++++++++++++++++++
 dev-lang/rust-bin/rust-bin-1.77.1-r101.ebuild | 257 +++++++++++++++++++++++++
 dev-lang/rust-bin/rust-bin-1.79.0-r101.ebuild | 260 +++++++++++++++++++++++++
 dev-lang/rust-bin/rust-bin-1.80.1-r101.ebuild | 264 ++++++++++++++++++++++++++
 dev-lang/rust-bin/rust-bin-1.81.0-r101.ebuild | 262 +++++++++++++++++++++++++
 dev-lang/rust-bin/rust-bin-1.82.0-r101.ebuild | 264 ++++++++++++++++++++++++++
 8 files changed, 2062 insertions(+)

diff --git a/dev-lang/rust-bin/rust-bin-1.71.1-r101.ebuild b/dev-lang/rust-bin/rust-bin-1.71.1-r101.ebuild
new file mode 100644
index 000000000000..24a7ad979aca
--- /dev/null
+++ b/dev-lang/rust-bin/rust-bin-1.71.1-r101.ebuild
@@ -0,0 +1,245 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LLVM_COMPAT=( 16 )
+LLVM_OPTIONAL="yes"
+
+inherit llvm-r1 multilib prefix rust-toolchain toolchain-funcs verify-sig multilib-minimal
+
+MY_P="rust-${PV}"
+# curl -L static.rust-lang.org/dist/channel-rust-${PV}.toml 2>/dev/null | grep "xz_url.*rust-src"
+MY_SRC_URI="${RUST_TOOLCHAIN_BASEURL%/}/2023-08-03/rust-src-${PV}.tar.xz"
+GENTOO_BIN_BASEURI="https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}" # omit leading slash
+
+DESCRIPTION="Language empowering everyone to build reliable and efficient software"
+HOMEPAGE="https://www.rust-lang.org/"
+SRC_URI="$(rust_all_arch_uris ${MY_P})
+	rust-src? ( ${MY_SRC_URI} )
+"
+# Keep this separate to allow easy commenting out if not yet built
+SRC_URI+=" sparc? ( ${GENTOO_BIN_BASEURI}/${MY_P}-sparc64-unknown-linux-gnu.tar.xz -> ${MY_P}-sparc64-unknown-linux-gnu.sam.tar.xz ) "
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4 UoI-NCSA"
+SLOT="${PV}"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="big-endian clippy cpu_flags_x86_sse2 doc prefix llvm-libunwind rust-analyzer rust-src rustfmt"
+
+RDEPEND="
+	>=app-eselect/eselect-rust-20190311
+	dev-libs/openssl
+	sys-apps/lsb-release
+	!llvm-libunwind? ( sys-devel/gcc:* )
+	!dev-lang/rust:stable
+	!dev-lang/rust-bin:stable
+"
+BDEPEND="
+	prefix? ( dev-util/patchelf )
+	llvm-libunwind? ( dev-util/patchelf )
+	verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
+
+# stripping rust may break it (at least on x86_64)
+# https://github.com/rust-lang/rust/issues/112286
+RESTRICT="strip"
+
+QA_PREBUILT="
+	opt/${P}/bin/.*
+	opt/${P}/lib/.*.so
+	opt/${P}/libexec/.*
+	opt/${P}/lib/rustlib/.*/bin/.*
+	opt/${P}/lib/rustlib/.*/lib/.*
+"
+
+# 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="opt/${P}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/rust.asc"
+
+pkg_pretend() {
+	if [[ "$(tc-is-softfloat)" != "no" ]] && [[ ${CHOST} == armv7* ]]; then
+		die "${CHOST} is not supported by upstream Rust. You must use a hard float version."
+	fi
+}
+
+src_unpack() {
+	# sadly rust-src tarball does not have corresponding .asc file
+	# so do partial verification
+	if use verify-sig; then
+		for f in ${A}; do
+			if [[ -f ${DISTDIR}/${f}.asc ]]; then
+				verify-sig_verify_detached "${DISTDIR}/${f}" "${DISTDIR}/${f}.asc"
+			fi
+		done
+	fi
+
+	default_src_unpack
+
+	mv "${WORKDIR}/${MY_P}-$(rust_abi)" "${S}" || die
+}
+
+patchelf_for_bin() {
+	local filetype=$(file -b ${1})
+	if [[ ${filetype} == *ELF*interpreter* ]]; then
+		einfo "${1}'s interpreter changed"
+		patchelf ${1} --set-interpreter ${2} || die
+	elif [[ ${filetype} == *script* ]]; then
+		hprefixify ${1}
+	fi
+}
+
+multilib_src_install() {
+	if multilib_is_native_abi; then
+
+	# start native abi install
+	pushd "${S}" >/dev/null || die
+	local analysis std
+	analysis="$(grep 'analysis' ./components)"
+	std="$(grep 'std' ./components)"
+	local components="rustc,cargo,${std}"
+	use doc && components="${components},rust-docs"
+	use clippy && components="${components},clippy-preview"
+	use rustfmt && components="${components},rustfmt-preview"
+	use rust-analyzer && components="${components},rust-analyzer-preview,${analysis}"
+	# Rust component 'rust-src' is extracted from separate archive
+	if use rust-src; then
+		einfo "Combining rust and rust-src installers"
+		mv -v "${WORKDIR}/rust-src-${PV}/rust-src" "${S}" || die
+		echo rust-src >> ./components || die
+		components="${components},rust-src"
+	fi
+	./install.sh \
+		--components="${components}" \
+		--disable-verify \
+		--prefix="${ED}/opt/${P}" \
+		--mandir="${ED}/opt/${P}/man" \
+		--disable-ldconfig \
+		|| die
+
+	if use prefix; then
+		local interpreter=$(patchelf --print-interpreter "${EPREFIX}/bin/bash")
+		ebegin "Changing interpreter to ${interpreter} for Gentoo prefix at ${ED}/opt/${P}/bin"
+		find "${ED}/opt/${P}/bin" -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				patchelf_for_bin ${filename} ${interpreter} \; || die
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	if use llvm-libunwind; then
+		ebegin "Replacing libgcc_s with libunwind"
+		find "${ED}/opt/${P}"/{bin,lib,libexec} -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				# just ignore wrong filetype error, instead of checking redundantly
+				patchelf --replace-needed libgcc_s.so.1 libunwind.so.1 ${filename} 2>/dev/null
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	local symlinks=(
+		cargo
+		rustc
+		rustdoc
+		rust-gdb
+		rust-gdbgui
+		rust-lldb
+	)
+
+	use clippy && symlinks+=( clippy-driver cargo-clippy )
+	use rustfmt && symlinks+=( rustfmt cargo-fmt )
+	use rust-analyzer && symlinks+=( rust-analyzer )
+
+	einfo "installing eselect-rust symlinks and paths"
+	local i
+	for i in "${symlinks[@]}"; do
+		# we need realpath on /usr/bin/* symlink return version-appended binary path.
+		# so /usr/bin/rustc should point to /opt/rust-bin-<ver>/bin/rustc-<ver>
+		local ver_i="${i}-bin-${PV}"
+		ln -v "${ED}/opt/${P}/bin/${i}" "${ED}/opt/${P}/bin/${ver_i}" || die
+		dosym "../../opt/${P}/bin/${ver_i}" "/usr/bin/${ver_i}"
+	done
+
+	# symlinks to switch components to active rust in eselect
+	dosym "../../../opt/${P}/lib" "/usr/lib/rust/lib-bin-${PV}"
+	dosym "../../../opt/${P}/man" "/usr/lib/rust/man-bin-${PV}"
+	dosym "../../opt/${P}/lib/rustlib" "/usr/lib/rustlib-bin-${PV}"
+	dosym "../../../opt/${P}/share/doc/rust" "/usr/share/doc/${P}"
+
+	# make all capital underscored variable
+	local CARGO_TRIPLET="$(rust_abi)"
+	CARGO_TRIPLET="${CARGO_TRIPLET//-/_}"
+	CARGO_TRIPLET="${CARGO_TRIPLET^^}"
+	cat <<-_EOF_ > "${T}/50${P}"
+	LDPATH="${EPREFIX}/usr/lib/rust/lib-bin-${PV}"
+	MANPATH="${EPREFIX}/usr/lib/rust/man-bin-${PV}"
+	$(usev elibc_musl "CARGO_TARGET_${CARGO_TRIPLET}_RUSTFLAGS=\"-C target-feature=-crt-static\"")
+	_EOF_
+	doenvd "${T}/50${P}"
+
+	# note: eselect-rust adds EROOT to all paths below
+	cat <<-_EOF_ > "${T}/provider-${P}"
+	/usr/bin/cargo
+	/usr/bin/rustdoc
+	/usr/bin/rust-gdb
+	/usr/bin/rust-gdbgui
+	/usr/bin/rust-lldb
+	/usr/lib/rustlib
+	/usr/lib/rust/lib
+	/usr/lib/rust/man
+	/usr/share/doc/rust
+	_EOF_
+
+	if use clippy; then
+		echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+	fi
+	if use rustfmt; then
+		echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+	fi
+	if use rust-analyzer; then
+		echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+	fi
+
+	insinto /etc/env.d/rust
+	doins "${T}/provider-${P}"
+	popd >/dev/null || die
+	#end native abi install
+
+	else
+		local rust_target
+		rust_target="$(rust_abi $(get_abi_CHOST ${v##*.}))"
+		dodir "/opt/${P}/lib/rustlib"
+		cp -vr "${WORKDIR}/rust-${PV}-${rust_target}/rust-std-${rust_target}/lib/rustlib/${rust_target}"\
+			"${ED}/opt/${P}/lib/rustlib" || die
+	fi
+
+	# BUG: installs x86_64 binary on other arches
+	rm -f "${ED}/opt/${P}/lib/rustlib/"*/bin/rust-llvm-dwp || die
+}
+
+pkg_postinst() {
+	eselect rust update
+
+	if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+		elog "Rust installs helper scripts for calling GDB and LLDB,"
+		elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+	fi
+
+	if has_version app-editors/emacs; then
+		elog "install app-emacs/rust-mode to get emacs support for rust."
+	fi
+
+	if has_version app-editors/gvim || has_version app-editors/vim; then
+		elog "install app-vim/rust-vim to get vim support for rust."
+	fi
+}
+
+pkg_postrm() {
+	eselect rust cleanup
+}

diff --git a/dev-lang/rust-bin/rust-bin-1.74.1-r101.ebuild b/dev-lang/rust-bin/rust-bin-1.74.1-r101.ebuild
new file mode 100644
index 000000000000..e0d8ca8a8c96
--- /dev/null
+++ b/dev-lang/rust-bin/rust-bin-1.74.1-r101.ebuild
@@ -0,0 +1,255 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LLVM_COMPAT=( 17 )
+LLVM_OPTIONAL="yes"
+
+inherit llvm-r1 multilib prefix rust-toolchain toolchain-funcs verify-sig multilib-minimal
+
+MY_P="rust-${PV}"
+# curl -L static.rust-lang.org/dist/channel-rust-${PV}.toml 2>/dev/null | grep "xz_url.*rust-src"
+MY_SRC_URI="${RUST_TOOLCHAIN_BASEURL%/}/2023-12-07/rust-src-${PV}.tar.xz"
+GENTOO_BIN_BASEURI="https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}" # omit leading slash
+
+DESCRIPTION="Language empowering everyone to build reliable and efficient software"
+HOMEPAGE="https://www.rust-lang.org/"
+SRC_URI="$(rust_all_arch_uris ${MY_P})
+	rust-src? ( ${MY_SRC_URI} )
+"
+# Keep this separate to allow easy commenting out if not yet built
+SRC_URI+=" sparc? ( ${GENTOO_BIN_BASEURI}/${MY_P}-sparc64-unknown-linux-gnu.tar.xz ) "
+#SRC_URI+=" mips? (
+#	abi_mips_o32? (
+#		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips-unknown-linux-gnu.tar.xz )
+#		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mipsel-unknown-linux-gnu.tar.xz )
+#	)
+#	abi_mips_n64? (
+#		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64-unknown-linux-gnuabi64.tar.xz )
+#		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64el-unknown-linux-gnuabi64.tar.xz )
+#	)
+#)"
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
+SLOT="${PV}"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="big-endian clippy cpu_flags_x86_sse2 doc prefix llvm-libunwind rust-analyzer rust-src rustfmt"
+
+RDEPEND="
+	>=app-eselect/eselect-rust-20190311
+	dev-libs/openssl
+	sys-apps/lsb-release
+	!llvm-libunwind? ( sys-devel/gcc:* )
+	!dev-lang/rust:stable
+	!dev-lang/rust-bin:stable
+"
+BDEPEND="
+	prefix? ( dev-util/patchelf )
+	llvm-libunwind? ( dev-util/patchelf )
+	verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
+
+# stripping rust may break it (at least on x86_64)
+# https://github.com/rust-lang/rust/issues/112286
+RESTRICT="strip"
+
+QA_PREBUILT="
+	opt/${P}/bin/.*
+	opt/${P}/lib/.*.so
+	opt/${P}/libexec/.*
+	opt/${P}/lib/rustlib/.*/bin/.*
+	opt/${P}/lib/rustlib/.*/lib/.*
+"
+
+# 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="opt/${P}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/rust.asc"
+
+pkg_pretend() {
+	if [[ "$(tc-is-softfloat)" != "no" ]] && [[ ${CHOST} == armv7* ]]; then
+		die "${CHOST} is not supported by upstream Rust. You must use a hard float version."
+	fi
+}
+
+src_unpack() {
+	# sadly rust-src tarball does not have corresponding .asc file
+	# so do partial verification
+	if use verify-sig; then
+		for f in ${A}; do
+			if [[ -f ${DISTDIR}/${f}.asc ]]; then
+				verify-sig_verify_detached "${DISTDIR}/${f}" "${DISTDIR}/${f}.asc"
+			fi
+		done
+	fi
+
+	default_src_unpack
+
+	mv "${WORKDIR}/${MY_P}-$(rust_abi)" "${S}" || die
+}
+
+patchelf_for_bin() {
+	local filetype=$(file -b ${1})
+	if [[ ${filetype} == *ELF*interpreter* ]]; then
+		einfo "${1}'s interpreter changed"
+		patchelf ${1} --set-interpreter ${2} || die
+	elif [[ ${filetype} == *script* ]]; then
+		hprefixify ${1}
+	fi
+}
+
+multilib_src_install() {
+	if multilib_is_native_abi; then
+
+	# start native abi install
+	pushd "${S}" >/dev/null || die
+	local analysis std
+	analysis="$(grep 'analysis' ./components)"
+	std="$(grep 'std' ./components)"
+	local components="rustc,cargo,${std}"
+	use doc && components="${components},rust-docs"
+	use clippy && components="${components},clippy-preview"
+	use rustfmt && components="${components},rustfmt-preview"
+	use rust-analyzer && components="${components},rust-analyzer-preview,${analysis}"
+	# Rust component 'rust-src' is extracted from separate archive
+	if use rust-src; then
+		einfo "Combining rust and rust-src installers"
+		mv -v "${WORKDIR}/rust-src-${PV}/rust-src" "${S}" || die
+		echo rust-src >> ./components || die
+		components="${components},rust-src"
+	fi
+	./install.sh \
+		--components="${components}" \
+		--disable-verify \
+		--prefix="${ED}/opt/${P}" \
+		--mandir="${ED}/opt/${P}/man" \
+		--disable-ldconfig \
+		|| die
+
+	if use prefix; then
+		local interpreter=$(patchelf --print-interpreter "${EPREFIX}/bin/bash")
+		ebegin "Changing interpreter to ${interpreter} for Gentoo prefix at ${ED}/opt/${P}/bin"
+		find "${ED}/opt/${P}/bin" -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				patchelf_for_bin ${filename} ${interpreter} \; || die
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	if use llvm-libunwind; then
+		ebegin "Replacing libgcc_s with libunwind"
+		find "${ED}/opt/${P}"/{bin,lib,libexec} -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				# just ignore wrong filetype error, instead of checking redundantly
+				patchelf --replace-needed libgcc_s.so.1 libunwind.so.1 ${filename} 2>/dev/null
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	local symlinks=(
+		cargo
+		rustc
+		rustdoc
+		rust-gdb
+		rust-gdbgui
+		rust-lldb
+	)
+
+	use clippy && symlinks+=( clippy-driver cargo-clippy )
+	use rustfmt && symlinks+=( rustfmt cargo-fmt )
+	use rust-analyzer && symlinks+=( rust-analyzer )
+
+	einfo "installing eselect-rust symlinks and paths"
+	local i
+	for i in "${symlinks[@]}"; do
+		# we need realpath on /usr/bin/* symlink return version-appended binary path.
+		# so /usr/bin/rustc should point to /opt/rust-bin-<ver>/bin/rustc-<ver>
+		local ver_i="${i}-bin-${PV}"
+		ln -v "${ED}/opt/${P}/bin/${i}" "${ED}/opt/${P}/bin/${ver_i}" || die
+		dosym "../../opt/${P}/bin/${ver_i}" "/usr/bin/${ver_i}"
+	done
+
+	# symlinks to switch components to active rust in eselect
+	dosym "../../../opt/${P}/lib" "/usr/lib/rust/lib-bin-${PV}"
+	dosym "../../../opt/${P}/man" "/usr/lib/rust/man-bin-${PV}"
+	dosym "../../opt/${P}/lib/rustlib" "/usr/lib/rustlib-bin-${PV}"
+	dosym "../../../opt/${P}/share/doc/rust" "/usr/share/doc/${P}"
+
+	# make all capital underscored variable
+	local CARGO_TRIPLET="$(rust_abi)"
+	CARGO_TRIPLET="${CARGO_TRIPLET//-/_}"
+	CARGO_TRIPLET="${CARGO_TRIPLET^^}"
+	cat <<-_EOF_ > "${T}/50${P}"
+	LDPATH="${EPREFIX}/usr/lib/rust/lib-bin-${PV}"
+	MANPATH="${EPREFIX}/usr/lib/rust/man-bin-${PV}"
+	$(usev elibc_musl "CARGO_TARGET_${CARGO_TRIPLET}_RUSTFLAGS=\"-C target-feature=-crt-static\"")
+	_EOF_
+	doenvd "${T}/50${P}"
+
+	# note: eselect-rust adds EROOT to all paths below
+	cat <<-_EOF_ > "${T}/provider-${P}"
+	/usr/bin/cargo
+	/usr/bin/rustdoc
+	/usr/bin/rust-gdb
+	/usr/bin/rust-gdbgui
+	/usr/bin/rust-lldb
+	/usr/lib/rustlib
+	/usr/lib/rust/lib
+	/usr/lib/rust/man
+	/usr/share/doc/rust
+	_EOF_
+
+	if use clippy; then
+		echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+	fi
+	if use rustfmt; then
+		echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+	fi
+	if use rust-analyzer; then
+		echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+	fi
+
+	insinto /etc/env.d/rust
+	doins "${T}/provider-${P}"
+	popd >/dev/null || die
+	#end native abi install
+
+	else
+		local rust_target
+		rust_target="$(rust_abi $(get_abi_CHOST ${v##*.}))"
+		dodir "/opt/${P}/lib/rustlib"
+		cp -vr "${WORKDIR}/rust-${PV}-${rust_target}/rust-std-${rust_target}/lib/rustlib/${rust_target}"\
+			"${ED}/opt/${P}/lib/rustlib" || die
+	fi
+
+	# BUG: installs x86_64 binary on other arches
+	rm -f "${ED}/opt/${P}/lib/rustlib/"*/bin/rust-llvm-dwp || die
+}
+
+pkg_postinst() {
+	eselect rust update
+
+	if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+		elog "Rust installs helper scripts for calling GDB and LLDB,"
+		elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+	fi
+
+	if has_version app-editors/emacs; then
+		elog "install app-emacs/rust-mode to get emacs support for rust."
+	fi
+
+	if has_version app-editors/gvim || has_version app-editors/vim; then
+		elog "install app-vim/rust-vim to get vim support for rust."
+	fi
+}
+
+pkg_postrm() {
+	eselect rust cleanup
+}

diff --git a/dev-lang/rust-bin/rust-bin-1.75.0-r101.ebuild b/dev-lang/rust-bin/rust-bin-1.75.0-r101.ebuild
new file mode 100644
index 000000000000..a1de6b232931
--- /dev/null
+++ b/dev-lang/rust-bin/rust-bin-1.75.0-r101.ebuild
@@ -0,0 +1,255 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LLVM_COMPAT=( 17 )
+LLVM_OPTIONAL="yes"
+
+inherit llvm-r1 multilib prefix rust-toolchain toolchain-funcs verify-sig multilib-minimal
+
+MY_P="rust-${PV}"
+# curl -L static.rust-lang.org/dist/channel-rust-${PV}.toml 2>/dev/null | grep "xz_url.*rust-src"
+MY_SRC_URI="${RUST_TOOLCHAIN_BASEURL%/}/2023-12-28/rust-src-${PV}.tar.xz"
+GENTOO_BIN_BASEURI="https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}" # omit leading slash
+
+DESCRIPTION="Language empowering everyone to build reliable and efficient software"
+HOMEPAGE="https://www.rust-lang.org/"
+SRC_URI="$(rust_all_arch_uris ${MY_P})
+	rust-src? ( ${MY_SRC_URI} )
+"
+# Keep this separate to allow easy commenting out if not yet built
+SRC_URI+=" sparc? ( ${GENTOO_BIN_BASEURI}/${MY_P}-sparc64-unknown-linux-gnu.tar.xz ) "
+#SRC_URI+=" mips? (
+#	abi_mips_o32? (
+#		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips-unknown-linux-gnu.tar.xz )
+#		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mipsel-unknown-linux-gnu.tar.xz )
+#	)
+#	abi_mips_n64? (
+#		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64-unknown-linux-gnuabi64.tar.xz )
+#		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64el-unknown-linux-gnuabi64.tar.xz )
+#	)
+#)"
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
+SLOT="${PV}"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="big-endian clippy cpu_flags_x86_sse2 doc prefix llvm-libunwind rust-analyzer rust-src rustfmt"
+
+RDEPEND="
+	>=app-eselect/eselect-rust-20190311
+	dev-libs/openssl
+	sys-apps/lsb-release
+	!llvm-libunwind? ( sys-devel/gcc:* )
+	!dev-lang/rust:stable
+	!dev-lang/rust-bin:stable
+"
+BDEPEND="
+	prefix? ( dev-util/patchelf )
+	llvm-libunwind? ( dev-util/patchelf )
+	verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
+
+# stripping rust may break it (at least on x86_64)
+# https://github.com/rust-lang/rust/issues/112286
+RESTRICT="strip"
+
+QA_PREBUILT="
+	opt/${P}/bin/.*
+	opt/${P}/lib/.*.so
+	opt/${P}/libexec/.*
+	opt/${P}/lib/rustlib/.*/bin/.*
+	opt/${P}/lib/rustlib/.*/lib/.*
+"
+
+# 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="opt/${P}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/rust.asc"
+
+pkg_pretend() {
+	if [[ "$(tc-is-softfloat)" != "no" ]] && [[ ${CHOST} == armv7* ]]; then
+		die "${CHOST} is not supported by upstream Rust. You must use a hard float version."
+	fi
+}
+
+src_unpack() {
+	# sadly rust-src tarball does not have corresponding .asc file
+	# so do partial verification
+	if use verify-sig; then
+		for f in ${A}; do
+			if [[ -f ${DISTDIR}/${f}.asc ]]; then
+				verify-sig_verify_detached "${DISTDIR}/${f}" "${DISTDIR}/${f}.asc"
+			fi
+		done
+	fi
+
+	default_src_unpack
+
+	mv "${WORKDIR}/${MY_P}-$(rust_abi)" "${S}" || die
+}
+
+patchelf_for_bin() {
+	local filetype=$(file -b ${1})
+	if [[ ${filetype} == *ELF*interpreter* ]]; then
+		einfo "${1}'s interpreter changed"
+		patchelf ${1} --set-interpreter ${2} || die
+	elif [[ ${filetype} == *script* ]]; then
+		hprefixify ${1}
+	fi
+}
+
+multilib_src_install() {
+	if multilib_is_native_abi; then
+
+	# start native abi install
+	pushd "${S}" >/dev/null || die
+	local analysis std
+	analysis="$(grep 'analysis' ./components)"
+	std="$(grep 'std' ./components)"
+	local components="rustc,cargo,${std}"
+	use doc && components="${components},rust-docs"
+	use clippy && components="${components},clippy-preview"
+	use rustfmt && components="${components},rustfmt-preview"
+	use rust-analyzer && components="${components},rust-analyzer-preview,${analysis}"
+	# Rust component 'rust-src' is extracted from separate archive
+	if use rust-src; then
+		einfo "Combining rust and rust-src installers"
+		mv -v "${WORKDIR}/rust-src-${PV}/rust-src" "${S}" || die
+		echo rust-src >> ./components || die
+		components="${components},rust-src"
+	fi
+	./install.sh \
+		--components="${components}" \
+		--disable-verify \
+		--prefix="${ED}/opt/${P}" \
+		--mandir="${ED}/opt/${P}/man" \
+		--disable-ldconfig \
+		|| die
+
+	if use prefix; then
+		local interpreter=$(patchelf --print-interpreter "${EPREFIX}"/bin/bash)
+		ebegin "Changing interpreter to ${interpreter} for Gentoo prefix at ${ED}/opt/${P}/bin"
+		find "${ED}/opt/${P}/bin" -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				patchelf_for_bin ${filename} ${interpreter} \; || die
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	if use llvm-libunwind; then
+		ebegin "Replacing libgcc_s with libunwind"
+		find "${ED}/opt/${P}"/{bin,lib,libexec} -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				# just ignore wrong filetype error, instead of checking redundantly
+				patchelf --replace-needed libgcc_s.so.1 libunwind.so.1 ${filename} 2>/dev/null
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	local symlinks=(
+		cargo
+		rustc
+		rustdoc
+		rust-gdb
+		rust-gdbgui
+		rust-lldb
+	)
+
+	use clippy && symlinks+=( clippy-driver cargo-clippy )
+	use rustfmt && symlinks+=( rustfmt cargo-fmt )
+	use rust-analyzer && symlinks+=( rust-analyzer )
+
+	einfo "installing eselect-rust symlinks and paths"
+	local i
+	for i in "${symlinks[@]}"; do
+		# we need realpath on /usr/bin/* symlink return version-appended binary path.
+		# so /usr/bin/rustc should point to /opt/rust-bin-<ver>/bin/rustc-<ver>
+		local ver_i="${i}-bin-${PV}"
+		ln -v "${ED}/opt/${P}/bin/${i}" "${ED}/opt/${P}/bin/${ver_i}" || die
+		dosym "../../opt/${P}/bin/${ver_i}" "/usr/bin/${ver_i}"
+	done
+
+	# symlinks to switch components to active rust in eselect
+	dosym "../../../opt/${P}/lib" "/usr/lib/rust/lib-bin-${PV}"
+	dosym "../../../opt/${P}/man" "/usr/lib/rust/man-bin-${PV}"
+	dosym "../../opt/${P}/lib/rustlib" "/usr/lib/rustlib-bin-${PV}"
+	dosym "../../../opt/${P}/share/doc/rust" "/usr/share/doc/${P}"
+
+	# make all capital underscored variable
+	local CARGO_TRIPLET="$(rust_abi)"
+	CARGO_TRIPLET="${CARGO_TRIPLET//-/_}"
+	CARGO_TRIPLET="${CARGO_TRIPLET^^}"
+	cat <<-_EOF_ > "${T}/50${P}"
+	LDPATH="${EPREFIX}/usr/lib/rust/lib-bin-${PV}"
+	MANPATH="${EPREFIX}/usr/lib/rust/man-bin-${PV}"
+	$(usev elibc_musl "CARGO_TARGET_${CARGO_TRIPLET}_RUSTFLAGS=\"-C target-feature=-crt-static\"")
+	_EOF_
+	doenvd "${T}/50${P}"
+
+	# note: eselect-rust adds EROOT to all paths below
+	cat <<-_EOF_ > "${T}/provider-${P}"
+	/usr/bin/cargo
+	/usr/bin/rustdoc
+	/usr/bin/rust-gdb
+	/usr/bin/rust-gdbgui
+	/usr/bin/rust-lldb
+	/usr/lib/rustlib
+	/usr/lib/rust/lib
+	/usr/lib/rust/man
+	/usr/share/doc/rust
+	_EOF_
+
+	if use clippy; then
+		echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+	fi
+	if use rustfmt; then
+		echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+	fi
+	if use rust-analyzer; then
+		echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+	fi
+
+	insinto /etc/env.d/rust
+	doins "${T}/provider-${P}"
+	popd >/dev/null || die
+	#end native abi install
+
+	else
+		local rust_target
+		rust_target="$(rust_abi $(get_abi_CHOST ${v##*.}))"
+		dodir "/opt/${P}/lib/rustlib"
+		cp -vr "${WORKDIR}/rust-${PV}-${rust_target}/rust-std-${rust_target}/lib/rustlib/${rust_target}"\
+			"${ED}/opt/${P}/lib/rustlib" || die
+	fi
+
+	# BUG: installs x86_64 binary on other arches
+	rm -f "${ED}/opt/${P}/lib/rustlib/"*/bin/rust-llvm-dwp || die
+}
+
+pkg_postinst() {
+	eselect rust update
+
+	if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+		elog "Rust installs helper scripts for calling GDB and LLDB,"
+		elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+	fi
+
+	if has_version app-editors/emacs; then
+		elog "install app-emacs/rust-mode to get emacs support for rust."
+	fi
+
+	if has_version app-editors/gvim || has_version app-editors/vim; then
+		elog "install app-vim/rust-vim to get vim support for rust."
+	fi
+}
+
+pkg_postrm() {
+	eselect rust cleanup
+}

diff --git a/dev-lang/rust-bin/rust-bin-1.77.1-r101.ebuild b/dev-lang/rust-bin/rust-bin-1.77.1-r101.ebuild
new file mode 100644
index 000000000000..45ddf4664654
--- /dev/null
+++ b/dev-lang/rust-bin/rust-bin-1.77.1-r101.ebuild
@@ -0,0 +1,257 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LLVM_COMPAT=( 17 )
+LLVM_OPTIONAL="yes"
+
+inherit llvm-r1 multilib prefix rust-toolchain toolchain-funcs verify-sig multilib-minimal
+
+MY_P="rust-${PV}"
+# curl -L static.rust-lang.org/dist/channel-rust-${PV}.toml 2>/dev/null | grep "xz_url.*rust-src"
+MY_SRC_URI="${RUST_TOOLCHAIN_BASEURL%/}/2024-03-28/rust-src-${PV}.tar.xz"
+GENTOO_BIN_BASEURI="https://dev.gentoo.org/~arthurzam/distfiles/${CATEGORY}/${PN}" # omit leading slash
+
+DESCRIPTION="Systems programming language from Mozilla"
+HOMEPAGE="https://www.rust-lang.org/"
+SRC_URI="$(rust_all_arch_uris ${MY_P})
+	rust-src? ( ${MY_SRC_URI} )
+"
+# Keep this separate to allow easy commenting out if not yet built
+SRC_URI+=" sparc? ( ${GENTOO_BIN_BASEURI}/${MY_P}-sparc64-unknown-linux-gnu.tar.xz ) "
+SRC_URI+=" mips? (
+	abi_mips_o32? (
+		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips-unknown-linux-gnu.tar.xz )
+		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mipsel-unknown-linux-gnu.tar.xz )
+	)
+	abi_mips_n64? (
+		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64-unknown-linux-gnuabi64.tar.xz )
+		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64el-unknown-linux-gnuabi64.tar.xz )
+	)
+)"
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
+SLOT="${PV}"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="big-endian clippy cpu_flags_x86_sse2 doc prefix llvm-libunwind rust-analyzer rust-src rustfmt"
+
+RDEPEND="
+	>=app-eselect/eselect-rust-20190311
+	dev-libs/openssl
+	sys-apps/lsb-release
+	!llvm-libunwind? ( sys-devel/gcc:* )
+	!dev-lang/rust:stable
+	!dev-lang/rust-bin:stable
+"
+BDEPEND="
+	prefix? ( dev-util/patchelf )
+	llvm-libunwind? ( dev-util/patchelf )
+	verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
+
+# stripping rust may break it (at least on x86_64)
+# https://github.com/rust-lang/rust/issues/112286
+RESTRICT="strip"
+
+QA_PREBUILT="
+	opt/${P}/bin/.*
+	opt/${P}/lib/.*.so
+	opt/${P}/libexec/.*
+	opt/${P}/lib/rustlib/.*/bin/.*
+	opt/${P}/lib/rustlib/.*/lib/.*
+"
+
+# 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="opt/${P}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/rust.asc"
+
+pkg_pretend() {
+	if [[ "$(tc-is-softfloat)" != "no" ]] && [[ ${CHOST} == armv7* ]]; then
+		die "${CHOST} is not supported by upstream Rust. You must use a hard float version."
+	fi
+}
+
+src_unpack() {
+	# sadly rust-src tarball does not have corresponding .asc file
+	# so do partial verification
+	if use verify-sig; then
+		for f in ${A}; do
+			if [[ -f ${DISTDIR}/${f}.asc ]]; then
+				verify-sig_verify_detached "${DISTDIR}/${f}" "${DISTDIR}/${f}.asc"
+			fi
+		done
+	fi
+
+	default_src_unpack
+
+	mv "${WORKDIR}/${MY_P}-$(rust_abi)" "${S}" || die
+}
+
+patchelf_for_bin() {
+	local filetype=$(file -b ${1})
+	if [[ ${filetype} == *ELF*interpreter* ]]; then
+		einfo "${1}'s interpreter changed"
+		patchelf ${1} --set-interpreter ${2} || die
+	elif [[ ${filetype} == *script* ]]; then
+		hprefixify ${1}
+	fi
+}
+
+multilib_src_install() {
+	if multilib_is_native_abi; then
+
+	# start native abi install
+	pushd "${S}" >/dev/null || die
+	local analysis std
+	analysis="$(grep 'analysis' ./components)"
+	std="$(grep 'std' ./components)"
+	local components="rustc,cargo,rust-demangler-preview,${std}"
+	use doc && components="${components},rust-docs"
+	use clippy && components="${components},clippy-preview"
+	use rustfmt && components="${components},rustfmt-preview"
+	use rust-analyzer && components="${components},rust-analyzer-preview,${analysis}"
+	# Rust component 'rust-src' is extracted from separate archive
+	if use rust-src; then
+		einfo "Combining rust and rust-src installers"
+		mv -v "${WORKDIR}/rust-src-${PV}/rust-src" "${S}" || die
+		echo rust-src >> ./components || die
+		components="${components},rust-src"
+	fi
+	./install.sh \
+		--components="${components}" \
+		--disable-verify \
+		--prefix="${ED}/opt/${P}" \
+		--mandir="${ED}/opt/${P}/man" \
+		--disable-ldconfig \
+		|| die
+
+	if use prefix; then
+		local interpreter=$(patchelf --print-interpreter "${EPREFIX}"/bin/bash)
+		ebegin "Changing interpreter to ${interpreter} for Gentoo prefix at ${ED}/opt/${P}/bin"
+		find "${ED}/opt/${P}/bin" -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				patchelf_for_bin ${filename} ${interpreter} \; || die
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	if use llvm-libunwind; then
+		ebegin "Replacing libgcc_s with libunwind"
+		find "${ED}/opt/${P}"/{bin,lib,libexec} -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				# just ignore wrong filetype error, instead of checking redundantly
+				patchelf --replace-needed libgcc_s.so.1 libunwind.so.1 ${filename} 2>/dev/null
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	local symlinks=(
+		cargo
+		rustc
+		rustdoc
+		rust-demangler
+		rust-gdb
+		rust-gdbgui
+		rust-lldb
+	)
+
+	use clippy && symlinks+=( clippy-driver cargo-clippy )
+	use rustfmt && symlinks+=( rustfmt cargo-fmt )
+	use rust-analyzer && symlinks+=( rust-analyzer )
+
+	einfo "installing eselect-rust symlinks and paths"
+	local i
+	for i in "${symlinks[@]}"; do
+		# we need realpath on /usr/bin/* symlink return version-appended binary path.
+		# so /usr/bin/rustc should point to /opt/rust-bin-<ver>/bin/rustc-<ver>
+		local ver_i="${i}-bin-${PV}"
+		ln -v "${ED}/opt/${P}/bin/${i}" "${ED}/opt/${P}/bin/${ver_i}" || die
+		dosym "../../opt/${P}/bin/${ver_i}" "/usr/bin/${ver_i}"
+	done
+
+	# symlinks to switch components to active rust in eselect
+	dosym "../../../opt/${P}/lib" "/usr/lib/rust/lib-bin-${PV}"
+	dosym "../../../opt/${P}/man" "/usr/lib/rust/man-bin-${PV}"
+	dosym "../../opt/${P}/lib/rustlib" "/usr/lib/rustlib-bin-${PV}"
+	dosym "../../../opt/${P}/share/doc/rust" "/usr/share/doc/${P}"
+
+	# make all capital underscored variable
+	local CARGO_TRIPLET="$(rust_abi)"
+	CARGO_TRIPLET="${CARGO_TRIPLET//-/_}"
+	CARGO_TRIPLET="${CARGO_TRIPLET^^}"
+	cat <<-_EOF_ > "${T}/50${P}"
+	LDPATH="${EPREFIX}/usr/lib/rust/lib-bin-${PV}"
+	MANPATH="${EPREFIX}/usr/lib/rust/man-bin-${PV}"
+	$(usev elibc_musl "CARGO_TARGET_${CARGO_TRIPLET}_RUSTFLAGS=\"-C target-feature=-crt-static\"")
+	_EOF_
+	doenvd "${T}/50${P}"
+
+	# note: eselect-rust adds EROOT to all paths below
+	cat <<-_EOF_ > "${T}/provider-${P}"
+	/usr/bin/cargo
+	/usr/bin/rustdoc
+	/usr/bin/rust-demangler
+	/usr/bin/rust-gdb
+	/usr/bin/rust-gdbgui
+	/usr/bin/rust-lldb
+	/usr/lib/rustlib
+	/usr/lib/rust/lib
+	/usr/lib/rust/man
+	/usr/share/doc/rust
+	_EOF_
+
+	if use clippy; then
+		echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+	fi
+	if use rustfmt; then
+		echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+	fi
+	if use rust-analyzer; then
+		echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+	fi
+
+	insinto /etc/env.d/rust
+	doins "${T}/provider-${P}"
+	popd >/dev/null || die
+	#end native abi install
+
+	else
+		local rust_target
+		rust_target="$(rust_abi $(get_abi_CHOST ${v##*.}))"
+		dodir "/opt/${P}/lib/rustlib"
+		cp -vr "${WORKDIR}/rust-${PV}-${rust_target}/rust-std-${rust_target}/lib/rustlib/${rust_target}"\
+			"${ED}/opt/${P}/lib/rustlib" || die
+	fi
+
+	# BUG: installs x86_64 binary on other arches
+	rm -f "${ED}/opt/${P}/lib/rustlib/"*/bin/rust-llvm-dwp || die
+}
+
+pkg_postinst() {
+	eselect rust update
+
+	if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+		elog "Rust installs helper scripts for calling GDB and LLDB,"
+		elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+	fi
+
+	if has_version app-editors/emacs; then
+		elog "install app-emacs/rust-mode to get emacs support for rust."
+	fi
+
+	if has_version app-editors/gvim || has_version app-editors/vim; then
+		elog "install app-vim/rust-vim to get vim support for rust."
+	fi
+}
+
+pkg_postrm() {
+	eselect rust cleanup
+}

diff --git a/dev-lang/rust-bin/rust-bin-1.79.0-r101.ebuild b/dev-lang/rust-bin/rust-bin-1.79.0-r101.ebuild
new file mode 100644
index 000000000000..7915bafa7dde
--- /dev/null
+++ b/dev-lang/rust-bin/rust-bin-1.79.0-r101.ebuild
@@ -0,0 +1,260 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LLVM_COMPAT=( 18 )
+LLVM_OPTIONAL="yes"
+
+inherit llvm-r1 multilib prefix rust-toolchain toolchain-funcs verify-sig multilib-minimal
+
+MY_P="rust-${PV}"
+# curl -L static.rust-lang.org/dist/channel-rust-${PV}.toml 2>/dev/null | grep "xz_url.*rust-src"
+MY_SRC_URI="${RUST_TOOLCHAIN_BASEURL%/}/2024-06-13/rust-src-${PV}.tar.xz"
+GENTOO_BIN_BASEURI="https://dev.gentoo.org/~arthurzam/distfiles/${CATEGORY}/${PN}" # omit leading slash
+
+DESCRIPTION="Systems programming language from Mozilla"
+HOMEPAGE="https://www.rust-lang.org/"
+SRC_URI="$(rust_all_arch_uris ${MY_P})
+	rust-src? ( ${MY_SRC_URI} )
+"
+# Keep this separate to allow easy commenting out if not yet built
+SRC_URI+=" sparc? ( ${GENTOO_BIN_BASEURI}/${MY_P}-sparc64-unknown-linux-gnu.tar.xz ) "
+SRC_URI+=" mips? (
+	abi_mips_o32? (
+		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips-unknown-linux-gnu.tar.xz )
+		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mipsel-unknown-linux-gnu.tar.xz )
+	)
+	abi_mips_n64? (
+		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64-unknown-linux-gnuabi64.tar.xz )
+		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64el-unknown-linux-gnuabi64.tar.xz )
+	)
+)"
+SRC_URI+=" riscv? (
+	elibc_musl? ( ${GENTOO_BIN_BASEURI}/${MY_P}-riscv64gc-unknown-linux-musl.tar.xz )
+)"
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
+SLOT="${PV}"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="big-endian clippy cpu_flags_x86_sse2 doc prefix llvm-libunwind rust-analyzer rust-src rustfmt"
+
+RDEPEND="
+	>=app-eselect/eselect-rust-20190311
+	dev-libs/openssl
+	sys-apps/lsb-release
+	!llvm-libunwind? ( sys-devel/gcc:* )
+	!dev-lang/rust:stable
+	!dev-lang/rust-bin:stable
+"
+BDEPEND="
+	prefix? ( dev-util/patchelf )
+	llvm-libunwind? ( dev-util/patchelf )
+	verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
+
+# stripping rust may break it (at least on x86_64)
+# https://github.com/rust-lang/rust/issues/112286
+RESTRICT="strip"
+
+QA_PREBUILT="
+	opt/${P}/bin/.*
+	opt/${P}/lib/.*.so*
+	opt/${P}/libexec/.*
+	opt/${P}/lib/rustlib/.*/bin/.*
+	opt/${P}/lib/rustlib/.*/lib/.*
+"
+
+# 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="opt/${P}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/rust.asc"
+
+pkg_pretend() {
+	if [[ "$(tc-is-softfloat)" != "no" ]] && [[ ${CHOST} == armv7* ]]; then
+		die "${CHOST} is not supported by upstream Rust. You must use a hard float version."
+	fi
+}
+
+src_unpack() {
+	# sadly rust-src tarball does not have corresponding .asc file
+	# so do partial verification
+	if use verify-sig; then
+		for f in ${A}; do
+			if [[ -f ${DISTDIR}/${f}.asc ]]; then
+				verify-sig_verify_detached "${DISTDIR}/${f}" "${DISTDIR}/${f}.asc"
+			fi
+		done
+	fi
+
+	default_src_unpack
+
+	mv "${WORKDIR}/${MY_P}-$(rust_abi)" "${S}" || die
+}
+
+patchelf_for_bin() {
+	local filetype=$(file -b ${1})
+	if [[ ${filetype} == *ELF*interpreter* ]]; then
+		einfo "${1}'s interpreter changed"
+		patchelf ${1} --set-interpreter ${2} || die
+	elif [[ ${filetype} == *script* ]]; then
+		hprefixify ${1}
+	fi
+}
+
+multilib_src_install() {
+	if multilib_is_native_abi; then
+
+	# start native abi install
+	pushd "${S}" >/dev/null || die
+	local analysis std
+	analysis="$(grep 'analysis' ./components)"
+	std="$(grep 'std' ./components)"
+	local components="rustc,cargo,rust-demangler-preview,${std}"
+	use doc && components="${components},rust-docs"
+	use clippy && components="${components},clippy-preview"
+	use rustfmt && components="${components},rustfmt-preview"
+	use rust-analyzer && components="${components},rust-analyzer-preview,${analysis}"
+	# Rust component 'rust-src' is extracted from separate archive
+	if use rust-src; then
+		einfo "Combining rust and rust-src installers"
+		mv -v "${WORKDIR}/rust-src-${PV}/rust-src" "${S}" || die
+		echo rust-src >> ./components || die
+		components="${components},rust-src"
+	fi
+	./install.sh \
+		--components="${components}" \
+		--disable-verify \
+		--prefix="${ED}/opt/${P}" \
+		--mandir="${ED}/opt/${P}/man" \
+		--disable-ldconfig \
+		|| die
+
+	if use prefix; then
+		local interpreter=$(patchelf --print-interpreter "${EPREFIX}"/bin/bash)
+		ebegin "Changing interpreter to ${interpreter} for Gentoo prefix at ${ED}/opt/${P}/bin"
+		find "${ED}/opt/${P}/bin" -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				patchelf_for_bin ${filename} ${interpreter} \; || die
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	if use llvm-libunwind; then
+		ebegin "Replacing libgcc_s with libunwind"
+		find "${ED}/opt/${P}"/{bin,lib,libexec} -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				# just ignore wrong filetype error, instead of checking redundantly
+				patchelf --replace-needed libgcc_s.so.1 libunwind.so.1 ${filename} 2>/dev/null
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	local symlinks=(
+		cargo
+		rustc
+		rustdoc
+		rust-demangler
+		rust-gdb
+		rust-gdbgui
+		rust-lldb
+	)
+
+	use clippy && symlinks+=( clippy-driver cargo-clippy )
+	use rustfmt && symlinks+=( rustfmt cargo-fmt )
+	use rust-analyzer && symlinks+=( rust-analyzer )
+
+	einfo "installing eselect-rust symlinks and paths"
+	local i
+	for i in "${symlinks[@]}"; do
+		# we need realpath on /usr/bin/* symlink return version-appended binary path.
+		# so /usr/bin/rustc should point to /opt/rust-bin-<ver>/bin/rustc-<ver>
+		local ver_i="${i}-bin-${PV}"
+		ln -v "${ED}/opt/${P}/bin/${i}" "${ED}/opt/${P}/bin/${ver_i}" || die
+		dosym "../../opt/${P}/bin/${ver_i}" "/usr/bin/${ver_i}"
+	done
+
+	# symlinks to switch components to active rust in eselect
+	dosym "../../../opt/${P}/lib" "/usr/lib/rust/lib-bin-${PV}"
+	dosym "../../../opt/${P}/man" "/usr/lib/rust/man-bin-${PV}"
+	dosym "../../opt/${P}/lib/rustlib" "/usr/lib/rustlib-bin-${PV}"
+	dosym "../../../opt/${P}/share/doc/rust" "/usr/share/doc/${P}"
+
+	# make all capital underscored variable
+	local CARGO_TRIPLET="$(rust_abi)"
+	CARGO_TRIPLET="${CARGO_TRIPLET//-/_}"
+	CARGO_TRIPLET="${CARGO_TRIPLET^^}"
+	cat <<-_EOF_ > "${T}/50${P}"
+	LDPATH="${EPREFIX}/usr/lib/rust/lib-bin-${PV}"
+	MANPATH="${EPREFIX}/usr/lib/rust/man-bin-${PV}"
+	$(usev elibc_musl "CARGO_TARGET_${CARGO_TRIPLET}_RUSTFLAGS=\"-C target-feature=-crt-static\"")
+	_EOF_
+	doenvd "${T}/50${P}"
+
+	# note: eselect-rust adds EROOT to all paths below
+	cat <<-_EOF_ > "${T}/provider-${P}"
+	/usr/bin/cargo
+	/usr/bin/rustdoc
+	/usr/bin/rust-demangler
+	/usr/bin/rust-gdb
+	/usr/bin/rust-gdbgui
+	/usr/bin/rust-lldb
+	/usr/lib/rustlib
+	/usr/lib/rust/lib
+	/usr/lib/rust/man
+	/usr/share/doc/rust
+	_EOF_
+
+	if use clippy; then
+		echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+	fi
+	if use rustfmt; then
+		echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+	fi
+	if use rust-analyzer; then
+		echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+	fi
+
+	insinto /etc/env.d/rust
+	doins "${T}/provider-${P}"
+	popd >/dev/null || die
+	#end native abi install
+
+	else
+		local rust_target
+		rust_target="$(rust_abi $(get_abi_CHOST ${v##*.}))"
+		dodir "/opt/${P}/lib/rustlib"
+		cp -vr "${WORKDIR}/rust-${PV}-${rust_target}/rust-std-${rust_target}/lib/rustlib/${rust_target}"\
+			"${ED}/opt/${P}/lib/rustlib" || die
+	fi
+
+	# BUG: installs x86_64 binary on other arches
+	rm -f "${ED}/opt/${P}/lib/rustlib/"*/bin/rust-llvm-dwp || die
+}
+
+pkg_postinst() {
+	eselect rust update
+
+	if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+		elog "Rust installs helper scripts for calling GDB and LLDB,"
+		elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+	fi
+
+	if has_version app-editors/emacs; then
+		elog "install app-emacs/rust-mode to get emacs support for rust."
+	fi
+
+	if has_version app-editors/gvim || has_version app-editors/vim; then
+		elog "install app-vim/rust-vim to get vim support for rust."
+	fi
+}
+
+pkg_postrm() {
+	eselect rust cleanup
+}

diff --git a/dev-lang/rust-bin/rust-bin-1.80.1-r101.ebuild b/dev-lang/rust-bin/rust-bin-1.80.1-r101.ebuild
new file mode 100644
index 000000000000..93050557fa6d
--- /dev/null
+++ b/dev-lang/rust-bin/rust-bin-1.80.1-r101.ebuild
@@ -0,0 +1,264 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LLVM_COMPAT=( 18 )
+LLVM_OPTIONAL="yes"
+
+inherit llvm-r1 multilib prefix rust-toolchain toolchain-funcs verify-sig multilib-minimal
+
+MY_P="rust-${PV}"
+# curl -L static.rust-lang.org/dist/channel-rust-${PV}.toml 2>/dev/null | grep "xz_url.*rust-src"
+MY_SRC_URI="${RUST_TOOLCHAIN_BASEURL%/}/2024-08-08/rust-src-${PV}.tar.xz"
+GENTOO_BIN_BASEURI="https://dev.gentoo.org/~arthurzam/distfiles/${CATEGORY}/${PN}" # omit leading slash
+
+DESCRIPTION="Systems programming language from Mozilla"
+HOMEPAGE="https://www.rust-lang.org/"
+SRC_URI="$(rust_all_arch_uris ${MY_P})
+	rust-src? ( ${MY_SRC_URI} )
+"
+# Keep this separate to allow easy commenting out if not yet built
+SRC_URI+=" sparc? ( ${GENTOO_BIN_BASEURI}/${MY_P}-sparc64-unknown-linux-gnu.tar.xz ) "
+SRC_URI+=" mips? (
+	abi_mips_o32? (
+		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips-unknown-linux-gnu.tar.xz )
+		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mipsel-unknown-linux-gnu.tar.xz )
+	)
+	abi_mips_n64? (
+		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64-unknown-linux-gnuabi64.tar.xz )
+		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64el-unknown-linux-gnuabi64.tar.xz )
+	)
+)"
+SRC_URI+=" riscv? (
+	elibc_musl? ( ${GENTOO_BIN_BASEURI}/${MY_P}-riscv64gc-unknown-linux-musl.tar.xz )
+)"
+SRC_URI+=" ppc64? ( elibc_musl? (
+	big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-powerpc64-unknown-linux-musl.tar.xz )
+	!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-powerpc64le-unknown-linux-musl.tar.xz )
+) )"
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
+SLOT="${PV}"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="big-endian clippy cpu_flags_x86_sse2 doc prefix llvm-libunwind rust-analyzer rust-src rustfmt"
+
+RDEPEND="
+	>=app-eselect/eselect-rust-20190311
+	dev-libs/openssl
+	sys-apps/lsb-release
+	!llvm-libunwind? ( sys-devel/gcc:* )
+	!dev-lang/rust:stable
+	!dev-lang/rust-bin:stable
+"
+BDEPEND="
+	prefix? ( dev-util/patchelf )
+	llvm-libunwind? ( dev-util/patchelf )
+	verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
+
+# stripping rust may break it (at least on x86_64)
+# https://github.com/rust-lang/rust/issues/112286
+RESTRICT="strip"
+
+QA_PREBUILT="
+	opt/${P}/bin/.*
+	opt/${P}/lib/.*.so*
+	opt/${P}/libexec/.*
+	opt/${P}/lib/rustlib/.*/bin/.*
+	opt/${P}/lib/rustlib/.*/lib/.*
+"
+
+# 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="opt/${P}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/rust.asc"
+
+pkg_pretend() {
+	if [[ "$(tc-is-softfloat)" != "no" ]] && [[ ${CHOST} == armv7* ]]; then
+		die "${CHOST} is not supported by upstream Rust. You must use a hard float version."
+	fi
+}
+
+src_unpack() {
+	# sadly rust-src tarball does not have corresponding .asc file
+	# so do partial verification
+	if use verify-sig; then
+		for f in ${A}; do
+			if [[ -f ${DISTDIR}/${f}.asc ]]; then
+				verify-sig_verify_detached "${DISTDIR}/${f}" "${DISTDIR}/${f}.asc"
+			fi
+		done
+	fi
+
+	default_src_unpack
+
+	mv "${WORKDIR}/${MY_P}-$(rust_abi)" "${S}" || die
+}
+
+patchelf_for_bin() {
+	local filetype=$(file -b ${1})
+	if [[ ${filetype} == *ELF*interpreter* ]]; then
+		einfo "${1}'s interpreter changed"
+		patchelf ${1} --set-interpreter ${2} || die
+	elif [[ ${filetype} == *script* ]]; then
+		hprefixify ${1}
+	fi
+}
+
+multilib_src_install() {
+	if multilib_is_native_abi; then
+
+	# start native abi install
+	pushd "${S}" >/dev/null || die
+	local analysis std
+	analysis="$(grep 'analysis' ./components)"
+	std="$(grep 'std' ./components)"
+	local components="rustc,cargo,rust-demangler-preview,${std}"
+	use doc && components="${components},rust-docs"
+	use clippy && components="${components},clippy-preview"
+	use rustfmt && components="${components},rustfmt-preview"
+	use rust-analyzer && components="${components},rust-analyzer-preview,${analysis}"
+	# Rust component 'rust-src' is extracted from separate archive
+	if use rust-src; then
+		einfo "Combining rust and rust-src installers"
+		mv -v "${WORKDIR}/rust-src-${PV}/rust-src" "${S}" || die
+		echo rust-src >> ./components || die
+		components="${components},rust-src"
+	fi
+	./install.sh \
+		--components="${components}" \
+		--disable-verify \
+		--prefix="${ED}/opt/${P}" \
+		--mandir="${ED}/opt/${P}/man" \
+		--disable-ldconfig \
+		|| die
+
+	if use prefix; then
+		local interpreter=$(patchelf --print-interpreter "${EPREFIX}"/bin/bash)
+		ebegin "Changing interpreter to ${interpreter} for Gentoo prefix at ${ED}/opt/${P}/bin"
+		find "${ED}/opt/${P}/bin" -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				patchelf_for_bin ${filename} ${interpreter} \; || die
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	if use llvm-libunwind; then
+		ebegin "Replacing libgcc_s with libunwind"
+		find "${ED}/opt/${P}"/{bin,lib,libexec} -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				# just ignore wrong filetype error, instead of checking redundantly
+				patchelf --replace-needed libgcc_s.so.1 libunwind.so.1 ${filename} 2>/dev/null
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	local symlinks=(
+		cargo
+		rustc
+		rustdoc
+		rust-demangler
+		rust-gdb
+		rust-gdbgui
+		rust-lldb
+	)
+
+	use clippy && symlinks+=( clippy-driver cargo-clippy )
+	use rustfmt && symlinks+=( rustfmt cargo-fmt )
+	use rust-analyzer && symlinks+=( rust-analyzer )
+
+	einfo "installing eselect-rust symlinks and paths"
+	local i
+	for i in "${symlinks[@]}"; do
+		# we need realpath on /usr/bin/* symlink return version-appended binary path.
+		# so /usr/bin/rustc should point to /opt/rust-bin-<ver>/bin/rustc-<ver>
+		local ver_i="${i}-bin-${PV}"
+		ln -v "${ED}/opt/${P}/bin/${i}" "${ED}/opt/${P}/bin/${ver_i}" || die
+		dosym "../../opt/${P}/bin/${ver_i}" "/usr/bin/${ver_i}"
+	done
+
+	# symlinks to switch components to active rust in eselect
+	dosym "../../../opt/${P}/lib" "/usr/lib/rust/lib-bin-${PV}"
+	dosym "../../../opt/${P}/man" "/usr/lib/rust/man-bin-${PV}"
+	dosym "../../opt/${P}/lib/rustlib" "/usr/lib/rustlib-bin-${PV}"
+	dosym "../../../opt/${P}/share/doc/rust" "/usr/share/doc/${P}"
+
+	# make all capital underscored variable
+	local CARGO_TRIPLET="$(rust_abi)"
+	CARGO_TRIPLET="${CARGO_TRIPLET//-/_}"
+	CARGO_TRIPLET="${CARGO_TRIPLET^^}"
+	cat <<-_EOF_ > "${T}/50${P}"
+	LDPATH="${EPREFIX}/usr/lib/rust/lib-bin-${PV}"
+	MANPATH="${EPREFIX}/usr/lib/rust/man-bin-${PV}"
+	$(usev elibc_musl "CARGO_TARGET_${CARGO_TRIPLET}_RUSTFLAGS=\"-C target-feature=-crt-static\"")
+	_EOF_
+	doenvd "${T}/50${P}"
+
+	# note: eselect-rust adds EROOT to all paths below
+	cat <<-_EOF_ > "${T}/provider-${P}"
+	/usr/bin/cargo
+	/usr/bin/rustdoc
+	/usr/bin/rust-demangler
+	/usr/bin/rust-gdb
+	/usr/bin/rust-gdbgui
+	/usr/bin/rust-lldb
+	/usr/lib/rustlib
+	/usr/lib/rust/lib
+	/usr/lib/rust/man
+	/usr/share/doc/rust
+	_EOF_
+
+	if use clippy; then
+		echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+	fi
+	if use rustfmt; then
+		echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+	fi
+	if use rust-analyzer; then
+		echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+	fi
+
+	insinto /etc/env.d/rust
+	doins "${T}/provider-${P}"
+	popd >/dev/null || die
+	#end native abi install
+
+	else
+		local rust_target
+		rust_target="$(rust_abi $(get_abi_CHOST ${v##*.}))"
+		dodir "/opt/${P}/lib/rustlib"
+		cp -vr "${WORKDIR}/rust-${PV}-${rust_target}/rust-std-${rust_target}/lib/rustlib/${rust_target}"\
+			"${ED}/opt/${P}/lib/rustlib" || die
+	fi
+
+	# BUG: installs x86_64 binary on other arches
+	rm -f "${ED}/opt/${P}/lib/rustlib/"*/bin/rust-llvm-dwp || die
+}
+
+pkg_postinst() {
+	eselect rust update
+
+	if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+		elog "Rust installs helper scripts for calling GDB and LLDB,"
+		elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+	fi
+
+	if has_version app-editors/emacs; then
+		elog "install app-emacs/rust-mode to get emacs support for rust."
+	fi
+
+	if has_version app-editors/gvim || has_version app-editors/vim; then
+		elog "install app-vim/rust-vim to get vim support for rust."
+	fi
+}
+
+pkg_postrm() {
+	eselect rust cleanup
+}

diff --git a/dev-lang/rust-bin/rust-bin-1.81.0-r101.ebuild b/dev-lang/rust-bin/rust-bin-1.81.0-r101.ebuild
new file mode 100644
index 000000000000..11a6951c47d4
--- /dev/null
+++ b/dev-lang/rust-bin/rust-bin-1.81.0-r101.ebuild
@@ -0,0 +1,262 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LLVM_COMPAT=( 18 )
+LLVM_OPTIONAL="yes"
+
+inherit llvm-r1 multilib prefix rust-toolchain toolchain-funcs verify-sig multilib-minimal optfeature
+
+MY_P="rust-${PV}"
+# curl -L static.rust-lang.org/dist/channel-rust-${PV}.toml 2>/dev/null | grep "xz_url.*rust-src"
+MY_SRC_URI="${RUST_TOOLCHAIN_BASEURL%/}/2024-09-05/rust-src-${PV}.tar.xz"
+GENTOO_BIN_BASEURI="https://dev.gentoo.org/~arthurzam/distfiles/${CATEGORY}/${PN}" # omit leading slash
+
+DESCRIPTION="Systems programming language from Mozilla"
+HOMEPAGE="https://www.rust-lang.org/"
+SRC_URI="$(rust_all_arch_uris ${MY_P})
+	rust-src? ( ${MY_SRC_URI} )
+"
+# Keep this separate to allow easy commenting out if not yet built
+SRC_URI+=" sparc? ( ${GENTOO_BIN_BASEURI}/${MY_P}-sparc64-unknown-linux-gnu.tar.xz ) "
+SRC_URI+=" mips? (
+	abi_mips_o32? (
+		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips-unknown-linux-gnu.tar.xz )
+		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mipsel-unknown-linux-gnu.tar.xz )
+	)
+	abi_mips_n64? (
+		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64-unknown-linux-gnuabi64.tar.xz )
+		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64el-unknown-linux-gnuabi64.tar.xz )
+	)
+)"
+SRC_URI+=" riscv? (
+	elibc_musl? ( ${GENTOO_BIN_BASEURI}/${MY_P}-riscv64gc-unknown-linux-musl.tar.xz )
+)"
+SRC_URI+=" ppc64? ( elibc_musl? (
+	big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-powerpc64-unknown-linux-musl.tar.xz )
+	!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-powerpc64le-unknown-linux-musl.tar.xz )
+) )"
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
+SLOT="${PV}"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="big-endian clippy cpu_flags_x86_sse2 doc prefix llvm-libunwind rust-analyzer rust-src rustfmt"
+
+RDEPEND="
+	>=app-eselect/eselect-rust-20190311
+	dev-libs/openssl
+	sys-apps/lsb-release
+	!llvm-libunwind? ( sys-devel/gcc:* )
+	!dev-lang/rust:stable
+	!dev-lang/rust-bin:stable
+"
+BDEPEND="
+	prefix? ( dev-util/patchelf )
+	llvm-libunwind? ( dev-util/patchelf )
+	verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
+
+# stripping rust may break it (at least on x86_64)
+# https://github.com/rust-lang/rust/issues/112286
+RESTRICT="strip"
+
+QA_PREBUILT="
+	opt/${P}/bin/.*
+	opt/${P}/lib/.*.so*
+	opt/${P}/libexec/.*
+	opt/${P}/lib/rustlib/.*/bin/.*
+	opt/${P}/lib/rustlib/.*/lib/.*
+"
+
+# 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="opt/${P}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/rust.asc"
+
+pkg_pretend() {
+	if [[ "$(tc-is-softfloat)" != "no" ]] && [[ ${CHOST} == armv7* ]]; then
+		die "${CHOST} is not supported by upstream Rust. You must use a hard float version."
+	fi
+}
+
+src_unpack() {
+	# sadly rust-src tarball does not have corresponding .asc file
+	# so do partial verification
+	if use verify-sig; then
+		for f in ${A}; do
+			if [[ -f ${DISTDIR}/${f}.asc ]]; then
+				verify-sig_verify_detached "${DISTDIR}/${f}" "${DISTDIR}/${f}.asc"
+			fi
+		done
+	fi
+
+	default_src_unpack
+
+	mv "${WORKDIR}/${MY_P}-$(rust_abi)" "${S}" || die
+}
+
+patchelf_for_bin() {
+	local filetype=$(file -b ${1})
+	if [[ ${filetype} == *ELF*interpreter* ]]; then
+		einfo "${1}'s interpreter changed"
+		patchelf ${1} --set-interpreter ${2} || die
+	elif [[ ${filetype} == *script* ]]; then
+		hprefixify ${1}
+	fi
+}
+
+multilib_src_install() {
+	if multilib_is_native_abi; then
+
+	# start native abi install
+	pushd "${S}" >/dev/null || die
+	local analysis std
+	analysis="$(grep 'analysis' ./components)"
+	std="$(grep 'std' ./components)"
+	local components="rustc,cargo,${std}"
+	use doc && components="${components},rust-docs"
+	use clippy && components="${components},clippy-preview"
+	use rustfmt && components="${components},rustfmt-preview"
+	use rust-analyzer && components="${components},rust-analyzer-preview,${analysis}"
+	# Rust component 'rust-src' is extracted from separate archive
+	if use rust-src; then
+		einfo "Combining rust and rust-src installers"
+		mv -v "${WORKDIR}/rust-src-${PV}/rust-src" "${S}" || die
+		echo rust-src >> ./components || die
+		components="${components},rust-src"
+	fi
+	./install.sh \
+		--components="${components}" \
+		--disable-verify \
+		--prefix="${ED}/opt/${P}" \
+		--mandir="${ED}/opt/${P}/man" \
+		--disable-ldconfig \
+		|| die
+
+	if use prefix; then
+		local interpreter=$(patchelf --print-interpreter "${EPREFIX}"/bin/bash)
+		ebegin "Changing interpreter to ${interpreter} for Gentoo prefix at ${ED}/opt/${P}/bin"
+		find "${ED}/opt/${P}/bin" -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				patchelf_for_bin ${filename} ${interpreter} \; || die
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	if use llvm-libunwind; then
+		ebegin "Replacing libgcc_s with libunwind"
+		find "${ED}/opt/${P}"/{bin,lib,libexec} -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				# just ignore wrong filetype error, instead of checking redundantly
+				patchelf --replace-needed libgcc_s.so.1 libunwind.so.1 ${filename} 2>/dev/null
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	local symlinks=(
+		cargo
+		rustc
+		rustdoc
+		rust-gdb
+		rust-gdbgui
+		rust-lldb
+	)
+
+	use clippy && symlinks+=( clippy-driver cargo-clippy )
+	use rustfmt && symlinks+=( rustfmt cargo-fmt )
+	use rust-analyzer && symlinks+=( rust-analyzer )
+
+	einfo "installing eselect-rust symlinks and paths"
+	local i
+	for i in "${symlinks[@]}"; do
+		# we need realpath on /usr/bin/* symlink return version-appended binary path.
+		# so /usr/bin/rustc should point to /opt/rust-bin-<ver>/bin/rustc-<ver>
+		local ver_i="${i}-bin-${PV}"
+		ln -v "${ED}/opt/${P}/bin/${i}" "${ED}/opt/${P}/bin/${ver_i}" || die
+		dosym "../../opt/${P}/bin/${ver_i}" "/usr/bin/${ver_i}"
+	done
+
+	# symlinks to switch components to active rust in eselect
+	dosym "../../../opt/${P}/lib" "/usr/lib/rust/lib-bin-${PV}"
+	dosym "../../../opt/${P}/man" "/usr/lib/rust/man-bin-${PV}"
+	dosym "../../opt/${P}/lib/rustlib" "/usr/lib/rustlib-bin-${PV}"
+	dosym "../../../opt/${P}/share/doc/rust" "/usr/share/doc/${P}"
+
+	# make all capital underscored variable
+	local CARGO_TRIPLET="$(rust_abi)"
+	CARGO_TRIPLET="${CARGO_TRIPLET//-/_}"
+	CARGO_TRIPLET="${CARGO_TRIPLET^^}"
+	cat <<-_EOF_ > "${T}/50${P}"
+	LDPATH="${EPREFIX}/usr/lib/rust/lib-bin-${PV}"
+	MANPATH="${EPREFIX}/usr/lib/rust/man-bin-${PV}"
+	$(usev elibc_musl "CARGO_TARGET_${CARGO_TRIPLET}_RUSTFLAGS=\"-C target-feature=-crt-static\"")
+	_EOF_
+	doenvd "${T}/50${P}"
+
+	# note: eselect-rust adds EROOT to all paths below
+	cat <<-_EOF_ > "${T}/provider-${P}"
+	/usr/bin/cargo
+	/usr/bin/rustdoc
+	/usr/bin/rust-gdb
+	/usr/bin/rust-gdbgui
+	/usr/bin/rust-lldb
+	/usr/lib/rustlib
+	/usr/lib/rust/lib
+	/usr/lib/rust/man
+	/usr/share/doc/rust
+	_EOF_
+
+	if use clippy; then
+		echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+	fi
+	if use rustfmt; then
+		echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+	fi
+	if use rust-analyzer; then
+		echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+	fi
+
+	insinto /etc/env.d/rust
+	doins "${T}/provider-${P}"
+	popd >/dev/null || die
+	#end native abi install
+
+	else
+		local rust_target
+		rust_target="$(rust_abi $(get_abi_CHOST ${v##*.}))"
+		dodir "/opt/${P}/lib/rustlib"
+		cp -vr "${WORKDIR}/rust-${PV}-${rust_target}/rust-std-${rust_target}/lib/rustlib/${rust_target}"\
+			"${ED}/opt/${P}/lib/rustlib" || die
+	fi
+
+	# BUG: installs x86_64 binary on other arches
+	rm -f "${ED}/opt/${P}/lib/rustlib/"*/bin/rust-llvm-dwp || die
+}
+
+pkg_postinst() {
+	eselect rust update
+
+	if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+		elog "Rust installs helper scripts for calling GDB and LLDB,"
+		elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+	fi
+
+	if has_version app-editors/emacs; then
+		optfeature "emacs support for rust" app-emacs/rust-mode
+	fi
+
+	if has_version app-editors/gvim || has_version app-editors/vim; then
+		optfeature "vim support for rust" app-vim/rust-vim
+	fi
+}
+
+pkg_postrm() {
+	eselect rust cleanup
+}

diff --git a/dev-lang/rust-bin/rust-bin-1.82.0-r101.ebuild b/dev-lang/rust-bin/rust-bin-1.82.0-r101.ebuild
new file mode 100644
index 000000000000..a37c975a3e4f
--- /dev/null
+++ b/dev-lang/rust-bin/rust-bin-1.82.0-r101.ebuild
@@ -0,0 +1,264 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+LLVM_COMPAT=( 19 )
+LLVM_OPTIONAL="yes"
+
+inherit llvm-r1 multilib prefix rust-toolchain toolchain-funcs verify-sig multilib-minimal optfeature
+
+MY_P="rust-${PV}"
+# curl -L static.rust-lang.org/dist/channel-rust-${PV}.toml 2>/dev/null | grep "xz_url.*rust-src"
+MY_SRC_URI="${RUST_TOOLCHAIN_BASEURL%/}/2024-10-17/rust-src-${PV}.tar.xz"
+GENTOO_BIN_BASEURI="https://dev.gentoo.org/~arthurzam/distfiles/${CATEGORY}/${PN}" # omit leading slash
+
+DESCRIPTION="Systems programming language from Mozilla"
+HOMEPAGE="https://www.rust-lang.org/"
+SRC_URI="$(rust_all_arch_uris ${MY_P})
+	rust-src? ( ${MY_SRC_URI} )
+"
+# Keep this separate to allow easy commenting out if not yet built
+SRC_URI+=" sparc? ( ${GENTOO_BIN_BASEURI}/${MY_P}-sparc64-unknown-linux-gnu.tar.xz ) "
+SRC_URI+=" mips? (
+	abi_mips_o32? (
+		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips-unknown-linux-gnu.tar.xz )
+		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mipsel-unknown-linux-gnu.tar.xz )
+	)
+	abi_mips_n64? (
+		big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64-unknown-linux-gnuabi64.tar.xz )
+		!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-mips64el-unknown-linux-gnuabi64.tar.xz )
+	)
+)"
+SRC_URI+=" riscv? (
+	elibc_musl? ( ${GENTOO_BIN_BASEURI}/${MY_P}-riscv64gc-unknown-linux-musl.tar.xz )
+)"
+SRC_URI+=" ppc64? ( elibc_musl? (
+	big-endian?  ( ${GENTOO_BIN_BASEURI}/${MY_P}-powerpc64-unknown-linux-musl.tar.xz )
+	!big-endian? ( ${GENTOO_BIN_BASEURI}/${MY_P}-powerpc64le-unknown-linux-musl.tar.xz )
+) )"
+
+LICENSE="|| ( MIT Apache-2.0 ) BSD BSD-1 BSD-2 BSD-4"
+SLOT="${PV}"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="big-endian clippy cpu_flags_x86_sse2 doc prefix llvm-libunwind rust-analyzer rust-src rustfmt"
+
+RDEPEND="
+	>=app-eselect/eselect-rust-20190311
+	dev-libs/openssl
+	sys-apps/lsb-release
+	!llvm-libunwind? ( sys-devel/gcc:* )
+	!dev-lang/rust:stable
+	!dev-lang/rust-bin:stable
+"
+BDEPEND="
+	prefix? ( dev-util/patchelf )
+	llvm-libunwind? ( dev-util/patchelf )
+	verify-sig? ( sec-keys/openpgp-keys-rust )
+"
+
+REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
+
+# stripping rust may break it (at least on x86_64)
+# https://github.com/rust-lang/rust/issues/112286
+RESTRICT="strip"
+
+QA_PREBUILT="
+	opt/${P}/bin/.*
+	opt/${P}/lib/.*.so*
+	opt/${P}/libexec/.*
+	opt/${P}/lib/rustlib/.*/bin/.*
+	opt/${P}/lib/rustlib/.*/lib/.*
+"
+
+# 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="opt/${P}/lib/rustlib/*/lib*.rlib:lib.rmeta"
+
+VERIFY_SIG_OPENPGP_KEY_PATH="/usr/share/openpgp-keys/rust.asc"
+
+pkg_pretend() {
+	if [[ "$(tc-is-softfloat)" != "no" ]] && [[ ${CHOST} == armv7* ]]; then
+		die "${CHOST} is not supported by upstream Rust. You must use a hard float version."
+	fi
+}
+
+src_unpack() {
+	# sadly rust-src tarball does not have corresponding .asc file
+	# so do partial verification
+	if use verify-sig; then
+		for f in ${A}; do
+			if [[ -f ${DISTDIR}/${f}.asc ]]; then
+				verify-sig_verify_detached "${DISTDIR}/${f}" "${DISTDIR}/${f}.asc"
+			fi
+		done
+	fi
+
+	default_src_unpack
+
+	mv "${WORKDIR}/${MY_P}-$(rust_abi)" "${S}" || die
+}
+
+patchelf_for_bin() {
+	local filetype=$(file -b ${1})
+	if [[ ${filetype} == *ELF*interpreter* ]]; then
+		einfo "${1}'s interpreter changed"
+		patchelf ${1} --set-interpreter ${2} || die
+	elif [[ ${filetype} == *script* ]]; then
+		hprefixify ${1}
+	fi
+}
+
+multilib_src_install() {
+	if multilib_is_native_abi; then
+
+	# start native abi install
+	pushd "${S}" >/dev/null || die
+	local analysis std
+	analysis="$(grep 'analysis' ./components)"
+	std="$(grep 'std' ./components)"
+	local components="rustc,cargo,${std}"
+	use doc && components="${components},rust-docs"
+	use clippy && components="${components},clippy-preview"
+	use rustfmt && components="${components},rustfmt-preview"
+	use rust-analyzer && components="${components},rust-analyzer-preview,${analysis}"
+	# Rust component 'rust-src' is extracted from separate archive
+	if use rust-src; then
+		einfo "Combining rust and rust-src installers"
+		mv -v "${WORKDIR}/rust-src-${PV}/rust-src" "${S}" || die
+		echo rust-src >> ./components || die
+		components="${components},rust-src"
+	fi
+	./install.sh \
+		--components="${components}" \
+		--disable-verify \
+		--prefix="${ED}/opt/${P}" \
+		--mandir="${ED}/opt/${P}/man" \
+		--disable-ldconfig \
+		|| die
+
+	docompress /opt/${P}/man/
+
+	if use prefix; then
+		local interpreter=$(patchelf --print-interpreter "${EPREFIX}"/bin/bash)
+		ebegin "Changing interpreter to ${interpreter} for Gentoo prefix at ${ED}/opt/${P}/bin"
+		find "${ED}/opt/${P}/bin" -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				patchelf_for_bin ${filename} ${interpreter} \; || die
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	if use llvm-libunwind; then
+		ebegin "Replacing libgcc_s with libunwind"
+		find "${ED}/opt/${P}"/{bin,lib,libexec} -type f -print0 | \
+			while IFS=  read -r -d '' filename; do
+				# just ignore wrong filetype error, instead of checking redundantly
+				patchelf --replace-needed libgcc_s.so.1 libunwind.so.1 ${filename} 2>/dev/null
+			done
+		eend ${PIPESTATUS[0]}
+	fi
+
+	local symlinks=(
+		cargo
+		rustc
+		rustdoc
+		rust-gdb
+		rust-gdbgui
+		rust-lldb
+	)
+
+	use clippy && symlinks+=( clippy-driver cargo-clippy )
+	use rustfmt && symlinks+=( rustfmt cargo-fmt )
+	use rust-analyzer && symlinks+=( rust-analyzer )
+
+	einfo "installing eselect-rust symlinks and paths"
+	local i
+	for i in "${symlinks[@]}"; do
+		# we need realpath on /usr/bin/* symlink return version-appended binary path.
+		# so /usr/bin/rustc should point to /opt/rust-bin-<ver>/bin/rustc-<ver>
+		local ver_i="${i}-bin-${PV}"
+		ln -v "${ED}/opt/${P}/bin/${i}" "${ED}/opt/${P}/bin/${ver_i}" || die
+		dosym "../../opt/${P}/bin/${ver_i}" "/usr/bin/${ver_i}"
+	done
+
+	# symlinks to switch components to active rust in eselect
+	dosym "../../../opt/${P}/lib" "/usr/lib/rust/lib-bin-${PV}"
+	dosym "../../../opt/${P}/man" "/usr/lib/rust/man-bin-${PV}"
+	dosym "../../opt/${P}/lib/rustlib" "/usr/lib/rustlib-bin-${PV}"
+	dosym "../../../opt/${P}/share/doc/rust" "/usr/share/doc/${P}"
+
+	# make all capital underscored variable
+	local CARGO_TRIPLET="$(rust_abi)"
+	CARGO_TRIPLET="${CARGO_TRIPLET//-/_}"
+	CARGO_TRIPLET="${CARGO_TRIPLET^^}"
+	cat <<-_EOF_ > "${T}/50${P}"
+	LDPATH="${EPREFIX}/usr/lib/rust/lib-bin-${PV}"
+	MANPATH="${EPREFIX}/usr/lib/rust/man-bin-${PV}"
+	$(usev elibc_musl "CARGO_TARGET_${CARGO_TRIPLET}_RUSTFLAGS=\"-C target-feature=-crt-static\"")
+	_EOF_
+	doenvd "${T}/50${P}"
+
+	# note: eselect-rust adds EROOT to all paths below
+	cat <<-_EOF_ > "${T}/provider-${P}"
+	/usr/bin/cargo
+	/usr/bin/rustdoc
+	/usr/bin/rust-gdb
+	/usr/bin/rust-gdbgui
+	/usr/bin/rust-lldb
+	/usr/lib/rustlib
+	/usr/lib/rust/lib
+	/usr/lib/rust/man
+	/usr/share/doc/rust
+	_EOF_
+
+	if use clippy; then
+		echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
+	fi
+	if use rustfmt; then
+		echo /usr/bin/rustfmt >> "${T}/provider-${P}"
+		echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
+	fi
+	if use rust-analyzer; then
+		echo /usr/bin/rust-analyzer >> "${T}/provider-${P}"
+	fi
+
+	insinto /etc/env.d/rust
+	doins "${T}/provider-${P}"
+	popd >/dev/null || die
+	#end native abi install
+
+	else
+		local rust_target
+		rust_target="$(rust_abi $(get_abi_CHOST ${v##*.}))"
+		dodir "/opt/${P}/lib/rustlib"
+		cp -vr "${WORKDIR}/rust-${PV}-${rust_target}/rust-std-${rust_target}/lib/rustlib/${rust_target}"\
+			"${ED}/opt/${P}/lib/rustlib" || die
+	fi
+
+	# BUG: installs x86_64 binary on other arches
+	rm -f "${ED}/opt/${P}/lib/rustlib/"*/bin/rust-llvm-dwp || die
+}
+
+pkg_postinst() {
+	eselect rust update
+
+	if has_version dev-debug/gdb || has_version dev-debug/lldb; then
+		elog "Rust installs helper scripts for calling GDB and LLDB,"
+		elog "for convenience they are installed under /usr/bin/rust-{gdb,lldb}-${PV}."
+	fi
+
+	if has_version app-editors/emacs; then
+		optfeature "emacs support for rust" app-emacs/rust-mode
+	fi
+
+	if has_version app-editors/gvim || has_version app-editors/vim; then
+		optfeature "vim support for rust" app-vim/rust-vim
+	fi
+}
+
+pkg_postrm() {
+	eselect rust cleanup
+}


             reply	other threads:[~2024-12-09  5:01 UTC|newest]

Thread overview: 439+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-09  5:01 Matt Jolly [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-01-24 19:45 [gentoo-commits] repo/gentoo:master commit in: dev-lang/rust-bin/ Arthur Zamarin
2025-01-18  7:12 Arthur Zamarin
2025-01-18  7:12 Arthur Zamarin
2025-01-17 20:24 Arthur Zamarin
2025-01-17 17:08 Arthur Zamarin
2025-01-17 16:00 Arthur Zamarin
2025-01-17 16:00 Arthur Zamarin
2025-01-17 16:00 Arthur Zamarin
2025-01-17 16:00 Arthur Zamarin
2025-01-11  8:10 Arthur Zamarin
2024-12-18 18:23 Arthur Zamarin
2024-12-18 18:23 Arthur Zamarin
2024-12-15 14:47 Arthur Zamarin
2024-12-15  7:02 Sam James
2024-12-11  8:12 Sam James
2024-12-09  5:01 Matt Jolly
2024-12-09  5:01 Matt Jolly
2024-12-07 19:40 Arthur Zamarin
2024-12-06 23:04 Sam James
2024-12-06 23:04 Sam James
2024-12-06 23:04 Sam James
2024-12-06 23:04 Sam James
2024-12-06 23:04 Sam James
2024-12-06 23:04 Sam James
2024-12-06 23:04 Sam James
2024-12-01  8:23 Arthur Zamarin
2024-11-09  6:42 Sam James
2024-10-25 12:01 Arthur Zamarin
2024-10-23 21:13 Arthur Zamarin
2024-10-23 21:13 Arthur Zamarin
2024-10-18  9:52 Arthur Zamarin
2024-10-17  6:27 Arthur Zamarin
2024-10-17  6:27 Arthur Zamarin
2024-10-17  6:27 Arthur Zamarin
2024-10-17  6:27 Arthur Zamarin
2024-09-18  2:56 Sam James
2024-09-14 14:12 Arthur Zamarin
2024-09-14  6:57 Arthur Zamarin
2024-09-14  6:39 Arthur Zamarin
2024-09-14  6:39 Arthur Zamarin
2024-09-14  6:39 Arthur Zamarin
2024-09-14  6:39 Arthur Zamarin
2024-09-14  6:39 Arthur Zamarin
2024-09-14  6:39 Arthur Zamarin
2024-09-14  6:39 Arthur Zamarin
2024-09-10 16:50 Arthur Zamarin
2024-09-06 15:26 Arthur Zamarin
2024-09-02 19:20 Arthur Zamarin
2024-08-16 10:15 Arthur Zamarin
2024-08-16  5:55 Arthur Zamarin
2024-08-14 19:13 Arthur Zamarin
2024-08-14 12:40 Joonas Niilola
2024-07-23  5:55 Sam James
2024-07-23  5:55 Sam James
2024-07-23  5:55 Sam James
2024-07-23  5:55 Sam James
2024-07-23  5:55 Sam James
2024-07-23  5:55 Sam James
2024-07-23  5:55 Sam James
2024-06-27 15:09 Arthur Zamarin
2024-06-25  2:47 Sam James
2024-06-06 20:16 Mike Gilbert
2024-06-01 18:50 Arthur Zamarin
2024-05-31 21:03 Sam James
2024-05-16 14:50 Arthur Zamarin
2024-05-05 12:52 Arthur Zamarin
2024-05-01  5:28 Joonas Niilola
2024-04-29 18:34 Arthur Zamarin
2024-04-28 17:56 Arthur Zamarin
2024-04-28 17:56 Arthur Zamarin
2024-04-10 17:57 Arthur Zamarin
2024-04-10 17:57 Arthur Zamarin
2024-04-04  1:17 Sam James
2024-04-04  1:07 Sam James
2024-03-29  4:29 Sam James
2024-03-27 18:37 Arthur Zamarin
2024-03-27 18:37 Arthur Zamarin
2024-03-22 13:15 Arthur Zamarin
2024-03-22 13:15 Arthur Zamarin
2024-03-22 13:15 Arthur Zamarin
2024-03-09  2:56 WANG Xuerui
2024-03-09  2:56 WANG Xuerui
2024-03-04  7:09 Sam James
2024-03-04  7:09 Sam James
2024-03-04  6:57 Sam James
2024-02-10  4:49 Sam James
2024-02-10  4:49 Sam James
2024-02-10  4:49 Sam James
2024-02-07  0:59 Sam James
2024-02-07  0:58 Sam James
2024-02-07  0:56 Sam James
2024-01-31 13:56 Matt Turner
2024-01-08 17:29 Sam James
2023-12-29 16:03 Arthur Zamarin
2023-12-08 11:36 Sam James
2023-12-08 11:36 Sam James
2023-11-09 21:19 Arthur Zamarin
2023-11-07 17:27 Arthur Zamarin
2023-11-07 17:27 Arthur Zamarin
2023-11-07 17:27 Arthur Zamarin
2023-10-11  8:38 Sam James
2023-10-09 20:30 Sam James
2023-10-07  8:46 WANG Xuerui
2023-09-17 12:10 Arthur Zamarin
2023-09-13 16:15 Sam James
2023-09-13 16:15 Sam James
2023-09-04 20:18 Sam James
2023-09-04 19:51 Sam James
2023-09-04  7:22 Sam James
2023-09-04  7:22 Sam James
2023-08-28  6:54 WANG Xuerui
2023-08-17  7:43 Sam James
2023-08-05 10:24 WANG Xuerui
2023-08-04 15:23 Ionen Wolkens
2023-08-04 12:30 WANG Xuerui
2023-08-02 18:20 Sam James
2023-07-20  9:49 WANG Xuerui
2023-07-03  2:02 Sam James
2023-07-03  2:02 Sam James
2023-07-03  2:02 Sam James
2023-07-03  2:02 Sam James
2023-07-03  2:00 Sam James
2023-07-03  2:00 Sam James
2023-07-03  2:00 Sam James
2023-07-03  2:00 Sam James
2023-06-21  1:22 Georgy Yakovlev
2023-06-20 21:16 Georgy Yakovlev
2023-06-20 19:51 Georgy Yakovlev
2023-06-08 21:38 Georgy Yakovlev
2023-06-08 21:38 Georgy Yakovlev
2023-06-08  0:53 Georgy Yakovlev
2023-06-07 22:05 Georgy Yakovlev
2023-06-07 22:05 Georgy Yakovlev
2023-06-07 22:05 Georgy Yakovlev
2023-06-03  5:24 Jakov Smolić
2023-06-03  3:23 Sam James
2023-06-03  3:23 Sam James
2023-06-03  0:52 Sam James
2023-06-02  3:06 Georgy Yakovlev
2023-06-02  3:06 Georgy Yakovlev
2023-04-20 22:16 Georgy Yakovlev
2023-04-07 13:14 Sam James
2023-04-05 23:31 Georgy Yakovlev
2023-03-23 23:24 Georgy Yakovlev
2023-03-23 23:24 Georgy Yakovlev
2023-03-23 23:24 Georgy Yakovlev
2023-03-21  0:10 Georgy Yakovlev
2023-02-28  4:07 Sam James
2023-02-26 18:23 Arthur Zamarin
2023-02-26 18:23 Arthur Zamarin
2023-02-09 20:36 Georgy Yakovlev
2023-02-09 20:36 Georgy Yakovlev
2023-01-28  6:28 Georgy Yakovlev
2023-01-15 13:09 Sam James
2023-01-13 14:50 Sam James
2023-01-12  0:53 Sam James
2023-01-12  0:20 Sam James
2023-01-11 20:53 Georgy Yakovlev
2023-01-11 20:46 Georgy Yakovlev
2023-01-11 20:46 Georgy Yakovlev
2022-12-20  7:24 Georgy Yakovlev
2022-12-20  7:12 Georgy Yakovlev
2022-12-20  7:12 Georgy Yakovlev
2022-12-03 16:07 Arthur Zamarin
2022-11-25 23:02 Georgy Yakovlev
2022-11-22  8:24 Arthur Zamarin
2022-11-18 18:07 Arthur Zamarin
2022-11-18  2:20 Sam James
2022-11-17 15:14 Sam James
2022-11-17 15:14 Sam James
2022-11-17 15:14 Sam James
2022-11-17 15:14 Sam James
2022-11-13 19:14 Georgy Yakovlev
2022-11-11  2:36 Georgy Yakovlev
2022-11-05  5:57 Georgy Yakovlev
2022-11-05  5:57 Georgy Yakovlev
2022-10-20 18:28 Georgy Yakovlev
2022-10-20 18:28 Georgy Yakovlev
2022-10-20 18:19 Georgy Yakovlev
2022-10-13 17:41 Georgy Yakovlev
2022-10-13  6:58 Agostino Sarubbo
2022-10-13  6:57 Agostino Sarubbo
2022-10-13  6:55 Agostino Sarubbo
2022-10-13  6:54 Agostino Sarubbo
2022-10-13  6:53 Agostino Sarubbo
2022-10-12 19:22 Sam James
2022-10-11 18:47 Georgy Yakovlev
2022-09-30  1:19 Sam James
2022-09-23 20:06 Georgy Yakovlev
2022-09-23 19:40 Georgy Yakovlev
2022-09-23  4:59 Georgy Yakovlev
2022-09-23  3:34 Georgy Yakovlev
2022-09-23  3:34 Georgy Yakovlev
2022-09-23  0:05 Sam James
2022-09-18  0:19 Sam James
2022-09-13 22:59 Georgy Yakovlev
2022-08-02  7:18 Agostino Sarubbo
2022-07-28  7:07 Agostino Sarubbo
2022-07-27 20:09 Sam James
2022-07-27  7:54 Agostino Sarubbo
2022-07-26 18:41 Sam James
2022-07-26 18:41 Sam James
2022-07-26 18:41 Sam James
2022-07-25  7:20 Georgy Yakovlev
2022-07-21 21:00 Georgy Yakovlev
2022-07-03 18:41 Georgy Yakovlev
2022-07-03  7:44 Georgy Yakovlev
2022-07-03  7:33 Georgy Yakovlev
2022-07-01 19:32 Georgy Yakovlev
2022-06-25  5:31 Georgy Yakovlev
2022-06-25  5:21 Georgy Yakovlev
2022-06-10  6:48 Agostino Sarubbo
2022-06-09  7:39 Agostino Sarubbo
2022-06-09  7:36 Agostino Sarubbo
2022-06-08  8:44 Agostino Sarubbo
2022-06-07 19:50 Sam James
2022-06-07 18:47 Georgy Yakovlev
2022-05-31 14:56 Jakov Smolić
2022-05-24 19:44 Georgy Yakovlev
2022-05-24 17:07 Georgy Yakovlev
2022-04-25 18:32 Sam James
2022-04-20 17:02 Arthur Zamarin
2022-04-20  6:38 Agostino Sarubbo
2022-04-20  6:36 Agostino Sarubbo
2022-04-19 16:43 Arthur Zamarin
2022-04-19 16:43 Arthur Zamarin
2022-04-08 20:56 Georgy Yakovlev
2022-04-08  5:25 Georgy Yakovlev
2022-04-08  5:25 Georgy Yakovlev
2022-03-04  6:12 Georgy Yakovlev
2022-01-29 17:07 Georgy Yakovlev
2022-01-22  0:48 Sam James
2022-01-21 11:17 Jakov Smolić
2022-01-21  1:17 Georgy Yakovlev
2022-01-21  1:17 Georgy Yakovlev
2022-01-21  0:11 Georgy Yakovlev
2022-01-20 22:03 Georgy Yakovlev
2022-01-14  1:20 Georgy Yakovlev
2022-01-13 21:37 Georgy Yakovlev
2022-01-13 21:37 Georgy Yakovlev
2021-12-26  8:58 Georgy Yakovlev
2021-12-26  0:41 Georgy Yakovlev
2021-12-26  0:41 Georgy Yakovlev
2021-12-25 17:11 Arthur Zamarin
2021-12-08  0:10 Georgy Yakovlev
2021-12-06 22:42 Georgy Yakovlev
2021-11-13 22:44 Georgy Yakovlev
2021-11-13  2:58 Sam James
2021-11-12 22:54 Sam James
2021-11-12 20:53 Sam James
2021-11-12 19:42 Georgy Yakovlev
2021-11-12 19:42 Georgy Yakovlev
2021-11-11 18:18 Georgy Yakovlev
2021-11-02 21:05 Georgy Yakovlev
2021-11-01 21:25 Georgy Yakovlev
2021-10-21 21:05 Georgy Yakovlev
2021-09-13 15:07 Georgy Yakovlev
2021-09-07  0:09 Sam James
2021-08-05  5:37 Georgy Yakovlev
2021-07-31 13:40 Michał Górny
2021-07-31  4:14 Sam James
2021-07-29  4:34 Georgy Yakovlev
2021-07-27 20:55 Sam James
2021-07-27 20:55 Sam James
2021-07-03  7:03 Georgy Yakovlev
2021-06-27  5:20 Sam James
2021-06-27  5:20 Sam James
2021-06-18 20:37 Georgy Yakovlev
2021-06-18  0:44 Georgy Yakovlev
2021-06-17  7:23 Agostino Sarubbo
2021-06-16  6:53 Agostino Sarubbo
2021-06-16  6:52 Agostino Sarubbo
2021-05-13 15:07 Yixun Lan
2021-05-10 15:58 Georgy Yakovlev
2021-05-10 15:58 Georgy Yakovlev
2021-05-06 21:21 Georgy Yakovlev
2021-05-04 23:14 Georgy Yakovlev
2021-04-27 18:59 Georgy Yakovlev
2021-04-27 11:55 Georgy Yakovlev
2021-04-27 11:55 Georgy Yakovlev
2021-04-23 13:33 Sam James
2021-04-23 13:33 Sam James
2021-04-23  0:43 Georgy Yakovlev
2021-04-22 20:22 Sam James
2021-04-22 20:15 Sam James
2021-04-03 22:10 Georgy Yakovlev
2021-04-03 22:10 Georgy Yakovlev
2021-02-24 23:08 Sam James
2021-02-24 23:08 Sam James
2021-02-12  0:45 Georgy Yakovlev
2021-02-11 23:49 Georgy Yakovlev
2021-02-02 23:52 Georgy Yakovlev
2020-11-28  7:06 Georgy Yakovlev
2020-11-27 16:34 Agostino Sarubbo
2020-11-27 16:04 Agostino Sarubbo
2020-11-26  0:29 Thomas Deutschmann
2020-11-24  0:41 Georgy Yakovlev
2020-11-24  0:41 Georgy Yakovlev
2020-10-13 15:16 Georgy Yakovlev
2020-10-13  4:02 Georgy Yakovlev
2020-10-13  4:02 Georgy Yakovlev
2020-10-09  8:41 Agostino Sarubbo
2020-10-09  8:31 Agostino Sarubbo
2020-10-09  6:24 Georgy Yakovlev
2020-10-08 14:24 Sam James
2020-10-07  8:21 Georgy Yakovlev
2020-10-07  8:21 Georgy Yakovlev
2020-09-02  1:04 Sam James
2020-08-29 17:57 Thomas Deutschmann
2020-08-29  4:12 Sam James
2020-08-28 23:39 Sam James
2020-08-27 18:28 Georgy Yakovlev
2020-08-27 18:28 Georgy Yakovlev
2020-08-25  8:15 Georgy Yakovlev
2020-08-24 23:02 Georgy Yakovlev
2020-08-24 23:02 Georgy Yakovlev
2020-08-24 23:02 Georgy Yakovlev
2020-08-24 23:02 Georgy Yakovlev
2020-08-03 20:14 Georgy Yakovlev
2020-07-31  9:34 Georgy Yakovlev
2020-07-31  9:22 Georgy Yakovlev
2020-07-19  1:47 Sam James
2020-07-17 15:17 Agostino Sarubbo
2020-07-17 15:12 Agostino Sarubbo
2020-07-17 15:05 Agostino Sarubbo
2020-07-17 10:42 Sam James
2020-07-17  6:36 Georgy Yakovlev
2020-07-15 22:20 Georgy Yakovlev
2020-06-18 23:53 Georgy Yakovlev
2020-06-07  8:44 Agostino Sarubbo
2020-06-06 18:10 Agostino Sarubbo
2020-06-06 17:34 Agostino Sarubbo
2020-06-05  9:25 Georgy Yakovlev
2020-06-05  1:43 Georgy Yakovlev
2020-05-08  7:01 Georgy Yakovlev
2020-04-27  7:00 Georgy Yakovlev
2020-04-27  7:00 Georgy Yakovlev
2020-04-25  6:13 Georgy Yakovlev
2020-03-30 22:23 Georgy Yakovlev
2020-03-30 22:23 Georgy Yakovlev
2020-03-19  4:56 Georgy Yakovlev
2020-03-13  6:45 Georgy Yakovlev
2020-03-09  8:11 Mart Raudsepp
2020-03-03 21:48 Georgy Yakovlev
2020-03-03 15:13 Agostino Sarubbo
2020-03-03 14:37 Agostino Sarubbo
2020-02-29  7:46 Georgy Yakovlev
2020-02-11 18:48 Georgy Yakovlev
2020-02-11 12:46 Agostino Sarubbo
2020-02-11 11:09 Agostino Sarubbo
2020-01-30 20:38 Georgy Yakovlev
2020-01-30 19:24 Georgy Yakovlev
2020-01-29  7:51 Georgy Yakovlev
2019-12-24 15:02 Mikle Kolyada
2019-12-24 15:02 Mikle Kolyada
2019-12-21 15:09 Ulrich Müller
2019-12-20  0:53 Georgy Yakovlev
2019-12-20  0:53 Georgy Yakovlev
2019-12-20  0:53 Georgy Yakovlev
2019-12-20  0:53 Georgy Yakovlev
2019-11-07 23:00 Georgy Yakovlev
2019-10-07 23:09 Aaron Bauman
2019-10-06 21:18 Thomas Deutschmann
2019-10-03 11:38 Agostino Sarubbo
2019-09-29 21:00 Sergei Trofimovich
2019-09-26 22:06 Georgy Yakovlev
2019-08-16  2:44 Georgy Yakovlev
2019-07-09 18:53 Georgy Yakovlev
2019-07-09 18:53 Georgy Yakovlev
2019-07-09 18:53 Georgy Yakovlev
2019-07-08 23:01 Georgy Yakovlev
2019-06-19  0:35 Georgy Yakovlev
2019-06-19  0:35 Georgy Yakovlev
2019-05-24  9:06 Georgy Yakovlev
2019-05-17  0:15 Georgy Yakovlev
2019-05-16 23:56 Thomas Deutschmann
2019-05-15 14:54 Mikle Kolyada
2019-05-14 18:19 Georgy Yakovlev
2019-05-12 19:29 Thomas Deutschmann
2019-05-11 11:05 Mikle Kolyada
2019-04-26  4:48 Georgy Yakovlev
2019-04-15 19:42 Georgy Yakovlev
2019-04-12  4:08 Georgy Yakovlev
2019-03-15 20:33 Thomas Deutschmann
2019-03-15  0:07 Thomas Deutschmann
2019-03-15  0:07 Thomas Deutschmann
2019-03-11  5:00 Georgy Yakovlev
2019-03-11  5:00 Georgy Yakovlev
2019-03-07  4:40 Georgy Yakovlev
2019-01-18  1:19 Patrick McLean
2018-12-25 19:44 Sergei Trofimovich
2018-12-25 19:44 Sergei Trofimovich
2018-12-21  1:05 Patrick McLean
2018-12-08 20:05 Patrick McLean
2018-11-15  1:20 Thomas Deutschmann
2018-11-14 16:16 Dirkjan Ochtman
2018-10-19 18:17 Dirkjan Ochtman
2018-10-05 13:11 Dirkjan Ochtman
2018-10-04  7:59 Mikle Kolyada
2018-10-03 14:43 Dirkjan Ochtman
2018-10-01  8:23 Dirkjan Ochtman
2018-09-29 19:15 Dirkjan Ochtman
2018-09-29 13:22 Dirkjan Ochtman
2018-09-09  7:59 Mikle Kolyada
2018-08-08 13:36 Dirkjan Ochtman
2018-08-08 13:30 Dirkjan Ochtman
2018-08-08 13:30 Dirkjan Ochtman
2018-08-04 12:16 Dirkjan Ochtman
2018-08-04 12:16 Dirkjan Ochtman
2018-07-12 12:47 Dirkjan Ochtman
2018-07-11 14:44 Dirkjan Ochtman
2018-07-11 14:19 Dirkjan Ochtman
2018-06-11 12:08 Dirkjan Ochtman
2018-06-06 13:20 Dirkjan Ochtman
2018-06-01 19:28 Doug Goldstein
2018-05-16 12:22 Agostino Sarubbo
2018-05-15  1:46 Thomas Deutschmann
2018-05-14 14:41 Dirkjan Ochtman
2018-05-14 14:41 Dirkjan Ochtman
2018-04-11 13:05 Dirkjan Ochtman
2018-04-11 13:05 Dirkjan Ochtman
2018-01-24 18:56 Patrick McLean
2017-07-24 13:36 Dirkjan Ochtman
2017-03-19  9:15 Dirkjan Ochtman
2017-02-09 23:18 Patrick McLean
2017-02-02 20:48 Dirkjan Ochtman
2016-12-27 15:45 Dirkjan Ochtman
2016-11-19 20:39 Dirkjan Ochtman
2016-10-25 14:19 Lars Wendler
2016-10-25  0:13 Doug Goldstein
2016-10-25  0:11 Doug Goldstein
2016-04-14 20:19 Doug Goldstein
2016-04-05 15:10 Doug Goldstein
2016-03-24 14:21 Doug Goldstein
2016-01-22 22:17 Jauhien Piatlicki
2016-01-01 21:28 Jauhien Piatlicki
2015-09-27 18:06 Jauhien Piatlicki
2015-08-17 22:12 Jauhien Piatlicki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1733719782.0a2e3e056ba70d19df59f2a22a44e3a53abe933e.kangie@gentoo \
    --to=kangie@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox