Dist-Zilla-Plugin-DistBuild
view release on metacpan or search on metacpan
lib/Dist/Zilla/Plugin/DistBuild.pm view on Meta::CPAN
use Module::Metadata;
use Moose::Util::TypeConstraints 'enum';
use MooseX::Types::Perl qw/StrictVersionStr/;
use MooseX::Types::Moose qw/Bool Str ArrayRef/;
use List::Util 1.33 qw/first any/;
sub mvp_multivalue_args { qw(header_strs footer_strs) }
sub mvp_aliases {
+{
header => 'header_strs',
footer => 'footer_strs',
}
}
around BUILDARGS => sub($orig, $class, @args) {
my $args = $class->$orig(@args);
my $delimiter = delete $args->{delimiter};
if (defined $delimiter and length($delimiter)) {
for my $arg (grep exists $args->{$_}, qw(header_strs footer_strs)) {
s/^\Q$delimiter\E// for $args->{$arg}->@*;
}
}
return $args;
};
has version_method => (
is => 'ro',
isa => enum(['installed', 'heuristic']),
default => 'heuristic',
);
has version => (
is => 'ro',
lazy => 1,
isa => StrictVersionStr,
default => sub($self) {
if ($self->version_method eq 'installed') {
return Module::Metadata->new_from_module('Dist::Build')->version->stringify;
} else {
return '0.019';
}
},
);
has minimum_perl => (
is => 'ro',
isa => StrictVersionStr,
lazy => 1,
default => sub($self) {
my $prereqs = $self->zilla->prereqs->cpan_meta_prereqs;
my $reqs = $prereqs->merged_requirements([ qw/configure build test runtime/ ], ['requires']);
return $reqs->requirements_for_module('perl') || '5.006';
},
);
has header_strs => (
is => 'ro', isa => ArrayRef[Str],
traits => ['Array'],
lazy => 1,
default => sub { [] },
documentation => "Additional code lines to include at the beginning of Makefile.PL",
);
has header_file => (
is => 'ro',
isa => Str,
documentation => 'Additional header content to include from a file',
);
has header => (
is => 'ro',
isa => Str,
lazy => 1,
builder => '_build_header',
documentation => "A string included at the beginning of Makefile.PL",
);
sub _build_header($self) {
join "\n",
$self->header_strs->@*,
( $self->header_file
? do {
my $abs_file = path($self->zilla->root, $self->header_file);
$self->log_fatal([ 'header_file %s does not exist!', $self->header_file ])
if not $abs_file->exists;
$abs_file->slurp_utf8
}
: () );
}
has footer_strs => (
is => 'ro', isa => ArrayRef[Str],
traits => ['Array'],
lazy => 1,
default => sub { [] },
documentation => "Additional code lines to include at the end of Makefile.PL",
);
has footer_file => (
is => 'ro',
isa => Str,
documentation => 'Additional footer content to include from a file',
);
has footer => (
is => 'ro',
isa => Str,
lazy => 1,
builder => '_build_footer',
documentation => "A string included at the end of Makefile.PL",
);
sub _build_footer($self) {
join "\n",
$self->footer_strs->@*,
( $self->footer_file
? do {
my $abs_file = path($self->zilla->root, $self->footer_file);
$self->log_fatal([ 'footer_file %s does not exist!', $self->footer_file ])
if not $abs_file->exists;
$abs_file->slurp_utf8
}
: () );
}
has auto_configure_requires => (
is => 'ro',
isa => Bool,
default => 1,
);
has auto_plugin_requires => (
is => 'ro',
isa => Bool,
default => 0,
);
sub register_prereqs($self) {
if ($self->auto_configure_requires) {
$self->zilla->register_prereqs({ phase => 'configure' }, 'Dist::Build' => $self->version);
}
if ($self->auto_plugin_requires) {
my @plans;
File::Find::find(sub { push @plans, $File::Find::name if -f && /\.pl$/ }, 'planner') if -d 'planner';
require Perl::PrereqScanner;
require Perl::PrereqScanner::Scanner::DistBuild;
my $scanner = Perl::PrereqScanner->new({ extra_scanners => ['DistBuild'] });
for my $file (@plans) {
my $prereqs = $scanner->scan_file($file);
$prereqs->clear_requirement($_) for qw/strict warnings/;
( run in 0.598 second using v1.01-cache-2.11-cpan-39bf76dae61 )