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