1b39c5158Smillert#!/usr/bin/perl -w 2b39c5158Smillert 3b39c5158Smillert# Wherein we ensure the INST_* and INSTALL* variables are set correctly 4b39c5158Smillert# when various PREFIX variables are set. 5b39c5158Smillert# 6b39c5158Smillert# Essentially, this test is a Makefile.PL. 7b39c5158Smillert 8b39c5158SmillertBEGIN { 9b39c5158Smillert unshift @INC, 't/lib'; 10b39c5158Smillert} 11b39c5158Smillert 12b39c5158Smillertuse strict; 13256a93a4Safresh1use warnings; 14b39c5158Smillertuse Test::More tests => 52; 15b39c5158Smillertuse MakeMaker::Test::Utils; 16b39c5158Smillertuse MakeMaker::Test::Setup::BFD; 17b39c5158Smillertuse ExtUtils::MakeMaker; 18b39c5158Smillertuse File::Spec; 19b39c5158Smillertuse TieOut; 20b39c5158Smillertuse ExtUtils::MakeMaker::Config; 21b39c5158Smillert 22b39c5158Smillertmy $Is_VMS = $^O eq 'VMS'; 23b39c5158Smillert 245759b3d2Safresh1chdir 't'; 255759b3d2Safresh1perl_lib; # sets $ENV{PERL5LIB} relative to t/ 26b39c5158Smillert 275759b3d2Safresh1use File::Temp qw[tempdir]; 285759b3d2Safresh1my $tmpdir = tempdir( DIR => '../t', CLEANUP => 1 ); 295759b3d2Safresh1use Cwd; my $cwd = getcwd; END { chdir $cwd } # so File::Temp can cleanup 305759b3d2Safresh1chdir $tmpdir; 31b39c5158Smillert 32b39c5158Smillert$| = 1; 33b39c5158Smillert 34b39c5158Smillertmy $Makefile = makefile_name; 35b39c5158Smillertmy $Curdir = File::Spec->curdir; 36b39c5158Smillertmy $Updir = File::Spec->updir; 37b39c5158Smillert 38b39c5158Smillertok( setup_recurs(), 'setup' ); 39b39c5158SmillertEND { 40b39c5158Smillert ok( chdir File::Spec->updir ); 41b39c5158Smillert ok( teardown_recurs(), 'teardown' ); 42b39c5158Smillert} 43b39c5158Smillert 44b39c5158Smillertok( chdir 'Big-Dummy', "chdir'd to Big-Dummy" ) || 45b39c5158Smillert diag("chdir failed: $!"); 46b39c5158Smillert 47b39c5158Smillertmy $stdout = tie *STDOUT, 'TieOut' or die; 48b39c5158Smillert 49b39c5158Smillertmy $mm = WriteMakefile( 50b39c5158Smillert NAME => 'Big::Dummy', 51b39c5158Smillert VERSION_FROM => 'lib/Big/Dummy.pm', 52b39c5158Smillert PREREQ_PM => {}, 53b39c5158Smillert PERL_CORE => $ENV{PERL_CORE}, 54b39c5158Smillert); 55b39c5158Smillert 56b39c5158Smillertlike( $stdout->read, qr{ 575759b3d2Safresh1 (?:Generating\ a\ \w+?-style\ $Makefile\n)? 585759b3d2Safresh1 (?:Writing\ $Makefile\ for\ Big::Liar\n)? 59898184e3Ssthen (?:Writing\ MYMETA.yml\ and\ MYMETA.json\n)? 60b39c5158Smillert Big::Liar's\ vars\n 61b39c5158Smillert INST_LIB\ =\ \S+\n 62b39c5158Smillert INST_ARCHLIB\ =\ \S+\n 636fb12b70Safresh1 Generating\ a\ \w+?-style\ $Makefile\n 64b39c5158Smillert Writing\ $Makefile\ for\ Big::Dummy\n 65898184e3Ssthen (?:Writing\ MYMETA.yml\ and\ MYMETA.json\n)? 66b39c5158Smillert}x ); 67b39c5158Smillert 68b39c5158Smillertis( $mm->{PREFIX}, '$(SITEPREFIX)', 'PREFIX set based on INSTALLDIRS' ); 69b39c5158Smillert 70b39c5158Smillertisa_ok( $mm, 'ExtUtils::MakeMaker' ); 71b39c5158Smillert 72b39c5158Smillertis( $mm->{NAME}, 'Big::Dummy', 'NAME' ); 73b39c5158Smillertis( $mm->{VERSION}, 0.01, 'VERSION' ); 74b39c5158Smillert 75b39c5158Smillertforeach my $prefix (qw(PREFIX PERLPREFIX SITEPREFIX VENDORPREFIX)) { 76b39c5158Smillert unlike( $mm->{$prefix}, qr/\$\(PREFIX\)/ ); 77b39c5158Smillert} 78b39c5158Smillert 79b39c5158Smillert 80b39c5158Smillertmy $PREFIX = File::Spec->catdir('foo', 'bar'); 81b39c5158Smillert$mm = WriteMakefile( 82b39c5158Smillert NAME => 'Big::Dummy', 83b39c5158Smillert VERSION_FROM => 'lib/Big/Dummy.pm', 84b39c5158Smillert PREREQ_PM => {}, 85b39c5158Smillert PERL_CORE => $ENV{PERL_CORE}, 86b39c5158Smillert PREFIX => $PREFIX, 87b39c5158Smillert); 88b39c5158Smillertlike( $stdout->read, qr{ 895759b3d2Safresh1 (?:Generating\ a\ \w+?-style\ $Makefile\n)? 905759b3d2Safresh1 (?:Writing\ $Makefile\ for\ Big::Liar\n)? 91898184e3Ssthen (?:Writing\ MYMETA.yml\ and\ MYMETA.json\n)? 92b39c5158Smillert Big::Liar's\ vars\n 93b39c5158Smillert INST_LIB\ =\ \S+\n 94b39c5158Smillert INST_ARCHLIB\ =\ \S+\n 956fb12b70Safresh1 Generating\ a\ \w+?-style\ $Makefile\n 96b39c5158Smillert Writing\ $Makefile\ for\ Big::Dummy\n 97898184e3Ssthen (?:Writing\ MYMETA.yml\ and\ MYMETA.json\n)? 98b39c5158Smillert}x ); 99b39c5158Smillertundef $stdout; 100b39c5158Smillertuntie *STDOUT; 101b39c5158Smillert 102b39c5158Smillertis( $mm->{PREFIX}, $PREFIX, 'PREFIX' ); 103b39c5158Smillert 104b39c5158Smillertforeach my $prefix (qw(PERLPREFIX SITEPREFIX VENDORPREFIX)) { 105b39c5158Smillert is( $mm->{$prefix}, '$(PREFIX)', "\$(PREFIX) overrides $prefix" ); 106b39c5158Smillert} 107b39c5158Smillert 108b39c5158Smillertis( !!$mm->{PERL_CORE}, !!$ENV{PERL_CORE}, 'PERL_CORE' ); 109b39c5158Smillert 110b39c5158Smillertmy($perl_src, $mm_perl_src); 111b39c5158Smillertif( $ENV{PERL_CORE} ) { 112*f2a19305Safresh1 $perl_src = File::Spec->catdir($Updir, $Updir, $Updir, $Updir, $Updir, $Updir); 113b39c5158Smillert $perl_src = File::Spec->canonpath($perl_src); 114b39c5158Smillert $mm_perl_src = File::Spec->canonpath($mm->{PERL_SRC}); 115b39c5158Smillert} 116b39c5158Smillertelse { 117b39c5158Smillert $mm_perl_src = $mm->{PERL_SRC}; 118b39c5158Smillert} 119b39c5158Smillert 120b39c5158Smillertis( $mm_perl_src, $perl_src, 'PERL_SRC' ); 121b39c5158Smillert 122b39c5158Smillert 123b39c5158Smillert# Every INSTALL* variable must start with some PREFIX. 124b39c5158Smillertmy %Install_Vars = ( 125b39c5158Smillert PERL => [qw(archlib privlib bin man1dir man3dir script)], 126b39c5158Smillert SITE => [qw(sitearch sitelib sitebin siteman1dir siteman3dir)], 127b39c5158Smillert VENDOR => [qw(vendorarch vendorlib vendorbin vendorman1dir vendorman3dir)] 128b39c5158Smillert); 129b39c5158Smillert 130b39c5158Smillertwhile( my($type, $vars) = each %Install_Vars) { 131b39c5158Smillert SKIP: { 132b39c5158Smillert skip "VMS must expand macros in INSTALL* vars", scalar @$vars 133b39c5158Smillert if $Is_VMS; 134b39c5158Smillert skip '$Config{usevendorprefix} not set', scalar @$vars 135b39c5158Smillert if $type eq 'VENDOR' and !$Config{usevendorprefix}; 136b39c5158Smillert 137b39c5158Smillert foreach my $var (@$vars) { 138b39c5158Smillert my $installvar = "install$var"; 139b39c5158Smillert my $prefix = '$('.$type.'PREFIX)'; 140b39c5158Smillert 141b39c5158Smillert SKIP: { 142b39c5158Smillert skip uc($installvar).' set to another INSTALL variable', 1 143b39c5158Smillert if $mm->{uc $installvar} =~ /^\$\(INSTALL.*\)$/; 144b39c5158Smillert 145b39c5158Smillert # support for man page skipping 146b39c5158Smillert $prefix = 'none' if $type eq 'PERL' && 147b39c5158Smillert $var =~ /man/ && 148b39c5158Smillert !$Config{$installvar}; 149b39c5158Smillert like( $mm->{uc $installvar}, qr/^\Q$prefix\E/, 150b39c5158Smillert "$prefix + $var" ); 151b39c5158Smillert } 152b39c5158Smillert } 153b39c5158Smillert } 154b39c5158Smillert} 155b39c5158Smillert 156b39c5158Smillert# Check that when installman*dir isn't set in Config no man pages 157b39c5158Smillert# are generated. 158b39c5158Smillert{ 159b39c5158Smillert _set_config(installman1dir => ''); 160b39c5158Smillert _set_config(installman3dir => ''); 161b39c5158Smillert 162b39c5158Smillert my $wibble = File::Spec->catdir(qw(wibble and such)); 163b39c5158Smillert my $stdout = tie *STDOUT, 'TieOut' or die; 164b39c5158Smillert my $mm = WriteMakefile( 165b39c5158Smillert NAME => 'Big::Dummy', 166b39c5158Smillert VERSION_FROM => 'lib/Big/Dummy.pm', 167b39c5158Smillert PREREQ_PM => {}, 168b39c5158Smillert PERL_CORE => $ENV{PERL_CORE}, 169b39c5158Smillert PREFIX => $PREFIX, 170b39c5158Smillert INSTALLMAN1DIR=> $wibble, 171b39c5158Smillert ); 172b39c5158Smillert 173b39c5158Smillert is( $mm->{INSTALLMAN1DIR}, $wibble ); 174b39c5158Smillert is( $mm->{INSTALLMAN3DIR}, 'none' ); 175b39c5158Smillert} 176b39c5158Smillert 177b39c5158Smillert# Check that when installvendorman*dir is set in Config it is honored 178b39c5158Smillert# [rt.cpan.org 2949] 179b39c5158Smillert{ 180b39c5158Smillert _set_config(installvendorman1dir => File::Spec->catdir('foo','bar') ); 181b39c5158Smillert _set_config(installvendorman3dir => '' ); 182b39c5158Smillert _set_config(usevendorprefix => 1 ); 183b39c5158Smillert _set_config(vendorprefixexp => 'something' ); 184b39c5158Smillert 185b39c5158Smillert my $stdout = tie *STDOUT, 'TieOut' or die; 186b39c5158Smillert my $mm = WriteMakefile( 187b39c5158Smillert NAME => 'Big::Dummy', 188b39c5158Smillert VERSION_FROM => 'lib/Big/Dummy.pm', 189b39c5158Smillert PREREQ_PM => {}, 190b39c5158Smillert PERL_CORE => $ENV{PERL_CORE}, 191b39c5158Smillert 192b39c5158Smillert # In case the local installation doesn't have man pages. 193b39c5158Smillert INSTALLMAN1DIR=> 'foo/bar/baz', 194b39c5158Smillert INSTALLMAN3DIR=> 'foo/bar/baz', 195b39c5158Smillert ); 196b39c5158Smillert 197b39c5158Smillert is( $mm->{INSTALLVENDORMAN1DIR}, File::Spec->catdir('foo','bar'), 198b39c5158Smillert 'installvendorman1dir (in %Config) not modified' ); 199b39c5158Smillert isnt( $mm->{INSTALLVENDORMAN3DIR}, '', 200b39c5158Smillert 'installvendorman3dir (not in %Config) set' ); 201b39c5158Smillert} 202b39c5158Smillert 203b39c5158Smillert# Check that when installsiteman*dir isn't set in Config it falls back 204b39c5158Smillert# to installman*dir 205b39c5158Smillert{ 206b39c5158Smillert _set_config(installman1dir => File::Spec->catdir('foo', 'bar') ); 207b39c5158Smillert _set_config(installman3dir => File::Spec->catdir('foo', 'baz') ); 208b39c5158Smillert _set_config(installsiteman1dir => '' ); 209b39c5158Smillert _set_config(installsiteman3dir => '' ); 210b39c5158Smillert _set_config(installvendorman1dir => '' ); 211b39c5158Smillert _set_config(installvendorman3dir => '' ); 212b39c5158Smillert _set_config(usevendorprefix => 'define' ); 213b39c5158Smillert _set_config(vendorprefixexp => 'something' ); 214b39c5158Smillert 215b39c5158Smillert my $wibble = File::Spec->catdir(qw(wibble and such)); 216b39c5158Smillert my $stdout = tie *STDOUT, 'TieOut' or die; 217b39c5158Smillert my $mm = WriteMakefile( 218b39c5158Smillert NAME => 'Big::Dummy', 219b39c5158Smillert VERSION_FROM => 'lib/Big/Dummy.pm', 220b39c5158Smillert PERL_CORE => $ENV{PERL_CORE}, 221b39c5158Smillert ); 222b39c5158Smillert 223b39c5158Smillert is( $mm->{INSTALLMAN1DIR}, File::Spec->catdir('foo', 'bar') ); 224b39c5158Smillert is( $mm->{INSTALLMAN3DIR}, File::Spec->catdir('foo', 'baz') ); 225b39c5158Smillert SKIP: { 226b39c5158Smillert skip "VMS must expand macros in INSTALL* vars", 4 if $Is_VMS; 227b39c5158Smillert 228b39c5158Smillert is( $mm->{INSTALLSITEMAN1DIR}, '$(INSTALLMAN1DIR)' ); 229b39c5158Smillert is( $mm->{INSTALLSITEMAN3DIR}, '$(INSTALLMAN3DIR)' ); 230b39c5158Smillert is( $mm->{INSTALLVENDORMAN1DIR}, '$(INSTALLMAN1DIR)' ); 231b39c5158Smillert is( $mm->{INSTALLVENDORMAN3DIR}, '$(INSTALLMAN3DIR)' ); 232b39c5158Smillert } 233b39c5158Smillert} 234b39c5158Smillert 235b39c5158Smillert 236b39c5158Smillert# Check that when usevendoprefix and installvendorman*dir aren't set in 237b39c5158Smillert# Config it leaves them unset. 238b39c5158Smillert{ 239b39c5158Smillert _set_config(installman1dir => File::Spec->catdir('foo', 'bar') ); 240b39c5158Smillert _set_config(installman3dir => File::Spec->catdir('foo', 'baz') ); 241b39c5158Smillert _set_config(installsiteman1dir => '' ); 242b39c5158Smillert _set_config(installsiteman3dir => '' ); 243b39c5158Smillert _set_config(installvendorman1dir => '' ); 244b39c5158Smillert _set_config(installvendorman3dir => '' ); 245b39c5158Smillert _set_config(usevendorprefix => '' ); 246b39c5158Smillert _set_config(vendorprefixexp => '' ); 247b39c5158Smillert 248b39c5158Smillert my $wibble = File::Spec->catdir(qw(wibble and such)); 249b39c5158Smillert my $stdout = tie *STDOUT, 'TieOut' or die; 250b39c5158Smillert my $mm = WriteMakefile( 251b39c5158Smillert NAME => 'Big::Dummy', 252b39c5158Smillert VERSION_FROM => 'lib/Big/Dummy.pm', 253b39c5158Smillert PERL_CORE => $ENV{PERL_CORE}, 254b39c5158Smillert ); 255b39c5158Smillert 256b39c5158Smillert is( $mm->{INSTALLMAN1DIR}, File::Spec->catdir('foo', 'bar') ); 257b39c5158Smillert is( $mm->{INSTALLMAN3DIR}, File::Spec->catdir('foo', 'baz') ); 258b39c5158Smillert SKIP: { 259b39c5158Smillert skip "VMS must expand macros in INSTALL* vars", 2 if $Is_VMS; 260b39c5158Smillert is( $mm->{INSTALLSITEMAN1DIR}, '$(INSTALLMAN1DIR)' ); 261b39c5158Smillert is( $mm->{INSTALLSITEMAN3DIR}, '$(INSTALLMAN3DIR)' ); 262b39c5158Smillert } 263b39c5158Smillert is( $mm->{INSTALLVENDORMAN1DIR}, '' ); 264b39c5158Smillert is( $mm->{INSTALLVENDORMAN3DIR}, '' ); 265b39c5158Smillert} 266b39c5158Smillert 267b39c5158Smillert 268b39c5158Smillertsub _set_config { 269b39c5158Smillert my($k,$v) = @_; 270b39c5158Smillert (my $k_no_install = $k) =~ s/^install//i; 271b39c5158Smillert $Config{$k} = $v; 272b39c5158Smillert 273b39c5158Smillert # Because VMS's config has traditionally been underpopulated, it will 274b39c5158Smillert # fall back to the install-less versions in desperation. 275b39c5158Smillert $Config{$k_no_install} = $v if $Is_VMS; 276b39c5158Smillert return; 277b39c5158Smillert} 278