Commit | Line | Data |
354ce5a6 |
1 | package inc::MMPackageStash; |
2 | use Moose; |
3 | |
4 | extends 'Dist::Zilla::Plugin::MakeMaker::Awesome'; |
5 | |
6 | # XXX: this is pretty gross, it should be possible to clean this up later |
7 | around _build_MakeFile_PL_template => sub { |
8 | my $orig = shift; |
9 | my $self = shift; |
354ce5a6 |
10 | |
079d40f5 |
11 | # copied from M::I |
12 | my $can_cc = <<'CAN_CC'; |
13 | use Config (); |
14 | use File::Spec (); |
15 | |
16 | # check if we can run some command |
17 | sub can_run { |
18 | my ($cmd) = @_; |
19 | |
20 | my $_cmd = $cmd; |
21 | return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd)); |
22 | |
23 | for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') { |
24 | next if $dir eq ''; |
25 | my $abs = File::Spec->catfile($dir, $_[1]); |
26 | return $abs if (-x $abs or $abs = MM->maybe_command($abs)); |
27 | } |
28 | |
29 | return; |
30 | } |
31 | |
32 | # can we locate a (the) C compiler |
33 | sub can_cc { |
34 | my @chunks = split(/ /, $Config::Config{cc}) or return; |
354ce5a6 |
35 | |
079d40f5 |
36 | # $Config{cc} may contain args; try to find out the program part |
37 | while (@chunks) { |
38 | return can_run("@chunks") || (pop(@chunks), next); |
39 | } |
40 | |
41 | return; |
42 | } |
43 | CAN_CC |
44 | |
079d40f5 |
45 | my $template = $self->$orig(@_); |
46 | |
079d40f5 |
47 | $template =~ s/(WriteMakefile\()/delete \$WriteMakefileArgs{PREREQ_PM}{'Package::Stash::XS'}\n unless can_cc();\n\n$1/; |
48 | |
70d7962e |
49 | return $template . $can_cc; |
354ce5a6 |
50 | }; |
51 | |
52 | __PACKAGE__->meta->make_immutable; |
53 | no Moose; |
54 | |
55 | 1; |