Re: lib, ext, cpan and dist [PATCH] (take 2)
[perl.git] / ext / ExtUtils-MakeMaker / t / lib / MakeMaker / Test / Setup / PL_FILES.pm
1 package MakeMaker::Test::Setup::PL_FILES;
2
3 @ISA = qw(Exporter);
4 require Exporter;
5 @EXPORT = qw(setup teardown);
6
7 use strict;
8 use File::Path;
9 use File::Basename;
10 use File::Spec;
11 use MakeMaker::Test::Utils;
12
13 my %Files = (
14              'PL_FILES-Module/Makefile.PL'   => <<'END',
15 use ExtUtils::MakeMaker;
16
17 # A module for testing PL_FILES
18 WriteMakefile(
19     NAME     => 'PL_FILES::Module',
20     PL_FILES => { 'single.PL' => 'single.out',
21                   'multi.PL'  => [qw(1.out 2.out)],
22                   'Bar_pm.PL' => '$(INST_LIB)/PL/Bar.pm',
23     }
24 );
25 END
26
27              'PL_FILES-Module/single.PL'        => _gen_pl_files(),
28              'PL_FILES-Module/multi.PL'         => _gen_pl_files(),
29              'PL_FILES-Module/Bar_pm.PL'        => _gen_pm_files(),
30              'PL_FILES-Module/lib/PL/Foo.pm' => <<'END',
31 # Module to load to ensure PL_FILES have blib in @INC.
32 package PL::Foo;
33 sub bar { 42 }
34 1;
35 END
36
37 );
38
39
40 sub _gen_pl_files {
41     my $test = <<'END';
42 #!/usr/bin/perl -w
43
44 # Ensure we have blib in @INC
45 use PL::Foo;
46 die unless PL::Foo::bar() == 42;
47
48 # Had a bug where PL_FILES weren't sent the file to generate
49 die "argv empty\n" unless @ARGV;
50 die "too many in argv: @ARGV\n" unless @ARGV == 1;
51
52 my $file = $ARGV[0];
53 open OUT, ">$file" or die $!;
54
55 print OUT "Testing\n";
56 close OUT
57 END
58
59     $test =~ s/^\n//;
60
61     return $test;
62 }
63
64
65 sub _gen_pm_files {
66     my $test = <<'END';
67 #!/usr/bin/perl -w
68
69 # Ensure we do NOT have blib in @INC when building a module
70 eval { require PL::Foo; };
71 #die $@ unless $@ =~ m{^Can't locate PL/Foo.pm in \@INC };
72
73 # Had a bug where PL_FILES weren't sent the file to generate
74 die "argv empty\n" unless @ARGV;
75 die "too many in argv: @ARGV\n" unless @ARGV == 1;
76
77 my $file = $ARGV[0];
78 open OUT, ">$file" or die $!;
79
80 print OUT "Testing\n";
81 close OUT
82 END
83
84     $test =~ s/^\n//;
85
86     return $test;
87 }
88
89
90 sub setup {
91     setup_mm_test_root();
92     chdir 'MM_TEST_ROOT:[t]' if $^O eq 'VMS';
93
94     while(my($file, $text) = each %Files) {
95         # Convert to a relative, native file path.
96         $file = File::Spec->catfile(File::Spec->curdir, split m{\/}, $file);
97
98         my $dir = dirname($file);
99         mkpath $dir;
100         open(FILE, ">$file") || die "Can't create $file: $!";
101         print FILE $text;
102         close FILE;
103
104         # ensure file at least 1 second old for makes that assume
105         # files with the same time are out of date.
106         my $time = calibrate_mtime();
107         utime $time, $time - 1, $file;
108     }
109
110     return 1;
111 }
112
113 sub teardown { 
114     foreach my $file (keys %Files) {
115         my $dir = dirname($file);
116         if( -e $dir ) {
117             rmtree($dir) || return;
118         }
119     }
120     return 1;
121 }