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