diff options
-rw-r--r-- | dist.ini | 2 | ||||
-rw-r--r-- | lib/Dist/Zilla/Plugin/MakefilePL/Develop.pm | 77 |
2 files changed, 79 insertions, 0 deletions
@@ -7,3 +7,5 @@ copyright_holder = Jesse Luehrs dist = Dist-Zilla-Plugin-MakefilePL-Develop [Prereqs] +Dist::Zilla = 0 +ExtUtils::MakeMaker::Dist::Zilla::Develop = 0 diff --git a/lib/Dist/Zilla/Plugin/MakefilePL/Develop.pm b/lib/Dist/Zilla/Plugin/MakefilePL/Develop.pm index e69de29..0c6ddcd 100644 --- a/lib/Dist/Zilla/Plugin/MakefilePL/Develop.pm +++ b/lib/Dist/Zilla/Plugin/MakefilePL/Develop.pm @@ -0,0 +1,77 @@ +package Dist::Zilla::Plugin::MakefilePL::Develop; +use Moose; + +with qw( + Dist::Zilla::Role::FileGatherer + Dist::Zilla::Role::FileMunger + Dist::Zilla::Role::FilePruner +); + +sub gather_files { + my $self = shift; + return unless $self->zilla->isa('Dist::Zilla::Dist::Minter'); + + (my $mod_name = $self->zilla->name) =~ s/-/::/g; + my $content = <<CONTENTS; +# This module uses Dist::Zilla for development. This Makefile.PL will let you +# run the tests, but you are encouraged to install Dist::Zilla and the needed +# plugins if you intend on doing any serious hacking. + +use strict; +use warnings; + +use ExtUtils::MakeMaker::Dist::Zilla::Develop; + +WriteMakefile( + NAME => '$mod_name', +); +CONTENTS + + $self->add_file( + Dist::Zilla::File::InMemory->new( + name => 'Makefile.PL', + content => $content, + ) + ); +} + +sub munge_files { + my $self = shift; + return unless $self->zilla->isa('Dist::Zilla::Dist::Minter'); + + my ($dist_ini) = grep { $_->name eq 'dist.ini' } @{ $self->zilla->files }; + return unless $dist_ini; + + if ($dist_ini->isa('Dist::Zilla::File::OnDisk')) { + my $content = $dist_ini->content; + Dist::Zilla::File::InMemory->meta->rebless_instance( + $dist_ini, + content => $content . "\n[MakefilePL::Develop]\n", + ); + } + elsif ($dist_ini->isa('Dist::Zilla::File::InMemory')) { + $dist_ini->content($dist_ini->content . "\n[MakefilePL::Develop]\n"); + } + elsif ($dist_ini->isa('Dist::Zilla::File::FromCode')) { + my $code = $dist_ini->code; + my $weak_dist_ini = $dist_ini; + Scalar::Util::weaken($weak_dist_ini); + $dist_ini->code(sub { + $weak_dist_ini->$code . "\n[MakefilePL::Develop]\n" + }); + } +} + +sub prune_files { + my $self = shift; + return unless $self->zilla->isa('Dist::Zilla::Dist::Builder'); + for my $file (@{ $self->zilla->files }) { + next unless $file->name eq 'Makefile.PL'; + $self->zilla->prune_file($file); + } +} + +__PACKAGE__->meta->make_immutable; +no Moose; + +1; |