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