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 if( $ENV{PERL_CORE} ) { 10 chdir 't' if -d 't'; 11 @INC = ('../lib', 'lib'); 12 } 13 else { 14 unshift @INC, 't/lib'; 15 } 16} 17 18use strict; 19use Test::More tests => 26; 20use MakeMaker::Test::Utils; 21use MakeMaker::Test::Setup::BFD; 22use ExtUtils::MakeMaker; 23use File::Spec; 24use TieOut; 25use Config; 26 27chdir 't'; 28 29perl_lib; 30 31$| = 1; 32 33my $Makefile = makefile_name; 34my $Curdir = File::Spec->curdir; 35my $Updir = File::Spec->updir; 36 37ok( setup_recurs(), 'setup' ); 38END { 39 ok( chdir File::Spec->updir ); 40 ok( teardown_recurs(), 'teardown' ); 41} 42 43ok( chdir 'Big-Dummy', "chdir'd to Big-Dummy" ) || 44 diag("chdir failed: $!"); 45 46my $stdout = tie *STDOUT, 'TieOut' or die; 47my $mm = WriteMakefile( 48 NAME => 'Big::Dummy', 49 VERSION_FROM => 'lib/Big/Dummy.pm', 50 PREREQ_PM => {}, 51 PERL_CORE => $ENV{PERL_CORE}, 52); 53like( $stdout->read, qr{ 54 Writing\ $Makefile\ for\ Big::Liar\n 55 Big::Liar's\ vars\n 56 INST_LIB\ =\ \S+\n 57 INST_ARCHLIB\ =\ \S+\n 58 Writing\ $Makefile\ for\ Big::Dummy\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); 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}; 103is( $c_mm->{INST_ARCHLIB}, 104 $c_mm->{PERL_CORE} ? $c_mm->{PERL_ARCHLIB} 105 : File::Spec->catdir($Updir, 'blib', 'arch'), 106 'CHILD INST_ARCHLIB'); 107is( $c_mm->{INST_BIN}, File::Spec->catdir($Updir, 'blib', 'bin'), 108 'CHILD INST_BIN' ); 109 110 111my $inst_lib = File::Spec->catdir($Curdir, 'blib', 'lib'); 112is( $mm->{INST_LIB}, 113 $mm->{PERL_CORE} ? $mm->{PERL_LIB} : $inst_lib, 'INST_LIB' ); 114 115 116# INSTALL* 117is( $mm->{INSTALLDIRS}, 'site', 'INSTALLDIRS' ); 118 119 120 121# Make sure the INSTALL*MAN*DIR variables work. We forgot them 122# at one point. 123$stdout = tie *STDOUT, 'TieOut' or die; 124$mm = WriteMakefile( 125 NAME => 'Big::Dummy', 126 VERSION_FROM => 'lib/Big/Dummy.pm', 127 PERL_CORE => $ENV{PERL_CORE}, 128 INSTALLMAN1DIR => 'none', 129 INSTALLSITEMAN3DIR => 'none', 130 INSTALLVENDORMAN1DIR => 'none', 131 INST_MAN1DIR => 'none', 132); 133like( $stdout->read, qr{ 134 Writing\ $Makefile\ for\ Big::Liar\n 135 Big::Liar's\ vars\n 136 INST_LIB\ =\ \S+\n 137 INST_ARCHLIB\ =\ \S+\n 138 Writing\ $Makefile\ for\ Big::Dummy\n 139}x ); 140undef $stdout; 141untie *STDOUT; 142 143isa_ok( $mm, 'ExtUtils::MakeMaker' ); 144 145is ( $mm->{INSTALLMAN1DIR}, 'none' ); 146is ( $mm->{INSTALLSITEMAN3DIR}, 'none' ); 147is ( $mm->{INSTALLVENDORMAN1DIR}, 'none' ); 148is ( $mm->{INST_MAN1DIR}, 'none' ); 149