1 package inc::MMPackageStash;
4 extends 'Dist::Zilla::Plugin::MakeMaker::Awesome';
6 # XXX: this is pretty gross, it should be possible to clean this up later
7 around _build_MakeFile_PL_template => sub {
12 my $can_cc = <<'CAN_CC';
16 # check if we can run some command
21 return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd));
23 for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') {
25 my $abs = File::Spec->catfile($dir, $_[1]);
26 return $abs if (-x $abs or $abs = MM->maybe_command($abs));
32 # can we locate a (the) C compiler
34 my @chunks = split(/ /, $Config::Config{cc}) or return;
36 # $Config{cc} may contain args; try to find out the program part
38 return can_run("@chunks") || (pop(@chunks), next);
46 my $check_conflicts = <<'CHECK_CONFLICTS';
48 if (eval { require 'lib/Package/Stash/Conflicts.pm'; 1; }) {
49 if (eval { Package::Stash::Conflicts->check_conflicts; 1 }) {
55 warn "***\n$err***\n";
61 Your toolchain doesn't support configure_requires, so Dist::CheckConflicts
62 hasn't been installed yet. You should check for conflicting modules
63 manually using the 'package-stash-conflicts' script that is installed with
64 this distribution once the installation finishes.
69 # More or less copied from Module::Build
70 return if $ENV{PERL_MM_USE_DEFAULT};
71 return unless -t STDIN && (-t STDOUT || !(-f STDOUT || -c STDOUT));
77 my $template = $self->$orig(@_);
79 $template =~ s/(use ExtUtils::MakeMaker.*)/$1\n\ncheck_conflicts();/;
80 $template =~ s/(WriteMakefile\()/delete \$WriteMakefileArgs{PREREQ_PM}{'Package::Stash::XS'}\n unless can_cc();\n\n$1/;
82 return $template . $can_cc . $check_conflicts;
85 __PACKAGE__->meta->make_immutable;