MM_Unix.pm : work around File::Find problem on VMS
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / t / INST_PREFIX.t
CommitLineData
5c161494 1#!/usr/bin/perl -w
2
3# Wherein we ensure the INST_* and INSTALL* variables are set correctly
4# when various PREFIX variables are set.
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;
45bc4d3a 19use Test::More tests => 26;
5c161494 20use MakeMaker::Test::Utils;
21use ExtUtils::MakeMaker;
22use File::Spec;
23use TieOut;
24use Config;
25
45bc4d3a 26my $Is_VMS = $^O eq 'VMS';
27
28chdir 't';
5c161494 29
30perl_lib;
31
32$| = 1;
33
34my $Makefile = makefile_name;
35my $Curdir = File::Spec->curdir;
36my $Updir = File::Spec->updir;
37
45bc4d3a 38ok( chdir 'Big-Dummy', "chdir'd to Big-Dummy" ) ||
5c161494 39 diag("chdir failed: $!");
40
45bc4d3a 41my $PREFIX = File::Spec->catdir('foo', 'bar');
5c161494 42my $stdout = tie *STDOUT, 'TieOut' or die;
43my $mm = WriteMakefile(
45bc4d3a 44 NAME => 'Big::Dummy',
45 VERSION_FROM => 'lib/Big/Dummy.pm',
5c161494 46 PREREQ_PM => {},
47 PERL_CORE => $ENV{PERL_CORE},
45bc4d3a 48 PREFIX => $PREFIX,
5c161494 49);
50like( $stdout->read, qr{
45bc4d3a 51 Writing\ $Makefile\ for\ Big::Liar\n
52 Big::Liar's\ vars\n
5c161494 53 INST_LIB\ =\ \S+\n
54 INST_ARCHLIB\ =\ \S+\n
45bc4d3a 55 Writing\ $Makefile\ for\ Big::Dummy\n
5c161494 56}x );
57undef $stdout;
58untie *STDOUT;
59
60isa_ok( $mm, 'ExtUtils::MakeMaker' );
61
45bc4d3a 62is( $mm->{NAME}, 'Big::Dummy', 'NAME' );
5c161494 63is( $mm->{VERSION}, 0.01, 'VERSION' );
64
45bc4d3a 65is( $mm->{PREFIX}, $PREFIX, 'PREFIX' );
5c161494 66
67is( !!$mm->{PERL_CORE}, !!$ENV{PERL_CORE}, 'PERL_CORE' );
68
69my($perl_src, $mm_perl_src);
70if( $ENV{PERL_CORE} ) {
45bc4d3a 71 $perl_src = File::Spec->catdir($Updir, $Updir);
5c161494 72 $perl_src = File::Spec->canonpath($perl_src);
73 $mm_perl_src = File::Spec->canonpath($mm->{PERL_SRC});
74}
75else {
76 $mm_perl_src = $mm->{PERL_SRC};
77}
78
79is( $mm_perl_src, $perl_src, 'PERL_SRC' );
80
81
82# Every INSTALL* variable must start with some PREFIX.
83my @Perl_Install = qw(archlib privlib bin script
84 man1dir man3dir);
85my @Site_Install = qw(sitearch sitelib sitebin
86 siteman1dir siteman3dir);
87my @Vend_Install = qw(vendorarch vendorlib vendorbin
88 vendorman1dir vendorman3dir);
89
90foreach my $var (@Perl_Install) {
45bc4d3a 91 my $prefix = $Is_VMS ? '[.foo.bar' : File::Spec->catdir(qw(foo bar));
92
93 # support for man page skipping
94 $prefix = 'none' if $var =~ /man/ && !$Config{"install$var"};
95 like( $mm->{uc "install$var"}, qr/^\Q$prefix\E/, "PREFIX + $var" );
5c161494 96}
97
98foreach my $var (@Site_Install) {
45bc4d3a 99 my $prefix = $Is_VMS ? '[.foo.bar' : File::Spec->catdir(qw(foo bar));
100
101 like( $mm->{uc "install$var"}, qr/^\Q$prefix\E/,
5c161494 102 "SITEPREFIX + $var" );
103}
104
105foreach my $var (@Vend_Install) {
45bc4d3a 106 my $prefix = $Is_VMS ? '[.foo.bar' : File::Spec->catdir(qw(foo bar));
107
108 like( $mm->{uc "install$var"}, qr/^\Q$prefix\E/,
5c161494 109 "VENDORPREFIX + $var" );
110}
45bc4d3a 111
112
113# Check that when installman*dir isn't set in Config no man pages
114# are generated.
115{
116 undef *ExtUtils::MM_Unix::Config;
117 %ExtUtils::MM_Unix::Config = %Config;
118 $ExtUtils::MM_Unix::Config{installman1dir} = '';
119 $ExtUtils::MM_Unix::Config{installman3dir} = '';
120
121 my $wibble = File::Spec->catdir(qw(wibble and such));
122 my $stdout = tie *STDOUT, 'TieOut' or die;
123 my $mm = WriteMakefile(
124 NAME => 'Big::Dummy',
125 VERSION_FROM => 'lib/Big/Dummy.pm',
126 PREREQ_PM => {},
127 PERL_CORE => $ENV{PERL_CORE},
128 PREFIX => $PREFIX,
129 INSTALLMAN1DIR=> $wibble,
130 );
131
132 is( $mm->{INSTALLMAN1DIR}, $wibble );
133 is( $mm->{INSTALLMAN3DIR}, 'none' );
134}