| # sample.t -- a sample test file for Module::Build |
| |
| use strict; |
| use lib 't/lib'; |
| use MBTest; |
| use DistGen; |
| |
| plan tests => 19; |
| |
| # Ensure any Module::Build modules are loaded from correct directory |
| blib_load('Module::Build'); |
| |
| my $dist = DistGen->new->regen->chdir_in; |
| |
| # get a Module::Build object and test with it |
| my $mb; |
| stderr_of(sub { |
| ok( $mb = $dist->new_from_context, "Default Build.PL" ); |
| }); |
| |
| ok( ! $mb->needs_compiler, "needs_compiler is false" ); |
| ok( ! exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'}, |
| "ExtUtils::CBuilder is not in build_requires" |
| ); |
| |
| #--------------------------------------------------------------------------# |
| # try with c_source |
| #--------------------------------------------------------------------------# |
| $dist->change_build_pl({ |
| module_name => $dist->name, |
| license => 'perl', |
| c_source => 'src', |
| }); |
| $dist->regen; |
| stderr_of(sub { |
| ok( $mb = $dist->new_from_context, |
| "Build.PL with c_source" |
| ); |
| }); |
| is( $mb->c_source, 'src', "c_source is set" ); |
| ok( $mb->needs_compiler, "needs_compiler is true" ); |
| ok( exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'}, |
| "ExtUtils::CBuilder was added to build_requires" |
| ); |
| |
| #--------------------------------------------------------------------------# |
| # try with xs files |
| #--------------------------------------------------------------------------# |
| $dist = DistGen->new(dir => 'MBTest', xs => 1); |
| $dist->regen; |
| $dist->chdir_in; |
| |
| stderr_of(sub { |
| ok( $mb = $dist->new_from_context, |
| "Build.PL with xs files" |
| ); |
| }); |
| ok( $mb->needs_compiler, "needs_compiler is true" ); |
| ok( exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'}, |
| "ExtUtils::CBuilder was added to build_requires" |
| ); |
| |
| #--------------------------------------------------------------------------# |
| # force needs_compiler off, despite xs modules |
| #--------------------------------------------------------------------------# |
| |
| $dist->change_build_pl({ |
| module_name => $dist->name, |
| license => 'perl', |
| needs_compiler => 0, |
| }); |
| $dist->regen; |
| |
| stderr_of(sub { |
| ok( $mb = $dist->new_from_context , |
| "Build.PL with xs files, but needs_compiler => 0" |
| ); |
| }); |
| is( $mb->needs_compiler, 0, "needs_compiler is false" ); |
| ok( ! exists $mb->{properties}{build_requires}{'ExtUtils::CBuilder'}, |
| "ExtUtils::CBuilder is not in build_requires" |
| ); |
| |
| #--------------------------------------------------------------------------# |
| # don't override specific EU::CBuilder build_requires |
| #--------------------------------------------------------------------------# |
| |
| $dist->change_build_pl({ |
| module_name => $dist->name, |
| license => 'perl', |
| build_requires => { 'ExtUtils::CBuilder' => 0.2 }, |
| }); |
| $dist->regen; |
| |
| stderr_of(sub { |
| ok( $mb = $dist->new_from_context , |
| "Build.PL with xs files, build_requires EU::CB 0.2" |
| ); |
| }); |
| ok( $mb->needs_compiler, "needs_compiler is true" ); |
| is( $mb->build_requires->{'ExtUtils::CBuilder'}, 0.2, |
| "build_requires for ExtUtils::CBuilder is correct version" |
| ); |
| |
| #--------------------------------------------------------------------------# |
| # falsify compiler and test error handling |
| #--------------------------------------------------------------------------# |
| |
| # clear $ENV{CC} so we are sure to fail to find our fake compiler :-) |
| local $ENV{CC}; |
| |
| my $err = stderr_of( sub { |
| $mb = $dist->new_from_context( config => { cc => "adfasdfadjdjk" } ) |
| }); |
| ok( $mb, "Build.PL while hiding compiler" ); |
| like( $err, qr/no compiler detected/, |
| "hidden compiler resulted in warning message during Build.PL" |
| ); |
| eval { $mb->dispatch('build') }; |
| like( $@, qr/no compiler detected/, |
| "hidden compiler resulted in fatal message during Build" |
| ); |
| |
| |
| # vim:ts=2:sw=2:et:sta:sts=2 |