diff options
Diffstat (limited to 'debian/patches/fixes/eumm-usrmerge.diff')
-rw-r--r-- | debian/patches/fixes/eumm-usrmerge.diff | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/debian/patches/fixes/eumm-usrmerge.diff b/debian/patches/fixes/eumm-usrmerge.diff new file mode 100644 index 0000000..e228aaa --- /dev/null +++ b/debian/patches/fixes/eumm-usrmerge.diff @@ -0,0 +1,122 @@ +From: =?utf-8?q?Dagfinn_Ilmari_Manns=C3=A5ker?= <ilmari@ilmari.org> +Date: Tue, 13 Nov 2018 16:00:48 +0000 +Subject: Avoid mangling /bin non-perl shebangs on merged-/usr systems + +If the shebang is absolute and exists in PATH, but was not the first +one found, leave it alone if it's actually the same file as first one. + +This avoids packages built on merged-/usr systems with /usr/bin before +/bin in the path breaking when installed on systems without merged +/usr. See e.g. https://bugs.debian.org/913637. + +Origin: backport, https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/commit/9766f9c5ffd1ac915d75b309cd18c9f42794b710 +Bug: https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker/pull/330 +Bug-Debian: https://bugs.debian.org/913637 +--- + cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm | 22 +++++++++++++-- + cpan/ExtUtils-MakeMaker/t/fixin.t | 33 +++++++++++++++++++++- + .../t/lib/MakeMaker/Test/Setup/BFD.pm | 3 ++ + 3 files changed, 55 insertions(+), 3 deletions(-) + +diff --git a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm +index bb41b27..2e33d0a 100644 +--- a/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm ++++ b/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm +@@ -1243,8 +1243,8 @@ sub _fixin_replace_shebang { + my ( $self, $file, $line ) = @_; + + # Now figure out the interpreter name. +- my ( $cmd, $arg ) = split ' ', $line, 2; +- $cmd =~ s!^.*/!!; ++ my ( $origcmd, $arg ) = split ' ', $line, 2; ++ (my $cmd = $origcmd) =~ s!^.*/!!; + + # Now look (in reverse) for interpreter in absolute PATH (unless perl). + my $interpreter; +@@ -1270,6 +1270,24 @@ sub _fixin_replace_shebang { + $interpreter = $maybefile; + } + } ++ ++ # If the shebang is absolute and exists in PATH, but was not ++ # the first one found, leave it alone if it's actually the ++ # same file as first one. This avoids packages built on ++ # merged-/usr systems with /usr/bin before /bin in the path ++ # breaking when installed on systems without merged /usr ++ if ($origcmd ne $interpreter and $self->file_name_is_absolute($origcmd)) { ++ my $origdir = dirname($origcmd); ++ if ($self->maybe_command($origcmd) && grep { $_ eq $origdir } @absdirs) { ++ my ($odev, $oino) = stat $origcmd; ++ my ($idev, $iino) = stat $interpreter; ++ if ($odev == $idev && $oino == $iino) { ++ warn "$origcmd is the same as $interpreter, leaving alone" ++ if $Verbose; ++ $interpreter = $origcmd; ++ } ++ } ++ } + } + + # Figure out how to invoke interpreter on this machine. +diff --git a/cpan/ExtUtils-MakeMaker/t/fixin.t b/cpan/ExtUtils-MakeMaker/t/fixin.t +index 061e456..872b023 100644 +--- a/cpan/ExtUtils-MakeMaker/t/fixin.t ++++ b/cpan/ExtUtils-MakeMaker/t/fixin.t +@@ -9,7 +9,7 @@ BEGIN { + + use File::Spec; + +-use Test::More tests => 22; ++use Test::More tests => 30; + + use Config; + use TieOut; +@@ -123,3 +123,34 @@ END + } + ); + } ++ ++SKIP: { ++ eval { chmod(0755, "usrbin/interp") } ++ or skip "no chmod", 8; ++ ++ my $dir = getcwd(); ++ local $ENV{PATH} = join $Config{path_sep}, map "$dir/$_", qw(usrbin bin); ++ ++ test_fixin(<<END, ++#!$dir/bin/interp ++ ++blah blah blah ++END ++ sub { ++ is $_[0], "#!$dir/usrbin/interp\n", 'interpreter updated to one found in PATH'; ++ } ++ ); ++ ++ eval { symlink("../usrbin/interp", "bin/interp") } ++ or skip "no symlinks", 4; ++ ++ test_fixin(<<END, ++#!$dir/bin/interp ++ ++blah blah blah ++END ++ sub { ++ is $_[0], "#!$dir/bin/interp\n", 'symlinked interpreter later in PATH not mangled'; ++ } ++ ); ++} +diff --git a/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/BFD.pm b/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/BFD.pm +index 3d093fc..cfe49e5 100644 +--- a/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/BFD.pm ++++ b/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/BFD.pm +@@ -53,6 +53,9 @@ program - this is a program + =cut + + 1; ++END ++ 'Big-Dummy/usrbin/interp' => <<'END', ++This is a dummy interpreter + END + + 'Big-Dummy/test.pl' => <<'END', |