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 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
package MakeMaker::Test::Setup::BFD;
use strict;
our @ISA = qw(Exporter);
require Exporter;
our @EXPORT = qw(setup_recurs teardown_recurs);
use File::Path;
use File::Basename;
use MakeMaker::Test::Utils;
my %Files = (
'Big-Dummy/lib/Big/Dummy.pm' => <<'END',
package Big::Dummy;
$VERSION = 0.02;
=head1 NAME
Big::Dummy - Try "our" hot dog's
=cut
1;
END
'Big-Dummy/Makefile.PL' => <<'END',
use ExtUtils::MakeMaker;
# This will interfere with the PREREQ_PRINT tests.
printf "Current package is: %s\n", __PACKAGE__ unless "@ARGV" =~ /PREREQ/;
WriteMakefile(
NAME => 'Big::Dummy',
VERSION_FROM => 'lib/Big/Dummy.pm',
EXE_FILES => [qw(bin/program)],
PREREQ_PM => { strict => 0 },
BUILD_REQUIRES => { warnings => 0 },
ABSTRACT_FROM => 'lib/Big/Dummy.pm',
AUTHOR => 'Michael G Schwern <schwern@pobox.com>',
);
END
'Big-Dummy/bin/program' => <<'END',
#!/usr/bin/perl -w
=head1 NAME
program - this is a program
=cut
1;
END
'Big-Dummy/t/compile.t' => <<'END',
print "1..2\n";
print eval "use Big::Dummy; 1;" ? "ok 1\n" : "not ok 1\n";
print "ok 2 - TEST_VERBOSE\n";
END
'Big-Dummy/Liar/t/sanity.t' => <<'END',
print "1..3\n";
print eval "use Big::Dummy; 1;" ? "ok 1\n" : "not ok 1\n";
print eval "use Big::Liar; 1;" ? "ok 2\n" : "not ok 2\n";
print "ok 3 - TEST_VERBOSE\n";
END
'Big-Dummy/Liar/lib/Big/Liar.pm' => <<'END',
package Big::Liar;
$VERSION = 0.01;
1;
END
'Big-Dummy/Liar/Makefile.PL' => <<'END',
use ExtUtils::MakeMaker;
my $mm = WriteMakefile(
NAME => 'Big::Liar',
VERSION_FROM => 'lib/Big/Liar.pm',
_KEEP_AFTER_FLUSH => 1
);
print "Big::Liar's vars\n";
foreach my $key (qw(INST_LIB INST_ARCHLIB)) {
print "$key = $mm->{$key}\n";
}
END
'Big-Dummy/lib/Dummy/Split.pm' => <<'END',
package Dummy::Split;
$VERSION = 0.02;
use AutoLoader 'AUTOLOAD';
__END__
sub split { print "split\n"; }
1;
END
);
my $tmpdir;
# if given args, those are inserted as components in resulting path, eg:
# setup_recurs('dir') means instead of creating Big-Dummy/*, dir/Big-Dummy/*
sub setup_recurs {
my @chrs = ( "A" .. "Z", 0 .. 9 );
# annoyingly we cant use File::Temp here as it drags in XS code
# and we run under blocks to prevent XS code loads. This is a minimal
# patch to fix the issue.
$tmpdir = join "", "./temp-$$-", map { $chrs[rand(@chrs)] } 1..8;
mkdir($tmpdir) or die "Failed to create '$tmpdir': $!";
chdir($tmpdir) or die "Failed to chdir '$tmpdir': $!";
foreach my $file (sort keys %Files) {
my $text = $Files{$file};
# Convert to a relative, native file path.
$file = File::Spec->catfile(File::Spec->curdir, @_, split m{\/}, $file);
$file = File::Spec->rel2abs($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_recurs {
foreach my $file (keys %Files) {
my $dir = dirname($file);
if( -e $dir ) {
rmtree($dir) or next;
}
}
chdir("..");
rmtree($tmpdir);
return 1;
}
1;
|