patches: packages: perl: backport GCC10 build fix
cherry-picked from openwrt/packages openwrt-19.07 branch commit 445c3d8f86b85c2c6fc4a8d7a003b06ca219ffb1
This commit is contained in:
		
							parent
							
								
									0b45624b09
								
							
						
					
					
						commit
						e4241c0c7e
					
				| @ -0,0 +1,130 @@ | ||||
| From: Ken Wong <xinxijishuwyq@gmail.com> | ||||
| Date: Sat, 16 May 2020 13:30:42 +0800 | ||||
| Subject: perl: fix build failure in GCC10 | ||||
| 
 | ||||
| The perl Configure file was matching GCC 10 against "1*" and treating it | ||||
| as GCC 1, causing ABI breakage and segfaults. | ||||
| 
 | ||||
| Cherry-pick the upstream patch which fixes it to check against (e.g) | ||||
| "1.*" instead, which will make it work for hundreds more GCC versions | ||||
| to come. | ||||
| 
 | ||||
| https://github.com/Perl/perl5/commit/6bd6308fcea3541 | ||||
|  "Adapt Configure to GCC version 10" | ||||
| 
 | ||||
| Also includes the previous commit just adding GCC 8 and 9 to one case: | ||||
| https://github.com/Perl/perl5/commit/ae195500577d707 | ||||
|  "Add gcc-8 and gcc-9 for FORTIFY_SOURCE" | ||||
| 
 | ||||
| Signed-off-by: Ken Wong <xinxijishuwyq@gmail.com> | ||||
| (cherry picked from commit 65578a43f0d12c02888df00b6fdc90c73a02875c) | ||||
| 
 | ||||
| diff --git a/lang/perl/patches/999-fix-build-failure-against-gcc-10.patch b/lang/perl/patches/999-fix-build-failure-against-gcc-10.patch
 | ||||
| new file mode 100644 | ||||
| index 0000000000000000000000000000000000000000..55d9a0e8ae15b400294b6a20b60155cecd26db0b
 | ||||
| --- /dev/null
 | ||||
| +++ b/lang/perl/patches/999-fix-build-failure-against-gcc-10.patch
 | ||||
| @@ -0,0 +1,103 @@
 | ||||
| +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.
 | ||||
| +
 | ||||
| +---
 | ||||
| + Configure | 14 +++++++-------
 | ||||
| + cflags.SH |  2 +-
 | ||||
| + 2 files changed, 8 insertions(+), 8 deletions(-)
 | ||||
| +
 | ||||
| +diff --git a/Configure b/Configure
 | ||||
| +index fad1c9f2b1..706c0b64ed 100755
 | ||||
| +--- 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
 | ||||
| +-[4567].*)	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
 | ||||
| +diff --git a/cflags.SH b/cflags.SH
 | ||||
| +index e60742fed1..f1bcd6c38e 100755
 | ||||
| +--- 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.17.1
 | ||||
| +
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user