3 # This tests MakeMaker against recursive builds
12 use Test::More tests => 26;
13 use MakeMaker::Test::Utils;
14 use MakeMaker::Test::Setup::Recurs;
16 # 'make disttest' sets a bunch of environment variables which interfere
18 delete @ENV{qw(PREFIX LIB MAKEFLAGS)};
20 my $perl = which_perl();
21 my $Is_VMS = $^O eq 'VMS';
27 my $Touch_Time = calibrate_mtime();
31 ok( setup_recurs(), 'setup' );
33 ok( chdir File::Spec->updir );
34 ok( teardown_recurs(), 'teardown' );
37 ok( chdir('Recurs'), q{chdir'd to Recurs} ) ||
38 diag("chdir failed: $!");
41 # Check recursive Makefile building.
42 my @mpl_out = run(qq{$perl Makefile.PL});
44 cmp_ok( $?, '==', 0, 'Makefile.PL exited with zero' ) ||
47 my $makefile = makefile_name();
49 ok( -e $makefile, 'Makefile written' );
50 ok( -e File::Spec->catfile('prj2',$makefile), 'sub Makefile written' );
52 my $make = make_run();
54 my $make_out = run("$make");
55 is( $?, 0, 'recursive make exited normally' ) || diag $make_out;
57 ok( chdir File::Spec->updir );
58 ok( teardown_recurs(), 'cleaning out recurs' );
59 ok( setup_recurs(), ' setting up fresh copy' );
60 ok( chdir('Recurs'), q{chdir'd to Recurs} ) ||
61 diag("chdir failed: $!");
65 @mpl_out = run(qq{$perl Makefile.PL "NORECURS=1"});
67 cmp_ok( $?, '==', 0, 'Makefile.PL NORECURS=1 exited with zero' ) ||
70 $makefile = makefile_name();
72 ok( -e $makefile, 'Makefile written' );
73 ok( !-e File::Spec->catfile('prj2',$makefile), 'sub Makefile not written' );
78 is( $?, 0, 'recursive make exited normally' );
81 ok( chdir File::Spec->updir );
82 ok( teardown_recurs(), 'cleaning out recurs' );
83 ok( setup_recurs(), ' setting up fresh copy' );
84 ok( chdir('Recurs'), q{chdir'd to Recurs} ) ||
85 diag("chdir failed: $!");
88 # Check that arguments aren't stomped when they have .. prepended
90 @mpl_out = run(qq{$perl Makefile.PL "INST_SCRIPT=cgi"});
92 cmp_ok( $?, '==', 0, 'Makefile.PL exited with zero' ) ||
95 $makefile = makefile_name();
96 my $submakefile = File::Spec->catfile('prj2',$makefile);
98 ok( -e $makefile, 'Makefile written' );
99 ok( -e $submakefile, 'sub Makefile written' );
101 my $inst_script = File::Spec->catdir(File::Spec->updir, 'cgi');
102 ok( open(MAKEFILE, $submakefile) ) || diag("Can't open $submakefile: $!");
104 like( <MAKEFILE>, qr/^\s*INST_SCRIPT\s*=\s*\Q$inst_script\E/m,
105 'prepend .. not stomping WriteMakefile args' )
111 # Quiet "make test" failure noise
114 my $test_out = run("$make test");
115 isnt $?, 0, 'test failure in a subdir causes make to fail';