App-ModuleBuildTiny
view release on metacpan or search on metacpan
lib/App/ModuleBuildTiny/Dist.pm view on Meta::CPAN
sub mbt_version {
return -f 'dynamic-prereqs.yml' ? '0.048' : '0.044';
}
sub prereqs_for {
my ($meta, $phase, $type, $module, $default) = @_;
return $meta->effective_prereqs->requirements_for($phase, $type)->requirements_for_module($module) // $default // 0;
}
sub uptodate {
my ($destination, @source) = @_;
return if not -e $destination;
for my $source (grep { defined && -e } @source) {
return if -M $destination > -M $source;
}
return 1;
}
sub distfilename {
my $distname = shift;
return catfile('lib', split /-/, $distname) . '.pm';
}
sub generate_readme {
my $distname = shift;
my $filename = distfilename($distname);
die "Main module file $filename doesn't exist\n" if not -f $filename;
my $parser = Pod::Simple::Text->new;
$parser->output_string( \my $content );
$parser->parse_characters(1);
$parser->parse_file($filename);
return decode_utf8($content);
}
sub load_jsonyaml {
my $file = shift;
require Parse::CPAN::Meta;
return Parse::CPAN::Meta->load_file($file);
}
sub load_mergedata {
my $mergefile = shift;
if (defined $mergefile and -r $mergefile) {
return load_jsonyaml($mergefile);
}
return;
}
sub distname {
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);
( run in 2.272 seconds using v1.01-cache-2.11-cpan-97f6503c9c8 )