xref: /openbsd-src/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/INST.t (revision f2da64fbbbf1b03f09f390ab01267c93dfd77c4c)
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