diff options
author | Jesse Luehrs <doy@tozt.net> | 2013-07-09 18:35:07 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-07-09 18:35:07 -0400 |
commit | 91775af608ca1a0bda7f4921131bede762959423 (patch) | |
tree | 4a74748e31f9fd0223069be9c2d795e8ec7a64ea | |
parent | 136bf6f6dd4e27a33b6d07c66242596e71a7eea4 (diff) | |
download | dist-zilla-plugin-perlversionprereqs-91775af608ca1a0bda7f4921131bede762959423.tar.gz dist-zilla-plugin-perlversionprereqs-91775af608ca1a0bda7f4921131bede762959423.zip |
initial implementation
-rw-r--r-- | lib/Dist/Zilla/Plugin/PerlVersionPrereqs.pm | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/lib/Dist/Zilla/Plugin/PerlVersionPrereqs.pm b/lib/Dist/Zilla/Plugin/PerlVersionPrereqs.pm index e69de29..0b260b3 100644 --- a/lib/Dist/Zilla/Plugin/PerlVersionPrereqs.pm +++ b/lib/Dist/Zilla/Plugin/PerlVersionPrereqs.pm @@ -0,0 +1,98 @@ +package Dist::Zilla::Plugin::PerlVersionPrereqs; +use Moose; + +with 'Dist::Zilla::Role::InstallTool', 'Dist::Zilla::Role::MetaProvider'; + +has prereq_perl_version => ( + is => 'ro', + isa => 'Str', + lazy => 1, + default => sub { + my $self = shift; + return $self->plugin_name; + }, +); + +has _prereqs => ( + is => 'ro', + isa => 'HashRef[Str]', + required => 1, +); + +sub BUILDARGS { + my $class = shift; + + my $opts = $class->SUPER::BUILDARGS(@_); + + my $zilla = delete $opts->{zilla}; + my $plugin_name = delete $opts->{plugin_name}; + + my %extra = map { $_ => delete $opts->{$_} } grep { /^\W/ } keys %$opts; + + return { + zilla => $zilla, + plugin_name => $plugin_name, + _prereqs => $opts, + (map { $_ => $extra{$_} } keys %extra), + }; +} + +sub setup_installer { + my $self = shift; + + my $perl_version = $self->prereq_perl_version; + + confess "You must specify a perl version" + unless $perl_version; + + my ($makefile_pl) = grep { $_->name eq 'Makefile.PL' } + @{ $self->zilla->files }; + + confess "This plugin only supports [MakeMaker]" + unless $makefile_pl; + + my $prereqs = $self->_prereqs; + return unless keys %$prereqs; + + my $content = $makefile_pl->content; + + my $prereq_string = join("\n ", map { + qq["$_" => "$prereqs->{$_}",] + } keys %$prereqs); + + my $extra_content = <<EXTRA; +if (\$] < $perl_version) { + \$WriteMakefileArgs{PREREQ_PM} = { + \%{ \$WriteMakefileArgs{PREREQ_PM} }, + $prereq_string + }; +} +EXTRA + + $content =~ s/(WriteMakefile\()/$extra_content\n$1/ + or die "Couldn't update Makefile.PL contents"; + + $makefile_pl->content($content); +} + +sub metadata { + return { dynamic_config => 1 }; +} + +around dump_config => sub { + my $orig = shift; + my $self = shift; + + my $config = $self->$orig(@_); + + $config->{''.__PACKAGE__} = { + perl_version => $self->prereq_perl_version, + }; + + return $config; +}; + +__PACKAGE__->meta->make_immutable; +no Moose; + +1; |