1#!/usr/bin/perl -w 2 3# This tests MakeMaker against recursive builds 4 5BEGIN { 6 unshift @INC, 't/lib'; 7} 8 9use strict; 10use Config; 11 12use Test::More tests => 26; 13use MakeMaker::Test::Utils; 14use MakeMaker::Test::Setup::Recurs; 15 16# 'make disttest' sets a bunch of environment variables which interfere 17# with our testing. 18delete @ENV{qw(PREFIX LIB MAKEFLAGS)}; 19 20my $perl = which_perl(); 21my $Is_VMS = $^O eq 'VMS'; 22 23chdir('t'); 24 25perl_lib; 26 27my $Touch_Time = calibrate_mtime(); 28 29$| = 1; 30 31ok( setup_recurs(), 'setup' ); 32END { 33 ok( chdir File::Spec->updir ); 34 ok( teardown_recurs(), 'teardown' ); 35} 36 37ok( chdir('Recurs'), q{chdir'd to Recurs} ) || 38 diag("chdir failed: $!"); 39 40 41# Check recursive Makefile building. 42my @mpl_out = run(qq{$perl Makefile.PL}); 43 44cmp_ok( $?, '==', 0, 'Makefile.PL exited with zero' ) || 45 diag(@mpl_out); 46 47my $makefile = makefile_name(); 48 49ok( -e $makefile, 'Makefile written' ); 50ok( -e File::Spec->catfile('prj2',$makefile), 'sub Makefile written' ); 51 52my $make = make_run(); 53 54my $make_out = run("$make"); 55is( $?, 0, 'recursive make exited normally' ) || diag $make_out; 56 57ok( chdir File::Spec->updir ); 58ok( teardown_recurs(), 'cleaning out recurs' ); 59ok( setup_recurs(), ' setting up fresh copy' ); 60ok( chdir('Recurs'), q{chdir'd to Recurs} ) || 61 diag("chdir failed: $!"); 62 63 64# Check NORECURS 65@mpl_out = run(qq{$perl Makefile.PL "NORECURS=1"}); 66 67cmp_ok( $?, '==', 0, 'Makefile.PL NORECURS=1 exited with zero' ) || 68 diag(@mpl_out); 69 70$makefile = makefile_name(); 71 72ok( -e $makefile, 'Makefile written' ); 73ok( !-e File::Spec->catfile('prj2',$makefile), 'sub Makefile not written' ); 74 75$make = make_run(); 76 77run("$make"); 78is( $?, 0, 'recursive make exited normally' ); 79 80 81ok( chdir File::Spec->updir ); 82ok( teardown_recurs(), 'cleaning out recurs' ); 83ok( setup_recurs(), ' setting up fresh copy' ); 84ok( chdir('Recurs'), q{chdir'd to Recurs} ) || 85 diag("chdir failed: $!"); 86 87 88# Check that arguments aren't stomped when they have .. prepended 89# [rt.perl.org 4345] 90@mpl_out = run(qq{$perl Makefile.PL "INST_SCRIPT=cgi"}); 91 92cmp_ok( $?, '==', 0, 'Makefile.PL exited with zero' ) || 93 diag(@mpl_out); 94 95$makefile = makefile_name(); 96my $submakefile = File::Spec->catfile('prj2',$makefile); 97 98ok( -e $makefile, 'Makefile written' ); 99ok( -e $submakefile, 'sub Makefile written' ); 100 101my $inst_script = File::Spec->catdir(File::Spec->updir, 'cgi'); 102ok( open(MAKEFILE, $submakefile) ) || diag("Can't open $submakefile: $!"); 103{ local $/; 104 like( <MAKEFILE>, qr/^\s*INST_SCRIPT\s*=\s*\Q$inst_script\E/m, 105 'prepend .. not stomping WriteMakefile args' ) 106} 107close MAKEFILE; 108 109 110{ 111 # Quiet "make test" failure noise 112 close *STDERR; 113 114 my $test_out = run("$make test"); 115 isnt $?, 0, 'test failure in a subdir causes make to fail'; 116} 117