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."
