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 { setup_mm_test_root(); chdir 'MM_TEST_ROOT:[t]' if $^O eq 'VMS'; 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; }