Updated Module::Build to 0.35_08
[p5sagit/p5-mst-13.2.git] / cpan / Module-Build / t / properties / needs_compiler.t
1 # sample.t -- a sample test file for Module::Build
2
3 use strict;
4 use lib 't/lib';
5 use MBTest;
6 use DistGen;
7
8 plan tests => 19;
9
10 # Ensure any Module::Build modules are loaded from correct directory
11 blib_load('Module::Build');
12
13 my $dist = DistGen->new->regen->chdir_in;
14
15 # get a Module::Build object and test with it
16 my $mb;
17 stderr_of(sub {
18     ok( $mb = $dist->new_from_context, "Default Build.PL" );
19 });
20
21 ok( ! $mb->needs_compiler, "needs_compiler is false" );
22 ok( ! exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
23   "ExtUtils::CBuilder is not in build_requires"
24 );
25
26 #--------------------------------------------------------------------------#
27 # try with c_source
28 #--------------------------------------------------------------------------#
29 $dist->change_build_pl({
30     module_name => $dist->name,
31     license => 'perl',
32     c_source => 'src',
33 });
34 $dist->regen;
35 stderr_of(sub {
36   ok( $mb = $dist->new_from_context,
37     "Build.PL with c_source"
38   );
39 });
40 is( $mb->c_source, 'src', "c_source is set" );
41 ok( $mb->needs_compiler, "needs_compiler is true" );
42 ok( exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
43   "ExtUtils::CBuilder was added to build_requires"
44 );
45
46 #--------------------------------------------------------------------------#
47 # try with xs files
48 #--------------------------------------------------------------------------#
49 $dist = DistGen->new(dir => 'MBTest', xs => 1);
50 $dist->regen;
51 $dist->chdir_in;
52
53 stderr_of(sub {
54   ok( $mb = $dist->new_from_context,
55     "Build.PL with xs files"
56   );
57 });
58 ok( $mb->needs_compiler, "needs_compiler is true" );
59 ok( exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
60   "ExtUtils::CBuilder was added to build_requires"
61 );
62
63 #--------------------------------------------------------------------------#
64 # force needs_compiler off, despite xs modules
65 #--------------------------------------------------------------------------#
66
67 $dist->change_build_pl({
68     module_name => $dist->name,
69     license => 'perl',
70     needs_compiler => 0,
71 });
72 $dist->regen;
73
74 stderr_of(sub {
75   ok( $mb = $dist->new_from_context ,
76     "Build.PL with xs files, but needs_compiler => 0"
77   );
78 });
79 is( $mb->needs_compiler, 0, "needs_compiler is false" );
80 ok( ! exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'},
81   "ExtUtils::CBuilder is not in build_requires"
82 );
83
84 #--------------------------------------------------------------------------#
85 # don't override specific EU::CBuilder build_requires
86 #--------------------------------------------------------------------------#
87
88 $dist->change_build_pl({
89     module_name => $dist->name,
90     license => 'perl',
91     build_requires => { 'ExtUtils::CBuilder' => 0.2 },
92 });
93 $dist->regen;
94
95 stderr_of(sub {
96   ok( $mb = $dist->new_from_context ,
97     "Build.PL with xs files, build_requires EU::CB 0.2"
98   );
99 });
100 ok( $mb->needs_compiler, "needs_compiler is true" );
101 is( $mb->build_requires->{'ExtUtils::CBuilder'}, 0.2,
102   "build_requires for ExtUtils::CBuilder is correct version"
103 );
104
105 #--------------------------------------------------------------------------#
106 # falsify compiler and test error handling
107 #--------------------------------------------------------------------------#
108
109 my $err = stderr_of( sub {
110     $mb = $dist->new_from_context( config => { cc => "adfasdfadjdjk" } )
111 });
112 ok( $mb, "Build.PL while hiding compiler" );
113 like( $err, qr/no compiler detected/,
114   "hidden compiler resulted in warning message during Build.PL"
115 );
116 eval { $mb->dispatch('build') };
117 like( $@, qr/no compiler detected/,
118   "hidden compiler resulted in fatal message during Build"
119 );
120
121
122 # vim:ts=2:sw=2:et:sta:sts=2