#!/usr/bin/perl -w
BEGIN {
unshift
@INC
,
't/lib'
;
}
!MM->can_run(make()) &&
$ENV
{PERL_CORE} &&
$Config
{
'usecrosscompile'
}
? (
skip_all
=>
"cross-compiling and make not available"
)
: (
tests
=> 12);
my
$perl
= which_perl();
my
$make
= make_run();
chdir
't'
;
perl_lib;
my
$tmpdir
= tempdir(
DIR
=>
'../t'
,
CLEANUP
=> 1 );
use
Cwd;
my
$cwd
= getcwd; END {
chdir
$cwd
}
chdir
$tmpdir
;
my
$DIRNAME
=
'PL-Module'
;
my
%FILES
= (
'Makefile.PL'
=>
<<'END',
use ExtUtils::MakeMaker;
# A module for testing PL_FILES
WriteMakefile(
NAME => 'PL::Module',
PL_FILES => { 'single.PL' => 'single.out',
'multi.PL' => [qw(1.out 2.out)],
'single-in.PL' => { 'single-in.out' => 'single.in' },
'multi-in.PL' => { 'multi-in.out' => [qw(1.in 2.in)] },
'Bar_pm.PL' => '$(INST_LIB)/PL/Bar.pm',
'Bar2.pm.PL' => 'Bar2.pm',
},
);
package MY;
sub init_PM {
my ($self) = @_;
$self->SUPER::init_PM;
$self->{PM}{'Bar2.pm'} = '$(INST_LIBDIR)/Bar2.pm'; # PDL does this in WM args
}
END
'single.PL'
=> _gen_pl_files(),
'multi.PL'
=> _gen_pl_files(),
'Bar_pm.PL'
=> _gen_pm_files(),
'Bar2.pm.PL'
=> _gen_pm_files(),
'single-in.PL'
=> _gen_pm_files(1),
'multi-in.PL'
=> _gen_pm_files(2),
'single.in'
=>
''
,
'1.in'
=>
''
,
'2.in'
=>
''
,
'lib/PL/Foo.pm'
=>
<<'END',
# Module to load to ensure PL_FILES have blib in @INC.
package PL::Foo;
sub bar { 42 }
1;
END
);
hash2files(
$DIRNAME
, \
%FILES
);
END {
ok(
chdir
File::Spec->updir );
ok( rmtree(
$DIRNAME
) );
}
ok
chdir
(
$DIRNAME
);
run(
qq{$perl Makefile.PL}
);
cmp_ok( $?,
'=='
, 0 );
my
$make_out
= run(
"$make"
);
is( $?, 0 ) || diag
$make_out
;
foreach
my
$file
(
qw(
single.out 1.out 2.out
single-in.out multi-in.out
blib/lib/PL/Bar.pm blib/lib/PL/Bar2.pm
)
) {
ok( -e
$file
,
"$file was created"
);
}
sub
_gen_pl_files {
my
$test
=
<<'END';
#!/usr/bin/perl -w
# Ensure we have blib in @INC
use PL::Foo;
die unless PL::Foo::bar() == 42;
# Had a bug where PL_FILES weren't sent the file to generate
die "argv empty\n" unless @ARGV;
die "too many in argv: @ARGV\n" unless @ARGV == 1;
my $file = $ARGV[0];
open OUT, ">$file" or die $!;
print OUT "Testing\n";
close OUT
END
$test
=~ s/^\n//;
return
$test
;
}
sub
_gen_pm_files {
my
$inputs
= (
shift
|| 0) + 1;
my
$test
=
sprintf
<<'END', $inputs;
#!/usr/bin/perl -w
# Ensure we do NOT have blib in @INC when building a module
eval { require PL::Foo; };
#die $@ unless $@ =~ m{^Can't locate PL/Foo.pm in \@INC };
# Had a bug where PL_FILES weren't sent the file to generate
die "argv empty\n" unless @ARGV;
die "wrong number in argv: @ARGV\n" unless @ARGV == %d;
my $file = $ARGV[0];
open OUT, ">$file" or die $!;
print OUT "Testing\n";
close OUT
END
$test
=~ s/^\n//;
return
$test
;
}