commit:     c8de8474d60db06f2cb98b4a06b32d09a526fb44
Author:     Yiyang Wu <xgreenlandforwyy <AT> gmail <DOT> com>
AuthorDate: Tue Mar 23 03:47:27 2021 +0000
Commit:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
CommitDate: Sat Apr  3 22:10:15 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c8de8474

dev-lang/rust-bin: change interpreter for RAP (Gentoo prefix)

Use patchelf to change interpreter to the ld.so inside prefix

This fixes "GLIBC_*.*" not found bug when building with rust

Package-Manager: Portage-3.0.17, Repoman-3.0.2
Closes: https://bugs.gentoo.org/739574
Closes: https://github.com/gentoo/gentoo/pull/20073
Signed-off-by: Yiyang Wu <xgreenlandforwyy <AT> gmail.com>
Signed-off-by: Georgy Yakovlev <gyakovlev <AT> gentoo.org>

 dev-lang/rust-bin/rust-bin-1.46.0.ebuild    | 25 +++++++++++++++++++++++--
 dev-lang/rust-bin/rust-bin-1.47.0-r1.ebuild | 25 +++++++++++++++++++++++--
 dev-lang/rust-bin/rust-bin-1.48.0.ebuild    | 25 +++++++++++++++++++++++--
 dev-lang/rust-bin/rust-bin-1.49.0.ebuild    | 25 +++++++++++++++++++++++--
 dev-lang/rust-bin/rust-bin-1.50.0.ebuild    | 25 +++++++++++++++++++++++--
 dev-lang/rust-bin/rust-bin-1.51.0.ebuild    | 25 +++++++++++++++++++++++--
 6 files changed, 138 insertions(+), 12 deletions(-)

diff --git a/dev-lang/rust-bin/rust-bin-1.46.0.ebuild 
b/dev-lang/rust-bin/rust-bin-1.46.0.ebuild
index afa746bd1cb..cafc3fe0828 100644
--- a/dev-lang/rust-bin/rust-bin-1.46.0.ebuild
+++ b/dev-lang/rust-bin/rust-bin-1.46.0.ebuild
@@ -3,7 +3,7 @@
 
 EAPI=7
 
-inherit bash-completion-r1 rust-toolchain toolchain-funcs multilib-minimal
+inherit bash-completion-r1 prefix rust-toolchain toolchain-funcs 
multilib-minimal
 
 MY_P="rust-${PV}"
 
@@ -14,10 +14,11 @@ SRC_URI="$(rust_all_arch_uris ${MY_P})"
 LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
 SLOT="stable"
 KEYWORDS="amd64 arm arm64 ppc64 x86"
-IUSE="clippy cpu_flags_x86_sse2 doc rls rustfmt"
+IUSE="clippy cpu_flags_x86_sse2 doc prefix rls rustfmt"
 
 DEPEND=""
 RDEPEND=">=app-eselect/eselect-rust-20190311"
+BDEPEND="prefix? ( dev-util/patchelf )"
 
 REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
 
@@ -40,6 +41,16 @@ 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
 
@@ -61,6 +72,16 @@ multilib_src_install() {
                --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 $?
+       fi
+
        local rustc=rustc-bin-${PV}
        local rustdoc=rustdoc-bin-${PV}
        local rustgdb=rust-gdb-bin-${PV}

diff --git a/dev-lang/rust-bin/rust-bin-1.47.0-r1.ebuild 
b/dev-lang/rust-bin/rust-bin-1.47.0-r1.ebuild
index f8a6a6b2ddb..a700c7022ff 100644
--- a/dev-lang/rust-bin/rust-bin-1.47.0-r1.ebuild
+++ b/dev-lang/rust-bin/rust-bin-1.47.0-r1.ebuild
@@ -3,7 +3,7 @@
 
 EAPI=7
 
-inherit bash-completion-r1 rust-toolchain toolchain-funcs multilib-minimal
+inherit bash-completion-r1 prefix rust-toolchain toolchain-funcs 
multilib-minimal
 
 MY_P="rust-${PV}"
 
@@ -14,10 +14,11 @@ SRC_URI="$(rust_all_arch_uris ${MY_P})"
 LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
 SLOT="stable"
 KEYWORDS="amd64 arm arm64 ppc64 x86"
-IUSE="clippy cpu_flags_x86_sse2 doc rls rustfmt"
+IUSE="clippy cpu_flags_x86_sse2 doc prefix rls rustfmt"
 
 DEPEND=""
 RDEPEND=">=app-eselect/eselect-rust-20190311"
+BDEPEND="prefix? ( dev-util/patchelf )"
 
 REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
 
@@ -39,6 +40,16 @@ 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
 
@@ -60,6 +71,16 @@ multilib_src_install() {
                --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 $?
+       fi
+
        local symlinks=(
                cargo
                rustc

diff --git a/dev-lang/rust-bin/rust-bin-1.48.0.ebuild 
b/dev-lang/rust-bin/rust-bin-1.48.0.ebuild
index df9fff31cfd..79ddf1a8db5 100644
--- a/dev-lang/rust-bin/rust-bin-1.48.0.ebuild
+++ b/dev-lang/rust-bin/rust-bin-1.48.0.ebuild
@@ -3,7 +3,7 @@
 
 EAPI=7
 
-inherit bash-completion-r1 rust-toolchain toolchain-funcs multilib-minimal
+inherit bash-completion-r1 prefix rust-toolchain toolchain-funcs 
multilib-minimal
 
 MY_P="rust-${PV}"
 
@@ -14,10 +14,11 @@ SRC_URI="$(rust_all_arch_uris ${MY_P})"
 LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
 SLOT="stable"
 KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~x86"
-IUSE="clippy cpu_flags_x86_sse2 doc rls rustfmt"
+IUSE="clippy cpu_flags_x86_sse2 doc prefix rls rustfmt"
 
 DEPEND=""
 RDEPEND=">=app-eselect/eselect-rust-20190311"
+BDEPEND="prefix? ( dev-util/patchelf )"
 
 REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
 
@@ -39,6 +40,16 @@ 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
 
@@ -60,6 +71,16 @@ multilib_src_install() {
                --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 $?
+       fi
+
        local symlinks=(
                cargo
                rustc

diff --git a/dev-lang/rust-bin/rust-bin-1.49.0.ebuild 
b/dev-lang/rust-bin/rust-bin-1.49.0.ebuild
index df9fff31cfd..79ddf1a8db5 100644
--- a/dev-lang/rust-bin/rust-bin-1.49.0.ebuild
+++ b/dev-lang/rust-bin/rust-bin-1.49.0.ebuild
@@ -3,7 +3,7 @@
 
 EAPI=7
 
-inherit bash-completion-r1 rust-toolchain toolchain-funcs multilib-minimal
+inherit bash-completion-r1 prefix rust-toolchain toolchain-funcs 
multilib-minimal
 
 MY_P="rust-${PV}"
 
@@ -14,10 +14,11 @@ SRC_URI="$(rust_all_arch_uris ${MY_P})"
 LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
 SLOT="stable"
 KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~x86"
-IUSE="clippy cpu_flags_x86_sse2 doc rls rustfmt"
+IUSE="clippy cpu_flags_x86_sse2 doc prefix rls rustfmt"
 
 DEPEND=""
 RDEPEND=">=app-eselect/eselect-rust-20190311"
+BDEPEND="prefix? ( dev-util/patchelf )"
 
 REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
 
@@ -39,6 +40,16 @@ 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
 
@@ -60,6 +71,16 @@ multilib_src_install() {
                --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 $?
+       fi
+
        local symlinks=(
                cargo
                rustc

diff --git a/dev-lang/rust-bin/rust-bin-1.50.0.ebuild 
b/dev-lang/rust-bin/rust-bin-1.50.0.ebuild
index 403dbcaf3fc..137bfca5f95 100644
--- a/dev-lang/rust-bin/rust-bin-1.50.0.ebuild
+++ b/dev-lang/rust-bin/rust-bin-1.50.0.ebuild
@@ -3,7 +3,7 @@
 
 EAPI=7
 
-inherit bash-completion-r1 rust-toolchain toolchain-funcs multilib-minimal
+inherit bash-completion-r1 prefix rust-toolchain toolchain-funcs 
multilib-minimal
 
 MY_P="rust-${PV}"
 
@@ -14,10 +14,11 @@ SRC_URI="$(rust_all_arch_uris ${MY_P})"
 LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
 SLOT="stable"
 KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~x86"
-IUSE="clippy cpu_flags_x86_sse2 doc rls rustfmt"
+IUSE="clippy cpu_flags_x86_sse2 doc prefix rls rustfmt"
 
 DEPEND=""
 RDEPEND=">=app-eselect/eselect-rust-20190311"
+BDEPEND="prefix? ( dev-util/patchelf )"
 
 REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
 
@@ -40,6 +41,16 @@ 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
 
@@ -61,6 +72,16 @@ multilib_src_install() {
                --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 $?
+       fi
+
        local symlinks=(
                cargo
                rustc

diff --git a/dev-lang/rust-bin/rust-bin-1.51.0.ebuild 
b/dev-lang/rust-bin/rust-bin-1.51.0.ebuild
index 403dbcaf3fc..137bfca5f95 100644
--- a/dev-lang/rust-bin/rust-bin-1.51.0.ebuild
+++ b/dev-lang/rust-bin/rust-bin-1.51.0.ebuild
@@ -3,7 +3,7 @@
 
 EAPI=7
 
-inherit bash-completion-r1 rust-toolchain toolchain-funcs multilib-minimal
+inherit bash-completion-r1 prefix rust-toolchain toolchain-funcs 
multilib-minimal
 
 MY_P="rust-${PV}"
 
@@ -14,10 +14,11 @@ SRC_URI="$(rust_all_arch_uris ${MY_P})"
 LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
 SLOT="stable"
 KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~x86"
-IUSE="clippy cpu_flags_x86_sse2 doc rls rustfmt"
+IUSE="clippy cpu_flags_x86_sse2 doc prefix rls rustfmt"
 
 DEPEND=""
 RDEPEND=">=app-eselect/eselect-rust-20190311"
+BDEPEND="prefix? ( dev-util/patchelf )"
 
 REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
 
@@ -40,6 +41,16 @@ 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
 
@@ -61,6 +72,16 @@ multilib_src_install() {
                --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 $?
+       fi
+
        local symlinks=(
                cargo
                rustc

Reply via email to