1#!/usr/bin/perl -w 2 3# Wherein we ensure the INST_* and INSTALL* variables are set correctly 4# in a default Makefile.PL run 5# 6# Essentially, this test is a Makefile.PL. 7 8BEGIN { 9 unshift @INC, 't/lib'; 10} 11 12use strict; 13use Test::More tests => 26; 14use MakeMaker::Test::Utils; 15use MakeMaker::Test::Setup::BFD; 16use ExtUtils::MakeMaker; 17use File::Spec; 18use TieOut; 19use Config; 20 21chdir 't'; 22perl_lib; # sets $ENV{PERL5LIB} relative to t/ 23 24use File::Temp qw[tempdir]; 25my $tmpdir = tempdir( DIR => '../t', CLEANUP => 1 ); 26use Cwd; my $cwd = getcwd; END { chdir $cwd } # so File::Temp can cleanup 27chdir $tmpdir; 28 29$| = 1; 30 31my $Makefile = makefile_name; 32my $Curdir = File::Spec->curdir; 33my $Updir = File::Spec->updir; 34 35ok( setup_recurs(), 'setup' ); 36END { 37 ok( chdir File::Spec->updir ); 38 ok( teardown_recurs(), 'teardown' ); 39} 40 41ok( chdir 'Big-Dummy', "chdir'd to Big-Dummy" ) || 42 diag("chdir failed: $!"); 43 44my $stdout = tie *STDOUT, 'TieOut' or die; 45my $mm = WriteMakefile( 46 NAME => 'Big::Dummy', 47 VERSION_FROM => 'lib/Big/Dummy.pm', 48 PREREQ_PM => {}, 49 PERL_CORE => $ENV{PERL_CORE}, 50); 51like( $stdout->read, qr{ 52 (?:Generating\ a\ \w+?-style\ $Makefile\n)? 53 (?:Writing\ $Makefile\ for\ Big::Liar\n)? 54 (?:Writing\ MYMETA.yml\ and\ MYMETA.json\n)? 55 Big::Liar's\ vars\n 56 INST_LIB\ =\ \S+\n 57 INST_ARCHLIB\ =\ \S+\n 58 Generating\ a\ \w+?-style\ $Makefile\n 59 Writing\ $Makefile\ for\ Big::Dummy\n 60 (?:Writing\ MYMETA.yml\ and\ MYMETA.json\n)? 61}x ); 62undef $stdout; 63untie *STDOUT; 64 65isa_ok( $mm, 'ExtUtils::MakeMaker' ); 66 67is( $mm->{NAME}, 'Big::Dummy', 'NAME' ); 68is( $mm->{VERSION}, 0.01, 'VERSION' ); 69 70my $config_prefix = $Config{installprefixexp} || $Config{installprefix} || 71 $Config{prefixexp} || $Config{prefix}; 72is( $mm->{PERLPREFIX}, $config_prefix, 'PERLPREFIX' ); 73 74is( !!$mm->{PERL_CORE}, !!$ENV{PERL_CORE}, 'PERL_CORE' ); 75 76my($perl_src, $mm_perl_src); 77if( $ENV{PERL_CORE} ) { 78 $perl_src = File::Spec->catdir($Updir, $Updir, $Updir, $Updir, $Updir); 79 $perl_src = File::Spec->canonpath($perl_src); 80 $mm_perl_src = File::Spec->canonpath($mm->{PERL_SRC}); 81} 82else { 83 $mm_perl_src = $mm->{PERL_SRC}; 84} 85 86is( $mm_perl_src, $perl_src, 'PERL_SRC' ); 87 88 89# PERM_* 90is( $mm->{PERM_RW}, 644, 'PERM_RW' ); 91is( $mm->{PERM_RWX}, 755, 'PERM_RWX' ); 92 93 94# INST_* 95is( $mm->{INST_ARCHLIB}, 96 $mm->{PERL_CORE} ? $mm->{PERL_ARCHLIB} 97 : File::Spec->catdir($Curdir, 'blib', 'arch'), 98 'INST_ARCHLIB'); 99is( $mm->{INST_BIN}, File::Spec->catdir($Curdir, 'blib', 'bin'), 100 'INST_BIN' ); 101 102is( keys %{$mm->{CHILDREN}}, 1 ); 103my($child_pack) = keys %{$mm->{CHILDREN}}; 104my $c_mm = $mm->{CHILDREN}{$child_pack}; 105# Android passes ARCHLIB through ->rel2abs, so in case the same 106# path is presented in two different ways, we need to 107# pass it through Cwd::realpath. 108my $normalize = $^O =~ /android/ ? \&Cwd::realpath : sub {shift}; 109is( $normalize->($c_mm->{INST_ARCHLIB}), 110 $normalize->($c_mm->{PERL_CORE} ? $c_mm->{PERL_ARCHLIB} 111 : File::Spec->catdir($Updir, 'blib', 'arch')), 112 'CHILD INST_ARCHLIB'); 113is( $c_mm->{INST_BIN}, File::Spec->catdir($Updir, 'blib', 'bin'), 114 'CHILD INST_BIN' ); 115 116 117my $inst_lib = File::Spec->catdir($Curdir, 'blib', 'lib'); 118is( $mm->{INST_LIB}, 119 $mm->{PERL_CORE} ? $mm->{PERL_LIB} : $inst_lib, 'INST_LIB' ); 120 121 122# INSTALL* 123is( $mm->{INSTALLDIRS}, 'site', 'INSTALLDIRS' ); 124 125 126 127# Make sure the INSTALL*MAN*DIR variables work. We forgot them 128# at one point. 129$stdout = tie *STDOUT, 'TieOut' or die; 130$mm = WriteMakefile( 131 NAME => 'Big::Dummy', 132 VERSION_FROM => 'lib/Big/Dummy.pm', 133 PERL_CORE => $ENV{PERL_CORE}, 134 INSTALLMAN1DIR => 'none', 135 INSTALLSITEMAN3DIR => 'none', 136 INSTALLVENDORMAN1DIR => 'none', 137 INST_MAN1DIR => 'none', 138); 139like( $stdout->read, qr{ 140 (?:Generating\ a\ \w+?-style\ $Makefile\n)? 141 (?:Writing\ $Makefile\ for\ Big::Liar\n)? 142 (?:Writing\ MYMETA.yml\ and\ MYMETA.json\n)? 143 Big::Liar's\ vars\n 144 INST_LIB\ =\ \S+\n 145 INST_ARCHLIB\ =\ \S+\n 146 Generating\ a\ \w+?-style\ $Makefile\n 147 Writing\ $Makefile\ for\ Big::Dummy\n 148 (?:Writing\ MYMETA.yml\ and\ MYMETA.json\n)? 149}x ); 150undef $stdout; 151untie *STDOUT; 152 153isa_ok( $mm, 'ExtUtils::MakeMaker' ); 154 155is ( $mm->{INSTALLMAN1DIR}, 'none' ); 156is ( $mm->{INSTALLSITEMAN3DIR}, 'none' ); 157is ( $mm->{INSTALLVENDORMAN1DIR}, 'none' ); 158is ( $mm->{INST_MAN1DIR}, 'none' ); 159