summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2021-10-28 04:52:38 +0100
committerSam James <sam@gentoo.org>2021-10-28 04:52:38 +0100
commitd14561cb100beb18ac4df11726c116af4b0070b6 (patch)
tree9a94e196a734cb6a8ef8786f231b0e902ee64a07 /dev-lang/perl
parentnet-misc/networkmanager: fix resolvconf logic in Meson port (unkeyworded) (diff)
downloadgentoo-d14561cb100beb18ac4df11726c116af4b0070b6.tar.gz
gentoo-d14561cb100beb18ac4df11726c116af4b0070b6.tar.bz2
gentoo-d14561cb100beb18ac4df11726c116af4b0070b6.zip
dev-lang/perl: apply patch (prefix-only) for bootstrapping
Perl may not be able to find 'pwd' during bootstrap because coreutils may not be installed in the new Prefix yet. This is an upstream patch to allow falling back to the internal getcwd() to avoid build failure. Bug: https://github.com/Perl/perl5/issues/18703 Closes: https://bugs.gentoo.org/818172 See: https://github.com/Perl/perl5/pull/18791 Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'dev-lang/perl')
-rw-r--r--dev-lang/perl/files/perl-5.34.0-fallback-getcwd-pwd.patch263
-rw-r--r--dev-lang/perl/perl-5.34.0-r5.ebuild6
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