summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Trofimovich <slyfox@gentoo.org>2020-03-21 22:56:19 +0000
committerSergei Trofimovich <slyfox@gentoo.org>2020-03-21 22:59:45 +0000
commit3f58732f2213d0453bbbe165c4f08694b3653df7 (patch)
treecf7963db64b07c3f8ecdfc09b3a18abff7eca4ce /dev-lang/perl
parentmedia-sound/audacious: Drop 4.0_beta1 (diff)
downloadgentoo-3f58732f2213d0453bbbe165c4f08694b3653df7.tar.gz
gentoo-3f58732f2213d0453bbbe165c4f08694b3653df7.tar.bz2
gentoo-3f58732f2213d0453bbbe165c4f08694b3653df7.zip
dev-lang/perl: tweak for gcc-10, bug #708744
Perl's Configure detected gcc-10 as gcc-1 and applied -fpcc-struct-return option that breakw C ABI. This caused mini-interpreter to crash early at bootstrap time. The change is a direct backport of upstreams 6bd6308fcea3541e50565 ("Adapt Configure to GCC version 10"). Closes: https://bugs.gentoo.org/708744 Package-Manager: Portage-2.3.94, Repoman-2.3.21 Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Diffstat (limited to 'dev-lang/perl')
-rw-r--r--dev-lang/perl/files/perl-5.30.1-gcc-10.patch99
-rw-r--r--dev-lang/perl/perl-5.30.1.ebuild1
2 files changed, 100 insertions, 0 deletions
diff --git a/dev-lang/perl/files/perl-5.30.1-gcc-10.patch b/dev-lang/perl/files/perl-5.30.1-gcc-10.patch
new file mode 100644
index 000000000000..bb92527853f5
--- /dev/null
+++ b/dev-lang/perl/files/perl-5.30.1-gcc-10.patch
@@ -0,0 +1,99 @@
+https://bugs.gentoo.org/708744
+
+From 6bd6308fcea3541e505651bf8e8127a4a03d22cd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
+Date: Tue, 12 Nov 2019 09:19:18 +0100
+Subject: [PATCH] Adapt Configure to GCC version 10
+
+I got a notice from Jeff Law <law@redhat.com>:
+
+ Your particular package fails its testsuite. This was ultimately
+ tracked down to a Configure problem. The perl configure script treated
+ gcc-10 as gcc-1 and turned on -fpcc-struct-return. This is an ABI
+ changing flag and caused Perl to not be able to interact properly with
+ the dbm libraries on the system leading to a segfault.
+
+His proposed patch corrected only this one instance of the version
+mismatch. Reading the Configure script revealed more issues. This
+patch fixes all of them I found.
+
+Please note I do not have GCC 10 available, I tested it by faking the version
+with:
+
+--- a/Configure
++++ b/Configure
+@@ -4701,7 +4701,7 @@ else
+ fi
+ $rm -f try try.*
+ case "$gccversion" in
+-1*) cpp=`./loc gcc-cpp $cpp $pth` ;;
++1.*) cpp=`./loc gcc-cpp $cpp $pth` ;;
+ esac
+ case "$gccversion" in
+ '') gccosandvers='' ;;
+@@ -4741,7 +4741,7 @@ esac
+ # gcc 3.* complain about adding -Idirectories that they already know about,
+ # so we will take those off from locincpth.
+ case "$gccversion" in
+-3*)
++3.*)
+ echo "main(){}">try.c
+ for incdir in $locincpth; do
+ warn=`$cc $ccflags -I$incdir -c try.c 2>&1 | \
+@@ -5467,13 +5467,13 @@ fi
+ case "$hint" in
+ default|recommended)
+ case "$gccversion" in
+- 1*) dflt="$dflt -fpcc-struct-return" ;;
++ 1.*) dflt="$dflt -fpcc-struct-return" ;;
+ esac
+ case "$optimize:$DEBUGGING" in
+ *-g*:old) dflt="$dflt -DDEBUGGING";;
+ esac
+ case "$gccversion" in
+- 2*) if $test -d /etc/conf/kconfig.d &&
++ 2.*) if $test -d /etc/conf/kconfig.d &&
+ $contains _POSIX_VERSION $usrinc/sys/unistd.h >/dev/null 2>&1
+ then
+ # Interactive Systems (ISC) POSIX mode.
+@@ -5482,7 +5482,7 @@ default|recommended)
+ ;;
+ esac
+ case "$gccversion" in
+- 1*) ;;
++ 1.*) ;;
+ 2.[0-8]*) ;;
+ ?*) set strict-aliasing -fno-strict-aliasing
+ eval $checkccflag
+@@ -5600,7 +5600,7 @@ case "$cppflags" in
+ ;;
+ esac
+ case "$gccversion" in
+-1*) cppflags="$cppflags -D__GNUC__"
++1.*) cppflags="$cppflags -D__GNUC__"
+ esac
+ case "$mips_type" in
+ '');;
+@@ -23103,7 +23103,7 @@ fi
+
+ : add -D_FORTIFY_SOURCE if feasible and not already there
+ case "$gccversion" in
+-[456789].*) case "$optimize$ccflags" in
++[456789].*|[1-9][0-9]*) case "$optimize$ccflags" in
+ *-O*) case "$ccflags$cppsymbols" in
+ *_FORTIFY_SOURCE=*) # Don't add it again.
+ echo "You seem to have -D_FORTIFY_SOURCE already, not adding it." >&4
+--- a/cflags.SH
++++ b/cflags.SH
+@@ -156,7 +156,7 @@ esac
+
+ case "$gccversion" in
+ '') ;;
+-[12]*) ;; # gcc versions 1 (gasp!) and 2 are not good for this.
++[12].*) ;; # gcc versions 1 (gasp!) and 2 are not good for this.
+ Intel*) ;; # # Is that you, Intel C++?
+ #
+ # NOTE 1: the -std=c89 without -pedantic is a bit pointless.
+--
+2.25.0
+
diff --git a/dev-lang/perl/perl-5.30.1.ebuild b/dev-lang/perl/perl-5.30.1.ebuild
index 98cca9ef5715..a67b61738c8d 100644
--- a/dev-lang/perl/perl-5.30.1.ebuild
+++ b/dev-lang/perl/perl-5.30.1.ebuild
@@ -304,6 +304,7 @@ src_prepare() {
if use hppa ; then
epatch "${FILESDIR}/${PN}-5.26.2-hppa.patch" # bug 634162
fi
+ eapply "${FILESDIR}"/${PN}-5.30.1-gcc-10.patch # bug 708744
if [[ ${CHOST} == *-solaris* ]] ; then
# do NOT mess with nsl, on Solaris this is always necessary,