@@ -179,6 +179,98 @@ $label2files{subdirs} = +{
179179};
180180virtual_rename(' subdirs' , ' lib/XS/Test.pm' , ' Test.pm' );
181181
182+ # to mimic ExtUtils::Depends-facilitated B::Hooks::OP::Check
183+ $label2files {eud_produce } = +{
184+ %{ $label2files {basic } }, # make copy
185+ ' Makefile.PL' => sprintf (
186+ $MAKEFILEPL , ' Other' , ' Other.pm' , qq{ } ,
187+ q{
188+ DEFINE => '-DINVAR=input',
189+ FUNCLIST => [qw(is_odd)],
190+ DL_FUNCS => { 'XS::Other' => [] },
191+ } ,
192+ ),
193+ ' Other.pm' => do {
194+ my $t = $PM_OTHER ; $t =~ s : bootstrap: sub dl_load_flags { 0x01 }\n $& : g ; $t
195+ },
196+ ' Other.xs' => $XS_OTHER ,
197+ ' t/is_even.t' => $T_OTHER ,
198+ };
199+ delete @{ $label2files {eud_produce } }{qw( lib/XS/Test.pm Test.xs) };
200+
201+ # to mimic ExtUtils::Depends-facilitated consuming B::Hooks::OP::Check
202+ $label2files {eud_consume } = +{
203+ %{ $label2files {basic } }, # make copy
204+ ' Makefile.PL' => <<'EOF' .
205+ use File::Spec::Functions;
206+ my $root; BEGIN {$root = catdir(updir, qw(XS-Testeud_produce blib));}
207+ EOF
208+ sprintf (
209+ $MAKEFILEPL , ' Test' , ' Test.pm' , qq{ '$typemap '} ,
210+ q{
211+ DEFINE => '-DINVAR=input',
212+ LIBS => join(' ', find_extra_libs({'XS::Other'=>undef}, [
213+ map catdir($root, $_), qw(lib arch)
214+ ])),
215+ } ,
216+ ) . <<'EOF' ,
217+ use Config;
218+ sub _quote_if_space { $_[0] =~ / / ? qq{"$_[0]"} : $_[0] }
219+ my %mappers; BEGIN { %mappers = (
220+ MSWin32 => sub { $_[0] . '\.(?:lib|a)' },
221+ cygwin => sub { $_[0] . '\.dll'},
222+ android => sub { $_[0] . '\.' . $Config{dlext} },
223+ ); }
224+ sub find_extra_libs {
225+ my ($deps, $search) = @_;
226+ return () if !keys %$deps;
227+ my $mapper = $mappers{$^O};
228+ return () unless defined $mapper;
229+ require File::Find;
230+ my @found_libs = ();
231+ foreach my $name (keys %$deps) {
232+ my @parts = split /::/, $name;
233+ my ($stem) = defined &DynaLoader::mod2fname
234+ ? DynaLoader::mod2fname(\@parts) : $parts[-1];
235+ my $lib = $mapper->($stem);
236+ my ($pattern, $matching_dir, $matching_file) = qr/$lib$/;
237+ File::Find::find(sub {
238+ return if !$matching_file or !/$pattern/;
239+ ($matching_dir, $matching_file) = ($File::Find::dir, $File::Find::name);
240+ }, grep -d, @$search); # only extant dirs
241+ if ($matching_file && -f $matching_file) {
242+ push @found_libs,
243+ '-L' . _quote_if_space($matching_dir),
244+ '-l' . $stem;
245+ $found_libs[-1] = "-l:$stem.$Config{dlext}" if $^O eq 'android';
246+ }
247+ }
248+ @found_libs;
249+ }
250+ EOF
251+ ' Test.pm' => do {
252+ my $t = $PM_TEST ; $t =~ s : is_even: is_odd: g ;
253+ $t =~ s / bootstrap/
254+ use File::Spec::Functions;
255+ my \$ root; BEGIN {\$ root = catdir(updir, qw(XS-Testeud_produce blib));}
256+ use lib map catdir(\$ root, \$ _), qw(lib arch);
257+ require XS::Other;\n $&
258+ / g ;
259+ $t
260+ },
261+ ' Test.xs' => do {
262+ my $t = $XS_OTHER ; $t =~ s : Other: Test: g ; $t =~ s :\{ .*?\} : ;: ; $t
263+ },
264+ ' t/is_even.t' => <<'END' ,
265+ use strict;
266+ use warnings;
267+ use Test::More tests => 3;
268+ use_ok "XS::Test";
269+ ok XS::Test::is_odd(1);
270+ ok !XS::Test::is_odd(2);
271+ END
272+ };
273+
182274# to mimic behaviour of Unicode-LineBreak version 2015.07.16
183275$label2files {subdirscomplex } = +{
184276 %{ $label2files {' subdirs' } }, # make copy
@@ -412,6 +504,8 @@ sub list_dynamic {
412504 $^O !~ m ! ^(VMS|aix)$ ! ? ([ ' subdirscomplex' , ' ' , ' ' ]) : (),
413505 ) : (), # DynaLoader different
414506 [ ' subdirs' , ' ' , ' ' ],
507+ [ ' eud_produce' , ' ' , ' ' , 1 ],
508+ [ ' eud_consume' , ' ' , ' ' ],
415509 # https://github.com/Perl/perl5/issues/17601
416510 # https://rt.cpan.org/Ticket/Display.html?id=115321
417511 $^O ne ' MSWin32' ? (
0 commit comments