1898184e3Ssthen#!/usr/bin/perl -w 2898184e3Ssthen 3898184e3SsthenBEGIN { 4898184e3Ssthen unshift @INC, 't/lib'; 5898184e3Ssthen} 6898184e3Ssthen 7898184e3Ssthenuse strict; 8898184e3Ssthenuse warnings; 9898184e3Ssthen 10898184e3Ssthenuse Carp; 11898184e3Ssthenuse Config; 12898184e3Ssthenuse ExtUtils::MM; 13898184e3Ssthenuse MakeMaker::Test::Utils; 14898184e3Ssthenuse File::Temp; 15898184e3Ssthenuse Cwd 'abs_path'; 16898184e3Ssthen 17b8851fccSafresh1use ExtUtils::MM; 189f11ffb7Safresh1use Test::More 199f11ffb7Safresh1 !MM->can_run(make()) && $ENV{PERL_CORE} && $Config{'usecrosscompile'} 20b8851fccSafresh1 ? (skip_all => "cross-compiling and make not available") 219f11ffb7Safresh1 : (tests => 18); 22898184e3Ssthen 23898184e3Ssthen#--------------------- Setup 24898184e3Ssthen 25898184e3Ssthenmy $cwd = abs_path; 26898184e3Ssthenmy $perl = which_perl; 27898184e3Ssthenmy $make = make_run(); 28*eac174f2Safresh1my $mm = bless { NAME => "Foo", MAKE => $Config{make}, PARENT_NAME => '', PERL_SRC => '' }, "MM"; 29898184e3Ssthen$mm->init_INST; # *PERLRUN needs INIT_* 30898184e3Ssthen$mm->init_PERL; # generic ECHO needs ABSPERLRUN 31898184e3Ssthen$mm->init_tools; # need ECHO 32898184e3Ssthen 33898184e3Ssthen# Run Perl with the currently installing MakeMaker 34898184e3Ssthen$mm->{$_} .= q[ "-I$(INST_ARCHLIB)" "-I$(INST_LIB)"] for qw( PERLRUN FULLPERLRUN ABSPERLRUN ); 35898184e3Ssthen 36b8851fccSafresh1#see sub specify_shell 37b8851fccSafresh1my $shell = $^O eq 'MSWin32' && $mm->is_make_type('gmake') ? $ENV{COMSPEC} : undef; 38b8851fccSafresh1 39898184e3Ssthen#------------------- Testing functions 40898184e3Ssthen 41898184e3Ssthensub test_for_echo { 42898184e3Ssthen my($calls, $want, $name) = @_; 43898184e3Ssthen my $output_file = $calls->[0][1]; 44898184e3Ssthen 45898184e3Ssthen note "Testing $name"; 46898184e3Ssthen 47898184e3Ssthen my $dir = File::Temp->newdir(); 48898184e3Ssthen chdir $dir; 49898184e3Ssthen note "Temp dir: $dir"; 50898184e3Ssthen 51898184e3Ssthen # Write a Makefile to test the output of echo 52898184e3Ssthen { 53898184e3Ssthen open my $makefh, ">", "Makefile" or croak "Can't open Makefile: $!"; 54898184e3Ssthen print $makefh "FOO=42\n"; # a variable to test with 55898184e3Ssthen 56898184e3Ssthen for my $key (qw(INST_ARCHLIB INST_LIB PERL ABSPERL ABSPERLRUN ECHO)) { 57898184e3Ssthen print $makefh "$key=$mm->{$key}\n"; 58898184e3Ssthen } 59b8851fccSafresh1 print $makefh "SHELL=$shell\n" if defined $shell; 60898184e3Ssthen 61898184e3Ssthen print $makefh "all :\n"; 62898184e3Ssthen for my $args (@$calls) { 63898184e3Ssthen print $makefh map { "\t$_\n" } $mm->echo(@$args); 64898184e3Ssthen } 65898184e3Ssthen } 66898184e3Ssthen 67898184e3Ssthen # Run the Makefile 68898184e3Ssthen ok run($make), "make: $name"; 69898184e3Ssthen 70898184e3Ssthen # Check it made the file in question 71898184e3Ssthen ok -e $output_file, "$output_file exists"; 72898184e3Ssthen open my $fh, "<", $output_file or croak "Can't open $output_file: $!"; 73898184e3Ssthen is join("", <$fh>), $want, "contents"; 74898184e3Ssthen 75898184e3Ssthen chdir $cwd; 76898184e3Ssthen} 77898184e3Ssthen 78898184e3Ssthen 79898184e3Ssthen#---------------- Tests begin 80898184e3Ssthen 81898184e3Ssthentest_for_echo( 82898184e3Ssthen [["Foo", "bar.txt"]], 83898184e3Ssthen "Foo\n", 84898184e3Ssthen "simple echo" 85898184e3Ssthen); 86898184e3Ssthen 87898184e3Ssthentest_for_echo( 88898184e3Ssthen [["Foo\nBar\nBaz Biff\n", "something.txt"]], 89898184e3Ssthen "Foo\nBar\nBaz Biff\n", 90898184e3Ssthen "multiline echo" 91898184e3Ssthen); 92898184e3Ssthen 93898184e3Ssthentest_for_echo( 94898184e3Ssthen [['$something$', "something.txt"]], 95898184e3Ssthen '$something$'."\n", 96898184e3Ssthen "dollar signs escaped" 97898184e3Ssthen); 98898184e3Ssthen 99898184e3Ssthentest_for_echo( 100898184e3Ssthen [['$(something)', "something.txt"]], 101898184e3Ssthen '$(something)'."\n", 102898184e3Ssthen "variables escaped" 103898184e3Ssthen); 104898184e3Ssthen 105898184e3Ssthentest_for_echo( 106898184e3Ssthen [['Answer: $(FOO)', "bar.txt", { allow_variables => 1 }]], 107898184e3Ssthen "Answer: 42\n", 108898184e3Ssthen "allow_variables" 109898184e3Ssthen); 110898184e3Ssthen 111898184e3Ssthentest_for_echo( 112898184e3Ssthen [ 113898184e3Ssthen ["Foo", "bar.txt"], 114898184e3Ssthen ["Bar", "bar.txt", { append => 1 }], 115898184e3Ssthen ["Baz", "bar.txt", 1], 116898184e3Ssthen ], 117898184e3Ssthen "Foo\nBar\nBaz\n", 118898184e3Ssthen "append" 119898184e3Ssthen); 120