Commit | Line | Data |
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 | |
8 | BEGIN { |
b78fd716 |
9 | unshift @INC, 't/lib'; |
5c161494 |
10 | } |
11 | |
12 | use strict; |
a7d1454b |
13 | use Test::More tests => 52; |
5c161494 |
14 | use MakeMaker::Test::Utils; |
a7d1454b |
15 | use MakeMaker::Test::Setup::BFD; |
5c161494 |
16 | use ExtUtils::MakeMaker; |
17 | use File::Spec; |
18 | use TieOut; |
7292dc67 |
19 | use ExtUtils::MakeMaker::Config; |
5c161494 |
20 | |
45bc4d3a |
21 | my $Is_VMS = $^O eq 'VMS'; |
22 | |
23 | chdir 't'; |
5c161494 |
24 | |
25 | perl_lib; |
26 | |
27 | $| = 1; |
28 | |
29 | my $Makefile = makefile_name; |
30 | my $Curdir = File::Spec->curdir; |
31 | my $Updir = File::Spec->updir; |
32 | |
a7d1454b |
33 | ok( setup_recurs(), 'setup' ); |
34 | END { |
35 | ok( chdir File::Spec->updir ); |
36 | ok( teardown_recurs(), 'teardown' ); |
37 | } |
38 | |
45bc4d3a |
39 | ok( chdir 'Big-Dummy', "chdir'd to Big-Dummy" ) || |
5c161494 |
40 | diag("chdir failed: $!"); |
41 | |
42 | my $stdout = tie *STDOUT, 'TieOut' or die; |
479d2113 |
43 | |
5c161494 |
44 | my $mm = WriteMakefile( |
45bc4d3a |
45 | NAME => 'Big::Dummy', |
46 | VERSION_FROM => 'lib/Big/Dummy.pm', |
5c161494 |
47 | PREREQ_PM => {}, |
48 | PERL_CORE => $ENV{PERL_CORE}, |
5c161494 |
49 | ); |
479d2113 |
50 | |
5c161494 |
51 | like( $stdout->read, qr{ |
45bc4d3a |
52 | Writing\ $Makefile\ for\ Big::Liar\n |
53 | Big::Liar's\ vars\n |
5c161494 |
54 | INST_LIB\ =\ \S+\n |
55 | INST_ARCHLIB\ =\ \S+\n |
45bc4d3a |
56 | Writing\ $Makefile\ for\ Big::Dummy\n |
5c161494 |
57 | }x ); |
5c161494 |
58 | |
a7d1454b |
59 | is( $mm->{PREFIX}, '$(SITEPREFIX)', 'PREFIX set based on INSTALLDIRS' ); |
60 | |
5c161494 |
61 | isa_ok( $mm, 'ExtUtils::MakeMaker' ); |
62 | |
45bc4d3a |
63 | is( $mm->{NAME}, 'Big::Dummy', 'NAME' ); |
5c161494 |
64 | is( $mm->{VERSION}, 0.01, 'VERSION' ); |
65 | |
479d2113 |
66 | foreach my $prefix (qw(PREFIX PERLPREFIX SITEPREFIX VENDORPREFIX)) { |
67 | unlike( $mm->{$prefix}, qr/\$\(PREFIX\)/ ); |
479d2113 |
68 | } |
69 | |
70 | |
71 | my $PREFIX = File::Spec->catdir('foo', 'bar'); |
72 | $mm = WriteMakefile( |
73 | NAME => 'Big::Dummy', |
74 | VERSION_FROM => 'lib/Big/Dummy.pm', |
75 | PREREQ_PM => {}, |
76 | PERL_CORE => $ENV{PERL_CORE}, |
77 | PREFIX => $PREFIX, |
78 | ); |
79 | like( $stdout->read, qr{ |
80 | Writing\ $Makefile\ for\ Big::Liar\n |
81 | Big::Liar's\ vars\n |
82 | INST_LIB\ =\ \S+\n |
83 | INST_ARCHLIB\ =\ \S+\n |
84 | Writing\ $Makefile\ for\ Big::Dummy\n |
85 | }x ); |
86 | undef $stdout; |
87 | untie *STDOUT; |
88 | |
5e719f03 |
89 | is( $mm->{PREFIX}, $PREFIX, 'PREFIX' ); |
479d2113 |
90 | |
91 | foreach my $prefix (qw(PERLPREFIX SITEPREFIX VENDORPREFIX)) { |
5e719f03 |
92 | is( $mm->{$prefix}, '$(PREFIX)', "\$(PREFIX) overrides $prefix" ); |
479d2113 |
93 | } |
5c161494 |
94 | |
95 | is( !!$mm->{PERL_CORE}, !!$ENV{PERL_CORE}, 'PERL_CORE' ); |
96 | |
97 | my($perl_src, $mm_perl_src); |
98 | if( $ENV{PERL_CORE} ) { |
b78fd716 |
99 | $perl_src = File::Spec->catdir($Updir, $Updir, $Updir, $Updir); |
5c161494 |
100 | $perl_src = File::Spec->canonpath($perl_src); |
101 | $mm_perl_src = File::Spec->canonpath($mm->{PERL_SRC}); |
102 | } |
103 | else { |
104 | $mm_perl_src = $mm->{PERL_SRC}; |
105 | } |
106 | |
107 | is( $mm_perl_src, $perl_src, 'PERL_SRC' ); |
108 | |
109 | |
110 | # Every INSTALL* variable must start with some PREFIX. |
479d2113 |
111 | my %Install_Vars = ( |
112 | PERL => [qw(archlib privlib bin man1dir man3dir script)], |
113 | SITE => [qw(sitearch sitelib sitebin siteman1dir siteman3dir)], |
114 | VENDOR => [qw(vendorarch vendorlib vendorbin vendorman1dir vendorman3dir)] |
115 | ); |
5c161494 |
116 | |
479d2113 |
117 | while( my($type, $vars) = each %Install_Vars) { |
a7d1454b |
118 | SKIP: { |
479d2113 |
119 | skip "VMS must expand macros in INSTALL* vars", scalar @$vars |
a7d1454b |
120 | if $Is_VMS; |
121 | skip '$Config{usevendorprefix} not set', scalar @$vars |
122 | if $type eq 'VENDOR' and !$Config{usevendorprefix}; |
123 | |
124 | foreach my $var (@$vars) { |
125 | my $installvar = "install$var"; |
126 | my $prefix = '$('.$type.'PREFIX)'; |
127 | |
128 | SKIP: { |
129 | skip uc($installvar).' set to another INSTALL variable', 1 |
130 | if $mm->{uc $installvar} =~ /^\$\(INSTALL.*\)$/; |
131 | |
132 | # support for man page skipping |
133 | $prefix = 'none' if $type eq 'PERL' && |
134 | $var =~ /man/ && |
135 | !$Config{$installvar}; |
136 | like( $mm->{uc $installvar}, qr/^\Q$prefix\E/, |
137 | "$prefix + $var" ); |
138 | } |
139 | } |
479d2113 |
140 | } |
5c161494 |
141 | } |
45bc4d3a |
142 | |
45bc4d3a |
143 | # Check that when installman*dir isn't set in Config no man pages |
144 | # are generated. |
145 | { |
a7d1454b |
146 | _set_config(installman1dir => ''); |
147 | _set_config(installman3dir => ''); |
45bc4d3a |
148 | |
149 | my $wibble = File::Spec->catdir(qw(wibble and such)); |
150 | my $stdout = tie *STDOUT, 'TieOut' or die; |
151 | my $mm = WriteMakefile( |
152 | NAME => 'Big::Dummy', |
153 | VERSION_FROM => 'lib/Big/Dummy.pm', |
154 | PREREQ_PM => {}, |
155 | PERL_CORE => $ENV{PERL_CORE}, |
156 | PREFIX => $PREFIX, |
157 | INSTALLMAN1DIR=> $wibble, |
158 | ); |
159 | |
160 | is( $mm->{INSTALLMAN1DIR}, $wibble ); |
161 | is( $mm->{INSTALLMAN3DIR}, 'none' ); |
162 | } |
5e719f03 |
163 | |
164 | # Check that when installvendorman*dir is set in Config it is honored |
165 | # [rt.cpan.org 2949] |
166 | { |
a7d1454b |
167 | _set_config(installvendorman1dir => File::Spec->catdir('foo','bar') ); |
168 | _set_config(installvendorman3dir => '' ); |
169 | _set_config(usevendorprefix => 1 ); |
170 | _set_config(vendorprefixexp => 'something' ); |
5e719f03 |
171 | |
172 | my $stdout = tie *STDOUT, 'TieOut' or die; |
173 | my $mm = WriteMakefile( |
174 | NAME => 'Big::Dummy', |
175 | VERSION_FROM => 'lib/Big/Dummy.pm', |
176 | PREREQ_PM => {}, |
177 | PERL_CORE => $ENV{PERL_CORE}, |
178 | |
179 | # In case the local installation doesn't have man pages. |
180 | INSTALLMAN1DIR=> 'foo/bar/baz', |
181 | INSTALLMAN3DIR=> 'foo/bar/baz', |
182 | ); |
183 | |
1487aac6 |
184 | is( $mm->{INSTALLVENDORMAN1DIR}, File::Spec->catdir('foo','bar'), |
5e719f03 |
185 | 'installvendorman1dir (in %Config) not modified' ); |
186 | isnt( $mm->{INSTALLVENDORMAN3DIR}, '', |
187 | 'installvendorman3dir (not in %Config) set' ); |
188 | } |
a7d1454b |
189 | |
190 | # Check that when installsiteman*dir isn't set in Config it falls back |
191 | # to installman*dir |
192 | { |
a7d1454b |
193 | _set_config(installman1dir => File::Spec->catdir('foo', 'bar') ); |
194 | _set_config(installman3dir => File::Spec->catdir('foo', 'baz') ); |
195 | _set_config(installsiteman1dir => '' ); |
196 | _set_config(installsiteman3dir => '' ); |
197 | _set_config(installvendorman1dir => '' ); |
198 | _set_config(installvendorman3dir => '' ); |
199 | _set_config(usevendorprefix => 'define' ); |
200 | _set_config(vendorprefixexp => 'something' ); |
201 | |
202 | my $wibble = File::Spec->catdir(qw(wibble and such)); |
203 | my $stdout = tie *STDOUT, 'TieOut' or die; |
204 | my $mm = WriteMakefile( |
205 | NAME => 'Big::Dummy', |
206 | VERSION_FROM => 'lib/Big/Dummy.pm', |
207 | PERL_CORE => $ENV{PERL_CORE}, |
208 | ); |
1487aac6 |
209 | |
210 | is( $mm->{INSTALLMAN1DIR}, File::Spec->catdir('foo', 'bar') ); |
211 | is( $mm->{INSTALLMAN3DIR}, File::Spec->catdir('foo', 'baz') ); |
1238c24d |
212 | SKIP: { |
5dca256e |
213 | skip "VMS must expand macros in INSTALL* vars", 4 if $Is_VMS; |
214 | |
215 | is( $mm->{INSTALLSITEMAN1DIR}, '$(INSTALLMAN1DIR)' ); |
216 | is( $mm->{INSTALLSITEMAN3DIR}, '$(INSTALLMAN3DIR)' ); |
217 | is( $mm->{INSTALLVENDORMAN1DIR}, '$(INSTALLMAN1DIR)' ); |
218 | is( $mm->{INSTALLVENDORMAN3DIR}, '$(INSTALLMAN3DIR)' ); |
1238c24d |
219 | } |
a7d1454b |
220 | } |
221 | |
222 | |
223 | # Check that when usevendoprefix and installvendorman*dir aren't set in |
224 | # Config it leaves them unset. |
225 | { |
a7d1454b |
226 | _set_config(installman1dir => File::Spec->catdir('foo', 'bar') ); |
227 | _set_config(installman3dir => File::Spec->catdir('foo', 'baz') ); |
228 | _set_config(installsiteman1dir => '' ); |
229 | _set_config(installsiteman3dir => '' ); |
230 | _set_config(installvendorman1dir => '' ); |
231 | _set_config(installvendorman3dir => '' ); |
232 | _set_config(usevendorprefix => '' ); |
233 | _set_config(vendorprefixexp => '' ); |
234 | |
235 | my $wibble = File::Spec->catdir(qw(wibble and such)); |
236 | my $stdout = tie *STDOUT, 'TieOut' or die; |
237 | my $mm = WriteMakefile( |
238 | NAME => 'Big::Dummy', |
239 | VERSION_FROM => 'lib/Big/Dummy.pm', |
240 | PERL_CORE => $ENV{PERL_CORE}, |
241 | ); |
242 | |
1487aac6 |
243 | is( $mm->{INSTALLMAN1DIR}, File::Spec->catdir('foo', 'bar') ); |
244 | is( $mm->{INSTALLMAN3DIR}, File::Spec->catdir('foo', 'baz') ); |
1238c24d |
245 | SKIP: { |
5dca256e |
246 | skip "VMS must expand macros in INSTALL* vars", 2 if $Is_VMS; |
247 | is( $mm->{INSTALLSITEMAN1DIR}, '$(INSTALLMAN1DIR)' ); |
248 | is( $mm->{INSTALLSITEMAN3DIR}, '$(INSTALLMAN3DIR)' ); |
1238c24d |
249 | } |
a7d1454b |
250 | is( $mm->{INSTALLVENDORMAN1DIR}, '' ); |
251 | is( $mm->{INSTALLVENDORMAN3DIR}, '' ); |
252 | } |
253 | |
254 | |
255 | sub _set_config { |
256 | my($k,$v) = @_; |
257 | (my $k_no_install = $k) =~ s/^install//i; |
7292dc67 |
258 | $Config{$k} = $v; |
a7d1454b |
259 | |
260 | # Because VMS's config has traditionally been underpopulated, it will |
261 | # fall back to the install-less versions in desperation. |
7292dc67 |
262 | $Config{$k_no_install} = $v if $Is_VMS; |
a7d1454b |
263 | return; |
264 | } |