Merge branch 'vincent/rvalue_stmt_given' into blead
[p5sagit/p5-mst-13.2.git] / cpan / Module-Build / t / properties / needs_compiler.t
CommitLineData
613f422f 1# sample.t -- a sample test file for Module::Build
2
3use strict;
4use lib 't/lib';
5use MBTest;
6use DistGen;
7
8plan tests => 19;
9
10# Ensure any Module::Build modules are loaded from correct directory
11blib_load('Module::Build');
12
13my $dist = DistGen->new->regen->chdir_in;
14
15# get a Module::Build object and test with it
16my $mb;
17stderr_of(sub {
18 ok( $mb = $dist->new_from_context, "Default Build.PL" );
19});
20
21ok( ! $mb->needs_compiler, "needs_compiler is false" );
22ok( ! 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;
35stderr_of(sub {
36 ok( $mb = $dist->new_from_context,
37 "Build.PL with c_source"
38 );
39});
40is( $mb->c_source, 'src', "c_source is set" );
41ok( $mb->needs_compiler, "needs_compiler is true" );
42ok( 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
53stderr_of(sub {
54 ok( $mb = $dist->new_from_context,
55 "Build.PL with xs files"
56 );
57});
58ok( $mb->needs_compiler, "needs_compiler is true" );
59ok( 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
74stderr_of(sub {
75 ok( $mb = $dist->new_from_context ,
76 "Build.PL with xs files, but needs_compiler => 0"
77 );
78});
79is( $mb->needs_compiler, 0, "needs_compiler is false" );
80ok( ! 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
95stderr_of(sub {
96 ok( $mb = $dist->new_from_context ,
97 "Build.PL with xs files, build_requires EU::CB 0.2"
98 );
99});
100ok( $mb->needs_compiler, "needs_compiler is true" );
101is( $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
7dc9e1b4 109# clear $ENV{CC} so we are sure to fail to find our fake compiler :-)
110local $ENV{CC};
111
613f422f 112my $err = stderr_of( sub {
113 $mb = $dist->new_from_context( config => { cc => "adfasdfadjdjk" } )
114});
115ok( $mb, "Build.PL while hiding compiler" );
116like( $err, qr/no compiler detected/,
117 "hidden compiler resulted in warning message during Build.PL"
118);
119eval { $mb->dispatch('build') };
120like( $@, qr/no compiler detected/,
121 "hidden compiler resulted in fatal message during Build"
122);
123
124
125# vim:ts=2:sw=2:et:sta:sts=2