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