commit:     2b297eb4b3b9114b1663b5affd9e3a9f0c22fedd
Author:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Sat Feb  3 01:38:38 2018 +0000
Commit:     Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Sat Feb  3 01:38:38 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2b297eb4

sys-libs/glibc: restore ability to switch single->multiple ABIs

To recover broken system automatically from bug #646424
we need to skip IA32 ABI checks as those require multiabi
glibc checks at glibc build time.

There is no need to impose it as a requirement. Fail test
only if it compiled successfully and failed at runtime.

Bug: https://bugs.gentoo.org/326693
Bug: https://bugs.gentoo.org/646424
Package-Manager: Portage-2.3.20, Repoman-2.3.6

 sys-libs/glibc/glibc-2.27-r1.ebuild | 14 ++++++++++----
 sys-libs/glibc/glibc-9999.ebuild    | 14 ++++++++++----
 2 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/sys-libs/glibc/glibc-2.27-r1.ebuild 
b/sys-libs/glibc/glibc-2.27-r1.ebuild
index 83df2bf9e6b..c22600909bf 100644
--- a/sys-libs/glibc/glibc-2.27-r1.ebuild
+++ b/sys-libs/glibc/glibc-2.27-r1.ebuild
@@ -648,13 +648,19 @@ sanity_prechecks() {
        # ABI-specific checks follow here. Hey, we have a lot more specific 
conditions that
        # we test for...
        if ! is_crosscompile ; then
-
                if use amd64 && use multilib && [[ ${MERGE_TYPE} != "binary" ]] 
; then
                        ebegin "Checking that IA32 emulation is enabled in the 
running kernel"
                        echo 'int main(){return 0;}' > 
"${T}/check-ia32-emulation.c"
-                       "${CC-${CHOST}-gcc}" ${CFLAGS_x86} 
"${T}/check-ia32-emulation.c" -o "${T}/check-ia32-emulation.elf32"
-                       "${T}/check-ia32-emulation.elf32"
-                       local STAT=$?
+                       local STAT
+                       if "${CC-${CHOST}-gcc}" ${CFLAGS_x86} 
"${T}/check-ia32-emulation.c" -o "${T}/check-ia32-emulation.elf32"; then
+                               "${T}/check-ia32-emulation.elf32"
+                               STAT=$?
+                       else
+                               # Don't fail here to allow single->multi ABI 
switch
+                               # or recover from breakage like bug #646424
+                               ewarn "Failed to compile the ABI test. Broken 
host glibc?"
+                               STAT=0
+                       fi
                        rm -f "${T}/check-ia32-emulation.elf32"
                        eend $STAT
                        [[ $STAT -eq 0 ]] || die "CONFIG_IA32_EMULATION must be 
enabled in the kernel to compile a multilib glibc."

diff --git a/sys-libs/glibc/glibc-9999.ebuild b/sys-libs/glibc/glibc-9999.ebuild
index ec4e7fdcfb1..d70a1523ed9 100644
--- a/sys-libs/glibc/glibc-9999.ebuild
+++ b/sys-libs/glibc/glibc-9999.ebuild
@@ -648,13 +648,19 @@ sanity_prechecks() {
        # ABI-specific checks follow here. Hey, we have a lot more specific 
conditions that
        # we test for...
        if ! is_crosscompile ; then
-
                if use amd64 && use multilib && [[ ${MERGE_TYPE} != "binary" ]] 
; then
                        ebegin "Checking that IA32 emulation is enabled in the 
running kernel"
                        echo 'int main(){return 0;}' > 
"${T}/check-ia32-emulation.c"
-                       "${CC-${CHOST}-gcc}" ${CFLAGS_x86} 
"${T}/check-ia32-emulation.c" -o "${T}/check-ia32-emulation.elf32"
-                       "${T}/check-ia32-emulation.elf32"
-                       local STAT=$?
+                       local STAT
+                       if "${CC-${CHOST}-gcc}" ${CFLAGS_x86} 
"${T}/check-ia32-emulation.c" -o "${T}/check-ia32-emulation.elf32"; then
+                               "${T}/check-ia32-emulation.elf32"
+                               STAT=$?
+                       else
+                               # Don't fail here to allow single->multi ABI 
switch
+                               # or recover from breakage like bug #646424
+                               ewarn "Failed to compile the ABI test. Broken 
host glibc?"
+                               STAT=0
+                       fi
                        rm -f "${T}/check-ia32-emulation.elf32"
                        eend $STAT
                        [[ $STAT -eq 0 ]] || die "CONFIG_IA32_EMULATION must be 
enabled in the kernel to compile a multilib glibc."

Reply via email to