1package MakeMaker::Test::Setup::PL_FILES; 2 3@ISA = qw(Exporter); 4require Exporter; 5@EXPORT = qw(setup teardown); 6 7use strict; 8use File::Path; 9use File::Basename; 10use File::Spec; 11use MakeMaker::Test::Utils; 12 13my %Files = ( 14 'PL_FILES-Module/Makefile.PL' => <<'END', 15use ExtUtils::MakeMaker; 16 17# A module for testing PL_FILES 18WriteMakefile( 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); 25END 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. 32package PL::Foo; 33sub bar { 42 } 341; 35END 36 37); 38 39 40sub _gen_pl_files { 41 my $test = <<'END'; 42#!/usr/bin/perl -w 43 44# Ensure we have blib in @INC 45use PL::Foo; 46die unless PL::Foo::bar() == 42; 47 48# Had a bug where PL_FILES weren't sent the file to generate 49die "argv empty\n" unless @ARGV; 50die "too many in argv: @ARGV\n" unless @ARGV == 1; 51 52my $file = $ARGV[0]; 53open OUT, ">$file" or die $!; 54 55print OUT "Testing\n"; 56close OUT 57END 58 59 $test =~ s/^\n//; 60 61 return $test; 62} 63 64 65sub _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 70eval { 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 74die "argv empty\n" unless @ARGV; 75die "too many in argv: @ARGV\n" unless @ARGV == 1; 76 77my $file = $ARGV[0]; 78open OUT, ">$file" or die $!; 79 80print OUT "Testing\n"; 81close OUT 82END 83 84 $test =~ s/^\n//; 85 86 return $test; 87} 88 89 90sub 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 105 return 1; 106} 107 108sub teardown { 109 foreach my $file (keys %Files) { 110 my $dir = dirname($file); 111 if( -e $dir ) { 112 rmtree($dir) || return; 113 } 114 } 115 return 1; 116} 117