diff options
Diffstat (limited to 'dev-lang/perl')
-rw-r--r-- | dev-lang/perl/files/perl-5.34.0-fallback-getcwd-pwd.patch | 263 | ||||
-rw-r--r-- | dev-lang/perl/perl-5.34.0-r5.ebuild | 6 |
2 files changed, 269 insertions, 0 deletions
diff --git a/dev-lang/perl/files/perl-5.34.0-fallback-getcwd-pwd.patch b/dev-lang/perl/files/perl-5.34.0-fallback-getcwd-pwd.patch new file mode 100644 index 000000000000..849a09a39a05 --- /dev/null +++ b/dev-lang/perl/files/perl-5.34.0-fallback-getcwd-pwd.patch @@ -0,0 +1,263 @@ +https://github.com/Perl/perl5/pull/18791 +https://github.com/Perl/perl5/issues/18703 +https://bugs.gentoo.org/818172 + +From: Tony Cook <tony@develop-help.com> +Date: Tue, 4 May 2021 14:55:50 +1000 +Subject: [PATCH 1/4] remove code that assuming finding pwd on the path is + reasonable + +We deliberately clear PATH when invoking pwd, so this search is +useless. +--- + dist/PathTools/Cwd.pm | 14 -------------- + 1 file changed, 14 deletions(-) + +diff --git a/dist/PathTools/Cwd.pm b/dist/PathTools/Cwd.pm +index 6a1d2f17ee57..49c12885b32e 100644 +--- a/dist/PathTools/Cwd.pm ++++ b/dist/PathTools/Cwd.pm +@@ -213,20 +213,6 @@ sub _backtick_pwd { + # we take care not to override an existing definition for cwd(). + + unless ($METHOD_MAP{$^O}{cwd} or defined &cwd) { +- # The pwd command is not available in some chroot(2)'ed environments +- my $sep = $Config::Config{path_sep} || ':'; +- my $os = $^O; # Protect $^O from tainting +- +- +- # Try again to find a pwd, this time searching the whole PATH. +- if (defined $ENV{PATH} and $os ne 'MSWin32') { # no pwd on Windows +- my @candidates = split($sep, $ENV{PATH}); +- while (!$found_pwd_cmd and @candidates) { +- my $candidate = shift @candidates; +- $found_pwd_cmd = 1 if -x "$candidate/pwd"; +- } +- } +- + if( $found_pwd_cmd ) + { + *cwd = \&_backtick_pwd; + +From e5378ea37c6c4910107975d8099c1d552af0c7b3 Mon Sep 17 00:00:00 2001 +From: Tony Cook <tony@develop-help.com> +Date: Wed, 5 May 2021 10:12:31 +1000 +Subject: [PATCH 2/4] don't fallback to simple pwd + +When _backtick_pwd invokes $pwd_cmd it first clears the PATH, and since +the command has no shell metacharacters, it perl won't invoke the +shell, so it will always fail. + +An alternative here might be to use "/bin/sh -c pwd" but there's no +guarantee that pwd is available as a shell builtin. +--- + dist/PathTools/Cwd.pm | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/dist/PathTools/Cwd.pm b/dist/PathTools/Cwd.pm +index 49c12885b32e..fbe683e20b8a 100644 +--- a/dist/PathTools/Cwd.pm ++++ b/dist/PathTools/Cwd.pm +@@ -181,12 +181,6 @@ if ($^O =~ /android/) { + } + + my $found_pwd_cmd = defined($pwd_cmd); +-unless ($pwd_cmd) { +- # Isn't this wrong? _backtick_pwd() will fail if someone has +- # pwd in their path but it is not /bin/pwd or /usr/bin/pwd? +- # See [perl #16774]. --jhi +- $pwd_cmd = 'pwd'; +-} + + # Lazy-load Carp + sub _carp { require Carp; Carp::carp(@_) } + +From e14ffd3c21efe708a5fb5e25f29d61ccb6ee0a0a Mon Sep 17 00:00:00 2001 +From: Tony Cook <tony@develop-help.com> +Date: Tue, 4 May 2021 15:04:25 +1000 +Subject: [PATCH 3/4] avoid a prototype warning assigning \&getcwd to *cwd + +This would produce a warning if we fallback to using getcwd() where +getcwd() has a prototype. +--- + dist/PathTools/Cwd.pm | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/dist/PathTools/Cwd.pm b/dist/PathTools/Cwd.pm +index fbe683e20b8a..b6dc0b798e8c 100644 +--- a/dist/PathTools/Cwd.pm ++++ b/dist/PathTools/Cwd.pm +@@ -212,7 +212,8 @@ unless ($METHOD_MAP{$^O}{cwd} or defined &cwd) { + *cwd = \&_backtick_pwd; + } + else { +- *cwd = \&getcwd; ++ # getcwd() might have an empty prototype ++ *cwd = sub { getcwd(); }; + } + } + + +From e725e6ced4d2bbb6a5866992509c2ac3e995c228 Mon Sep 17 00:00:00 2001 +From: Tony Cook <tony@develop-help.com> +Date: Wed, 12 May 2021 12:24:59 +1000 +Subject: [PATCH 4/4] bump PathTools to 3.81 + +--- + dist/PathTools/Cwd.pm | 2 +- + dist/PathTools/lib/File/Spec.pm | 2 +- + dist/PathTools/lib/File/Spec/AmigaOS.pm | 2 +- + dist/PathTools/lib/File/Spec/Cygwin.pm | 2 +- + dist/PathTools/lib/File/Spec/Epoc.pm | 2 +- + dist/PathTools/lib/File/Spec/Functions.pm | 2 +- + dist/PathTools/lib/File/Spec/Mac.pm | 2 +- + dist/PathTools/lib/File/Spec/OS2.pm | 2 +- + dist/PathTools/lib/File/Spec/Unix.pm | 2 +- + dist/PathTools/lib/File/Spec/VMS.pm | 2 +- + dist/PathTools/lib/File/Spec/Win32.pm | 2 +- + 11 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/dist/PathTools/Cwd.pm b/dist/PathTools/Cwd.pm +index b6dc0b798e8c..4a9c786c1c3c 100644 +--- a/dist/PathTools/Cwd.pm ++++ b/dist/PathTools/Cwd.pm +@@ -3,7 +3,7 @@ use strict; + use Exporter; + + +-our $VERSION = '3.80'; ++our $VERSION = '3.81'; + my $xs_version = $VERSION; + $VERSION =~ tr/_//d; + +diff --git a/dist/PathTools/lib/File/Spec.pm b/dist/PathTools/lib/File/Spec.pm +index 30d883b61b3e..fe738acf58bd 100644 +--- a/dist/PathTools/lib/File/Spec.pm ++++ b/dist/PathTools/lib/File/Spec.pm +@@ -2,7 +2,7 @@ package File::Spec; + + use strict; + +-our $VERSION = '3.80'; ++our $VERSION = '3.81'; + $VERSION =~ tr/_//d; + + my %module = ( +diff --git a/dist/PathTools/lib/File/Spec/AmigaOS.pm b/dist/PathTools/lib/File/Spec/AmigaOS.pm +index fd9da81cdf5a..1398379ca57c 100644 +--- a/dist/PathTools/lib/File/Spec/AmigaOS.pm ++++ b/dist/PathTools/lib/File/Spec/AmigaOS.pm +@@ -3,7 +3,7 @@ package File::Spec::AmigaOS; + use strict; + require File::Spec::Unix; + +-our $VERSION = '3.80'; ++our $VERSION = '3.81'; + $VERSION =~ tr/_//d; + + our @ISA = qw(File::Spec::Unix); +diff --git a/dist/PathTools/lib/File/Spec/Cygwin.pm b/dist/PathTools/lib/File/Spec/Cygwin.pm +index 953c23361a10..55d551ce0663 100644 +--- a/dist/PathTools/lib/File/Spec/Cygwin.pm ++++ b/dist/PathTools/lib/File/Spec/Cygwin.pm +@@ -3,7 +3,7 @@ package File::Spec::Cygwin; + use strict; + require File::Spec::Unix; + +-our $VERSION = '3.80'; ++our $VERSION = '3.81'; + $VERSION =~ tr/_//d; + + our @ISA = qw(File::Spec::Unix); +diff --git a/dist/PathTools/lib/File/Spec/Epoc.pm b/dist/PathTools/lib/File/Spec/Epoc.pm +index fcb9e894e33c..4cde744231aa 100644 +--- a/dist/PathTools/lib/File/Spec/Epoc.pm ++++ b/dist/PathTools/lib/File/Spec/Epoc.pm +@@ -2,7 +2,7 @@ package File::Spec::Epoc; + + use strict; + +-our $VERSION = '3.80'; ++our $VERSION = '3.81'; + $VERSION =~ tr/_//d; + + require File::Spec::Unix; +diff --git a/dist/PathTools/lib/File/Spec/Functions.pm b/dist/PathTools/lib/File/Spec/Functions.pm +index e14ad2f74538..4b3d7bbde130 100644 +--- a/dist/PathTools/lib/File/Spec/Functions.pm ++++ b/dist/PathTools/lib/File/Spec/Functions.pm +@@ -3,7 +3,7 @@ package File::Spec::Functions; + use File::Spec; + use strict; + +-our $VERSION = '3.80'; ++our $VERSION = '3.81'; + $VERSION =~ tr/_//d; + + require Exporter; +diff --git a/dist/PathTools/lib/File/Spec/Mac.pm b/dist/PathTools/lib/File/Spec/Mac.pm +index 8026edcb1261..51d00a01f6f7 100644 +--- a/dist/PathTools/lib/File/Spec/Mac.pm ++++ b/dist/PathTools/lib/File/Spec/Mac.pm +@@ -4,7 +4,7 @@ use strict; + use Cwd (); + require File::Spec::Unix; + +-our $VERSION = '3.80'; ++our $VERSION = '3.81'; + $VERSION =~ tr/_//d; + + our @ISA = qw(File::Spec::Unix); +diff --git a/dist/PathTools/lib/File/Spec/OS2.pm b/dist/PathTools/lib/File/Spec/OS2.pm +index 3c35ba99b48a..57d67ba01e93 100644 +--- a/dist/PathTools/lib/File/Spec/OS2.pm ++++ b/dist/PathTools/lib/File/Spec/OS2.pm +@@ -4,7 +4,7 @@ use strict; + use Cwd (); + require File::Spec::Unix; + +-our $VERSION = '3.80'; ++our $VERSION = '3.81'; + $VERSION =~ tr/_//d; + + our @ISA = qw(File::Spec::Unix); +diff --git a/dist/PathTools/lib/File/Spec/Unix.pm b/dist/PathTools/lib/File/Spec/Unix.pm +index c06d18f46819..df98f580c3ea 100644 +--- a/dist/PathTools/lib/File/Spec/Unix.pm ++++ b/dist/PathTools/lib/File/Spec/Unix.pm +@@ -3,7 +3,7 @@ package File::Spec::Unix; + use strict; + use Cwd (); + +-our $VERSION = '3.80'; ++our $VERSION = '3.81'; + $VERSION =~ tr/_//d; + + =head1 NAME +diff --git a/dist/PathTools/lib/File/Spec/VMS.pm b/dist/PathTools/lib/File/Spec/VMS.pm +index 9b78c8b4bc6e..bbff3ad7d807 100644 +--- a/dist/PathTools/lib/File/Spec/VMS.pm ++++ b/dist/PathTools/lib/File/Spec/VMS.pm +@@ -4,7 +4,7 @@ use strict; + use Cwd (); + require File::Spec::Unix; + +-our $VERSION = '3.80'; ++our $VERSION = '3.81'; + $VERSION =~ tr/_//d; + + our @ISA = qw(File::Spec::Unix); +diff --git a/dist/PathTools/lib/File/Spec/Win32.pm b/dist/PathTools/lib/File/Spec/Win32.pm +index 153744202338..b38419cdf1a6 100644 +--- a/dist/PathTools/lib/File/Spec/Win32.pm ++++ b/dist/PathTools/lib/File/Spec/Win32.pm +@@ -5,7 +5,7 @@ use strict; + use Cwd (); + require File::Spec::Unix; + +-our $VERSION = '3.80'; ++our $VERSION = '3.81'; + $VERSION =~ tr/_//d; + + our @ISA = qw(File::Spec::Unix); + diff --git a/dev-lang/perl/perl-5.34.0-r5.ebuild b/dev-lang/perl/perl-5.34.0-r5.ebuild index ba7a5964e287..e066689b21b8 100644 --- a/dev-lang/perl/perl-5.34.0-r5.ebuild +++ b/dev-lang/perl/perl-5.34.0-r5.ebuild @@ -393,6 +393,12 @@ src_prepare() { "Fix GDBM_File to compile with version 1.20 and earlier"\ "https://bugs.gentoo.org/802945" + if use prefix ; then + add_patch "${FILESDIR}/${P}"-fallback-getcwd-pwd.patch "0102-5.34.0-fallback-get-cwd-pwd.patch"\ + "Fix installation during Prefix bootstrap (finding 'pwd' from coreutils)"\ + "https://bugs.gentoo.org/818172" + fi + if [[ ${CHOST} == *-solaris* ]] ; then # do NOT mess with nsl, on Solaris this is always necessary, # when -lsocket is used e.g. to get h_errno |