add conflict checking to the generated Makefile.PL
[gitmo/Package-Stash-PP.git] / inc / MMPackageStash.pm
diff --git a/inc/MMPackageStash.pm b/inc/MMPackageStash.pm
new file mode 100644 (file)
index 0000000..a067fc7
--- /dev/null
@@ -0,0 +1,59 @@
+package inc::MMPackageStash;
+use Moose;
+
+extends 'Dist::Zilla::Plugin::MakeMaker::Awesome';
+
+# XXX: this is pretty gross, it should be possible to clean this up later
+around _build_MakeFile_PL_template => sub {
+    my $orig = shift;
+    my $self = shift;
+    my $template = $self->$orig(@_);
+
+    $template =~ s/(use ExtUtils::MakeMaker.*)/$1\n\ncheck_conflicts();/;
+
+    $template .= <<'CHECK_CONFLICTS';
+sub check_conflicts {
+    my %conflicts = (
+        'Class::MOP' => '1.09',
+    );
+    my $found = 0;
+    for my $mod ( sort keys %conflicts ) {
+        eval "require $mod";
+        next if $@;
+
+        my $installed = $mod->VERSION();
+        if ( $installed le $conflicts{$mod} ) {
+
+            print <<"EOF";
+
+***
+    This version of Package::Stash conflicts with the version of
+    $mod ($installed) you have installed.
+
+    You will need to upgrade $mod after installing
+    this version of Package::Stash.
+***
+
+EOF
+
+            $found = 1;
+        }
+    }
+
+    return unless $found;
+
+    # More or less copied from Module::Build
+    return if  $ENV{PERL_MM_USE_DEFAULT};
+    return unless -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT));
+
+    sleep 4;
+}
+CHECK_CONFLICTS
+
+    return $template;
+};
+
+__PACKAGE__->meta->make_immutable;
+no Moose;
+
+1;