1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
# 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
|