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 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
use 5.008004;
use Test2::V0 -no_srand => 1;
use Test::Alien::Build;
use Alien::Build::Plugin::Core::FFI;
use Capture::Tiny qw( capture_merged );
subtest basic => sub {
my $build = alienfile q{
use alienfile;
use Path::Tiny qw( path );
use Alien::Build::Util qw( _destdir_prefix );
plugin 'Test::Mock',
probe => 'share',
download => 1,
extract => 1;
meta_prop->{destdir} = 1;
share {
build sub {
my($build) = @_;
print "in build\n";
my $dir = path(_destdir_prefix($ENV{DESTDIR}, $build->install_prop->{prefix}));
$dir->child('lib')->mkpath;
$dir->child('lib', 'libfoo.a')->touch;
};
ffi {
patch sub { shift->{runtime_prop}->{my_did_patch_ffi} = 1 };
build sub {
my($build) = @_;
print "in build_ffi DESTDIR = $ENV{DESTDIR}\n";
my $dir = path(_destdir_prefix($ENV{DESTDIR}, $build->install_prop->{prefix}));
$dir->child('dynamic')->mkpath;
$dir->child('dynamic', 'libfoo.so')->touch;
$dir->child('lib')->mkpath;
$dir->child('lib', 'libgarbage.a')->touch;
$build->{runtime_prop}->{my_did_build_ffi} = 1;
};
gather sub {
my($build) = @_;
print "in gather_ffi\n";
$build->{runtime_prop}->{my_did_gather_ffi} = 1;
};
};
};
};
note scalar capture_merged {
$build->probe;
$build->download;
$build->build;
};
ok($build->{runtime_prop}->{my_did_patch_ffi}, 'did patch_ffi');
ok($build->{runtime_prop}->{my_did_build_ffi}, 'did build_ffi');
ok($build->{runtime_prop}->{my_did_gather_ffi}, 'did gather_ffi');
my $stage = $build->install_prop->{stage};
ok(-f "$stage/lib/libfoo.a", 'has static lib');
ok(-f "$stage/dynamic/libfoo.so", 'has dynamic lib');
ok(!-f "$stage/lib/libgarbage.a", "filter out garbage");
};
subtest deprecated => sub {
my($out, $build) = capture_merged { alienfile q{
use alienfile;
use Path::Tiny qw( path );
use Alien::Build::Util qw( _destdir_prefix );
plugin 'Test::Mock',
probe => 'share',
download => 1,
extract => 1;
meta_prop->{destdir} = 1;
share {
build sub {
my($build) = @_;
print "in build\n";
my $dir = path(_destdir_prefix($ENV{DESTDIR}, $build->install_prop->{prefix}));
$dir->child('lib')->mkpath;
$dir->child('lib', 'libfoo.a')->touch;
};
patch_ffi sub { shift->{runtime_prop}->{my_did_patch_ffi} = 1 };
build_ffi sub {
my($build) = @_;
print "in build_ffi DESTDIR = $ENV{DESTDIR}\n";
my $dir = path(_destdir_prefix($ENV{DESTDIR}, $build->install_prop->{prefix}));
$dir->child('dynamic')->mkpath;
$dir->child('dynamic', 'libfoo.so')->touch;
$dir->child('lib')->mkpath;
$dir->child('lib', 'libgarbage.a')->touch;
$build->{runtime_prop}->{my_did_build_ffi} = 1;
};
gather_ffi sub {
my($build) = @_;
print "in gather_ffi\n";
$build->{runtime_prop}->{my_did_gather_ffi} = 1;
};
};
} };
note "build warnings: $out";
note scalar capture_merged {
$build->probe;
$build->download;
$build->build;
};
ok($build->{runtime_prop}->{my_did_patch_ffi}, 'did patch_ffi');
ok($build->{runtime_prop}->{my_did_build_ffi}, 'did build_ffi');
ok($build->{runtime_prop}->{my_did_gather_ffi}, 'did gather_ffi');
my $stage = $build->install_prop->{stage};
ok(-f "$stage/lib/libfoo.a", 'has static lib');
ok(-f "$stage/dynamic/libfoo.so", 'has dynamic lib');
ok(!-f "$stage/lib/libgarbage.a", "filter out garbage");
};
done_testing;
|