remove extraneous garbage from tests
[gitmo/Class-C3.git] / Makefile.PL
1 use strict;
2 use warnings;
3 use 5.006;
4
5 use ExtUtils::MakeMaker;
6
7 my $mymeta_works = eval { ExtUtils::MakeMaker->VERSION('6.5707'); 1 };
8 my $mymeta = $mymeta_works || eval { ExtUtils::MakeMaker->VERSION('6.5702'); 1 };
9
10 my %BUILD_DEPS = (
11   'Test::More' => '0.47',
12 );
13 my %OPT_BUILD_DEPS = ( $] < 5.009_005 and is_smoker() )
14   ? ( 'Devel::Hide' => 0 ) : ()
15 ;
16
17 my %RUN_DEPS = (
18   # needed by the PP version only, have them installed
19   # regardless of XS availability or perl version
20   # (for fatpacking and whatnot)
21   'Algorithm::C3' => '0.07',
22   'Scalar::Util'  => '0',
23 );
24 my %OPT_RUN_DEPS = ( $] < 5.009_005 and can_xs() )
25   ? ( 'Class::C3::XS'  => '0.13' ) : ()
26 ;
27
28 my %META_BITS = (
29   resources => {
30     homepage => 'http://search.cpan.org/dist/Class-C3',
31     repository => 'git://git.shadowcat.co.uk/gitmo/Class-C3.git',
32     bugtracker => 'http://rt.cpan.org/Public/Dist/Display.html?Name=Class-C3',
33   },
34 );
35
36 my %WriteMakefileArgs = (
37   'NAME' => 'Class::C3',
38   'AUTHOR' => 'Stevan Little, <stevan@iinteractive.com>',
39   'VERSION_FROM' => 'lib/Class/C3.pm',
40   'ABSTRACT_FROM' => 'lib/Class/C3.pm',
41   'CONFIGURE_REQUIRES' => { 'ExtUtils::CBuilder' => 0.27 },
42   'PREREQ_PM' => {
43     %RUN_DEPS, %OPT_RUN_DEPS,
44     $mymeta_works ? () : (%BUILD_DEPS, %OPT_BUILD_DEPS),
45   },
46
47   $mymeta_works
48     ? ( # BUILD_REQUIRES makes MYMETA right, requires stops META being wrong
49       'BUILD_REQUIRES' => { %BUILD_DEPS, %OPT_BUILD_DEPS },
50       'META_ADD' => {
51         %META_BITS,
52         requires => \%RUN_DEPS,
53       },
54     )
55     : ( # META_ADD both to get META right - only Makefile written
56       'META_ADD' => {
57         %META_BITS,
58         requires => \%RUN_DEPS,
59         build_requires => \%BUILD_DEPS,
60       },
61     )
62   ,
63
64   ($mymeta and !$mymeta_works) ? ( 'NO_MYMETA' => 1 ) : (),
65
66   'LICENSE' => 'perl',
67 );
68
69
70 unless ( eval { ExtUtils::MakeMaker->VERSION('6.56') } ) {
71   my $br = delete $WriteMakefileArgs{BUILD_REQUIRES};
72   my $pp = $WriteMakefileArgs{PREREQ_PM};
73   for my $mod ( keys %$br ) {
74     if ( exists $pp->{$mod} ) {
75        $pp->{$mod} = $br->{$mod} if $br->{$mod} > $pp->{$mod};
76     }
77     else {
78       $pp->{$mod} = $br->{$mod};
79     }
80   }
81 }
82
83 delete $WriteMakefileArgs{CONFIGURE_REQUIRES}
84   unless eval { ExtUtils::MakeMaker->VERSION('6.52') };
85
86 system("pod2text lib/Class/C3.pm >README")
87     unless -f 'META.yml';
88
89 WriteMakefile(%WriteMakefileArgs);
90
91 # Secondary compile testing via ExtUtils::CBuilder
92 sub can_xs {
93   # Do we have the configure_requires checker?
94   local $@;
95   eval "require ExtUtils::CBuilder;";
96   if ( $@ ) {
97     # They don't obey configure_requires, so it is
98     # someone old and delicate. Try to avoid hurting
99     # them by falling back to an older simpler test.
100     return can_cc();
101   }
102
103   return ExtUtils::CBuilder->new( quiet => 1 )->have_compiler;
104 }
105
106 # can we locate a (the) C compiler
107 sub can_cc {
108   my @chunks = split(/ /, $Config::Config{cc}) or return;
109
110   # $Config{cc} may contain args; try to find out the program part
111   while (@chunks) {
112     return can_run("@chunks") || (pop(@chunks), next);
113   }
114
115   return;
116 }
117
118 # check if we can run some command
119 sub can_run {
120   my ($cmd) = @_;
121
122   return $cmd if -x $cmd;
123   if (my $found_cmd = MM->maybe_command($cmd)) {
124     return $found_cmd;
125   }
126
127   for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') {
128     next if $dir eq '';
129     my $abs = File::Spec->catfile($dir, $cmd);
130     return $abs if (-x $abs or $abs = MM->maybe_command($abs));
131   }
132
133   return;
134 }
135
136 sub is_smoker {
137   return ( $ENV{AUTOMATED_TESTING} && ! $ENV{PERL5_CPANM_IS_RUNNING} && ! $ENV{RELEASE_TESTING} )
138 }