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