summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dist.ini2
-rw-r--r--lib/Dist/Zilla/Plugin/MakefilePL/Develop.pm77
2 files changed, 79 insertions, 0 deletions
diff --git a/dist.ini b/dist.ini
index 2c23cfa..917252c 100644
--- a/dist.ini
+++ b/dist.ini
@@ -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;