Hi,
I have had the same problem last couple of days, finally could track
what is happening:
- Exit.pm installs a handler for __DIE__
- Vendor.pm expects that eval will return an error message in $@ and
all the code below the eval that was supposed to use the default vendor
is never reached. The handler for __DIE__ is called instead and the
program terminates with exit code 127.
- As a result dpkg-source -b . dies with exit code 127 and no error
message is shown, which itself makes the problem very hard to track and
report.
I would suggest two things:
1) Fix the code in Vendor.pm to avoid the global handler around eval
and make the code work as initially planned (patch attached)
2) Add some error message/stack dump/whatever in Exit.pm, so that
another similar problem is diagnosed and reported in a more easy way. I
have no idea what would be the best format for this and that's why can
not propose a patch.
With best regards,
b.
--- Vendor.pm.orig 2020-07-23 03:01:40.528128860 +0300
+++ Vendor.pm 2020-07-23 03:01:56.272129613 +0300
@@ -187,11 +187,14 @@ sub get_vendor_object {
push @names, $vendor, lc($vendor), ucfirst($vendor), ucfirst(lc($vendor));
foreach my $name (@names) {
+ my $oldsig=@SIG{__DIE__};
+ @SIG{__DIE__}='DEFAULT';
eval qq{
pop \@INC if \$INC[-1] eq '.';
require Dpkg::Vendor::$name;
\$obj = Dpkg::Vendor::$name->new();
};
+ @SIG{__DIE__}=$oldsig;
unless ($@) {
$OBJECT_CACHE{$vendor} = $obj;
return $obj;