From 354ce5a6b1b89271e4173f8efa18fd63468274f1 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 27 Oct 2010 11:54:37 -0500 Subject: add conflict checking to the generated Makefile.PL --- inc/MMPackageStash.pm | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 inc/MMPackageStash.pm (limited to 'inc') diff --git a/inc/MMPackageStash.pm b/inc/MMPackageStash.pm new file mode 100644 index 0000000..a067fc7 --- /dev/null +++ b/inc/MMPackageStash.pm @@ -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; -- cgit v1.2.3-54-g00ecf