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
|
package MakeMaker::Test::Setup::PL_FILES;
@ISA = qw(Exporter);
require Exporter;
@EXPORT = qw(setup teardown);
use strict;
use File::Path;
use File::Basename;
use File::Spec;
use MakeMaker::Test::Utils;
my %Files = (
'PL_FILES-Module/Makefile.PL' => <<'END',
use ExtUtils::MakeMaker;
# A module for testing PL_FILES
WriteMakefile(
NAME => 'PL_FILES::Module',
PL_FILES => { 'single.PL' => 'single.out',
'multi.PL' => [qw(1.out 2.out)],
'Bar_pm.PL' => '$(INST_LIB)/PL/Bar.pm',
}
);
END
'PL_FILES-Module/single.PL' => _gen_pl_files(),
'PL_FILES-Module/multi.PL' => _gen_pl_files(),
'PL_FILES-Module/Bar_pm.PL' => _gen_pm_files(),
'PL_FILES-Module/lib/PL/Foo.pm' => <<'END',
# Module to load to ensure PL_FILES have blib in @INC.
package PL::Foo;
sub bar { 42 }
1;
END
);
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 $test = <<'END';
#!/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 "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 setup {
while(my($file, $text) = each %Files) {
# Convert to a relative, native file path.
$file = File::Spec->catfile(File::Spec->curdir, split m{\/}, $file);
my $dir = dirname($file);
mkpath $dir;
open(FILE, ">$file") || die "Can't create $file: $!";
print FILE $text;
close FILE;
# ensure file at least 1 second old for makes that assume
# files with the same time are out of date.
my $time = calibrate_mtime();
utime $time, $time - 1, $file;
}
return 1;
}
sub teardown {
foreach my $file (keys %Files) {
my $dir = dirname($file);
if( -e $dir ) {
rmtree($dir) || return;
}
}
return 1;
}
|