App-ModuleBuildTiny
view release on metacpan or search on metacpan
lib/App/ModuleBuildTiny/Dist.pm view on Meta::CPAN
my $extra = shift;
return delete $extra->{name} if defined $extra->{name};
return basename(rel2abs('.')) =~ s/ (?: ^ (?: perl|p5 ) - | [\-\.]pm $ )//xr;
}
sub detect_license {
my ($data, $filename, $authors, $mergedata) = @_;
if ($mergedata->{license} && @{$mergedata->{license}} == 1) {
require Software::LicenseUtils;
Software::LicenseUtils->VERSION(0.103014);
my $spec_version = $mergedata->{'meta-spec'} && $mergedata->{'meta-spec'}{version} ? $mergedata->{'meta-spec'}{version} : 2;
my @guess = Software::LicenseUtils->guess_license_from_meta_key($mergedata->{license}[0], $spec_version);
die "Couldn't parse license from metamerge: @guess\n" if @guess > 1;
if (@guess) {
my $class = $guess[0];
require_module($class);
return $class->new({holder => join(', ', @{$authors})});
}
}
my (@license_sections) = grep { /licen[cs]e|licensing|copyright|legal|authors?\b/i } $data->pod_inside;
for my $license_section (@license_sections) {
next unless defined ( my $license_pod = $data->pod($license_section) );
require Software::LicenseUtils;
Software::LicenseUtils->VERSION(0.103014);
my $content = "=head1 LICENSE\n" . $license_pod;
my @guess = Software::LicenseUtils->guess_license_from_pod($content);
next if not @guess;
die "Couldn't parse license from $license_section in $filename: @guess\n" if @guess != 1;
my $class = $guess[0];
my ($year) = $license_pod =~ /.*? copyright .*? ([\d\-]+)/;
require_module($class);
return $class->new({holder => join(', ', @{$authors}), year => $year});
}
die "No license found in $filename\n";
}
sub get_changes {
my $self = shift;
my $version = quotemeta $self->meta->version;
open my $changes, '<:raw', 'Changes' or die "Couldn't open Changes file";
my (undef, @content) = grep { / ^ $version (?:-TRIAL)? (?:\s+|$) /x ... /^\S/ } <$changes>;
pop @content while @content && $content[-1] =~ / ^ (?: \S | \s* $ ) /x;
return @content;
}
sub preflight_check {
my ($self, %opts) = @_;
die "Changes appears to be empty\n" if not $self->get_changes;
my $meta_version = $self->{meta}->version;
die "Version is still zero\n" if $meta_version eq '0.000';
die "Abstract is not set\n" if $self->{meta}->abstract eq 'INSERT YOUR ABSTRACT HERE';
if ($opts{tag}) {
require Git::Wrapper;
my $git = Git::Wrapper->new('.');
die "Dirty state in repository\n" if $git->status->is_dirty;
die "Tag v$meta_version already exists\n" if eval { $git->rev_parse({ quiet => 1, verify => 1}, "v$meta_version") };
}
my $module_name = $self->{meta}->name =~ s/-/::/gr;
my $detected_version = $self->{data}->version($module_name);
die sprintf "Version mismatch between module and meta, did you forgot to run regenerate? (%s versus %s)\n", $detected_version, $meta_version if $detected_version != $meta_version;
}
sub scan_files {
my ($files, $omit, %extra_args) = @_;
my $combined = CPAN::Meta::Requirements->new;
require Perl::PrereqScanner;
my $scanner = Perl::PrereqScanner->new(\%extra_args);
for my $file (@{$files}) {
my $prereqs = $scanner->scan_file($file);
$combined->add_requirements($prereqs);
}
$combined->clear_requirement($_) for @{$omit};
return $combined
}
sub _scan_prereqs {
my ($omit, %opts) = @_;
my (@runtime_files, @test_files, @planner_files);
File::Find::find(sub { push @runtime_files, $File::Find::name if -f && /\.pm$/ }, 'lib') if -d 'lib';
File::Find::find(sub { push @runtime_files, $File::Find::name if -f }, 'script') if -d 'script';
File::Find::find(sub { push @test_files, $File::Find::name if -f && /\.(t|pm)$/ }, 't') if -d 't';
my $runtime = scan_files(\@runtime_files, $omit);
my $test = scan_files(\@test_files, $omit);
my %prereqs = (
runtime => { requires => $runtime->as_string_hash },
test => { requires => $test->as_string_hash },
);
if (-d 'planner') {
File::Find::find(sub { push @planner_files, $File::Find::name if -f && /\.pl$/ }, 'planner');
require Perl::PrereqScanner::Scanner::DistBuild;
my $configure = scan_files(\@planner_files, ['strict', 'warnings', @{$omit}], extra_scanners => [ 'DistBuild' ]);
$configure->add_minimum('Dist::Build' => '0.003');
$prereqs{configure} = { requires => $configure->as_string_hash };
} else {
$prereqs{configure} = { requires => { 'Module::Build::Tiny' => mbt_version() } };
}
my $prereqs = CPAN::Meta::Prereqs->new(\%prereqs);
require CPAN::Meta::Prereqs::Filter;
return CPAN::Meta::Prereqs::Filter::filter_prereqs($prereqs, %opts);
}
sub scan_prereqs {
my ($self, %opts) = @_;
my @omit = (@{ $opts{omit} // [] }, keys %{ $self->{meta}->provides });
return _scan_prereqs(\@omit, %opts);
}
sub load_prereqs {
my ($provides, %opts) = @_;
my @prereqs;
( run in 1.184 second using v1.01-cache-2.11-cpan-e1769b4cff6 )