Initial Commit
This commit is contained in:
158
database/perl/lib/Module/CPANTS/Kwalitee/BrokenInstaller.pm
Normal file
158
database/perl/lib/Module/CPANTS/Kwalitee/BrokenInstaller.pm
Normal file
@@ -0,0 +1,158 @@
|
||||
package Module::CPANTS::Kwalitee::BrokenInstaller;
|
||||
use warnings;
|
||||
use strict;
|
||||
use File::Spec::Functions qw(catfile);
|
||||
|
||||
our $VERSION = '1.01';
|
||||
$VERSION =~ s/_//; ## no critic
|
||||
|
||||
sub order { 100 }
|
||||
|
||||
sub analyse {
|
||||
my $class = shift;
|
||||
my $me = shift;
|
||||
my $distdir = $me->distdir;
|
||||
|
||||
# inc/Module/Install.pm file
|
||||
my $mi = catfile($distdir, 'inc', 'Module', 'Install.pm');
|
||||
|
||||
# Must be okay if not using Module::Install
|
||||
return if not -f $mi;
|
||||
|
||||
open my $ih, '<', $mi
|
||||
or die "Could not open file '$mi' for checking the bad_installer metric: $!";
|
||||
my $buf;
|
||||
read $ih, $buf, 100000 or die $!;
|
||||
close $ih;
|
||||
if ($buf =~ /VERSION\s*=\s*("|'|)(\d+|\d*\.\d+(?:_\d+)?)\1/m) {
|
||||
$me->d->{module_install}{version} = my $version = $2;
|
||||
my $non_devel = $version;
|
||||
$non_devel =~ s/_\d+$//;
|
||||
if ($non_devel < 0.61 or $non_devel == 1.04) {
|
||||
$me->d->{module_install}{broken} = 1;
|
||||
}
|
||||
if ($non_devel < 0.89) {
|
||||
my $makefilepl = catfile($distdir, 'Makefile.PL');
|
||||
return if not -f $makefilepl;
|
||||
|
||||
open my $ih, '<', $makefilepl
|
||||
or die "Could not open file '$makefilepl' for checking the bad_installer metric: $!";
|
||||
local $/ = undef;
|
||||
my $mftext = <$ih>;
|
||||
close $ih;
|
||||
|
||||
return if not defined $mftext;
|
||||
|
||||
if ($mftext =~ /auto_install/) {
|
||||
$me->d->{module_install}{broken_auto_install} = 1;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($non_devel < 0.64) {
|
||||
$me->d->{module_install}{broken} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
# Unknown version (parsing $VERSION failed)
|
||||
$me->d->{module_install}{broken} = 1;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub kwalitee_indicators {
|
||||
return [
|
||||
{
|
||||
name => 'no_broken_module_install',
|
||||
error => q{This distribution uses an obsolete version of Module::Install. Versions of Module::Install prior to 0.61 might not work on some systems at all. Additionally if your Makefile.PL uses the 'auto_install()' feature, you need at least version 0.64. Also, 1.04 is known to be broken.},
|
||||
remedy => q{Upgrade the bundled version of Module::Install to the most current release. Alternatively, you can switch to another build system / installer that does not suffer from this problem. (ExtUtils::MakeMaker, Module::Build both of which have their own set of problems.)},
|
||||
code => sub {
|
||||
my $d = shift;
|
||||
return 1 unless exists $d->{module_install};
|
||||
$d->{module_install}{broken} ? 0 : 1;
|
||||
},
|
||||
details => sub {
|
||||
q{This distribution uses obsolete Module::Install version }.(shift->{module_install}{version});
|
||||
},
|
||||
},
|
||||
{
|
||||
name => 'no_broken_auto_install',
|
||||
error => q{This distribution uses an old version of Module::Install. Versions of Module::Install prior to 0.89 do not detect correctly that CPAN/CPANPLUS shell is used.},
|
||||
remedy => q{Upgrade the bundled version of Module::Install to at least 0.89, but preferably to the most current release. Alternatively, you can switch to another build system / installer that does not suffer from this problem. (ExtUtils::MakeMaker, Module::Build both of which have their own set of problems.)},
|
||||
code => sub {
|
||||
my $d = shift;
|
||||
return 1 unless exists $d->{module_install};
|
||||
$d->{module_install}{broken_auto_install} ? 0 : 1;
|
||||
},
|
||||
details => sub {
|
||||
q{This distribution uses obsolete Module::Install version }.(shift->{module_install}{version});
|
||||
},
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
1
|
||||
|
||||
__END__
|
||||
|
||||
=encoding UTF-8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Module::CPANTS::Kwalitee::BrokenInstaller - Check for broken Module::Install
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
Find out whether the distribution uses an outdated version of Module::Install.
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
=head2 Methods
|
||||
|
||||
=head3 order
|
||||
|
||||
Defines the order in which Kwalitee tests should be run.
|
||||
|
||||
Returns C<100>, as data generated by this should not be
|
||||
used by any other tests.
|
||||
|
||||
=head3 analyse
|
||||
|
||||
C<MCK::BrokenInstaller> checks whether the distribution uses Module::Install
|
||||
and if so whether it uses a reasonably current version of it (0.61 or later).
|
||||
|
||||
It also checks whether the F<Makefile.PL> uses the C<auto_install> feature.
|
||||
If so, C<Module::Install> should be at least version 0.64.
|
||||
|
||||
=head3 kwalitee_indicators
|
||||
|
||||
Returns the Kwalitee Indicators data structure.
|
||||
|
||||
=over
|
||||
|
||||
=item * no_broken_module_install
|
||||
|
||||
=item * no_broken_auto_install
|
||||
|
||||
=back
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
L<Module::CPANTS::Analyse>
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
L<Steffen Müller|https://metacpan.org/author/smueller>
|
||||
|
||||
L<Thomas Klausner|https://metacpan.org/author/domm>
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
Copyright © 2003–2009 L<Thomas Klausner|https://metacpan.org/author/domm>
|
||||
|
||||
Copyright © 2006 L<Steffen Müller|https://metacpan.org/author/smueller>
|
||||
|
||||
You may use and distribute this module according to the same terms
|
||||
that Perl is distributed under.
|
||||
Reference in New Issue
Block a user