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