Subject: | Build failure: mis-handled pathname variables in Makefile.PL |
Date: | Sun, 16 Aug 2015 23:13:20 -0400 |
To: | bug-XML-Entities [...] rt.cpan.org |
From: | "Daniel Macks" <dmacks [...] netspace.org> |
Building XML-Entities-1.0001 on OS X 10.10 using apple's perl-5.18.2 and with a handful of CPAN modules installed creates a broken installation (and fails self-tests as a result). The actual problem is seen here during the build:
% make
cp bin/download-entities.pl blib/script/download-entities.pl
"/usr/bin/perl" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/download-entities.pl
cp lib/XML/Entities/Data.pod ${INST_LIBDIR}/Entities/Data.pod
cp lib/XML/Entities.pm ${INST_LIBDIR}/Entities.pm
cp lib/XML/Entities/Data.pm ${INST_LIBDIR}/Entities/Data.pm
where it says ${INST_LIBDIR}" instead of some blib/ or other actual pathname. The result is that blib/ does not contain the actual modules, so 'make test' fails because it cannot locate the module files and 'make install' doesn't actually install anything.
The bug is that recent MakeMaker (or some other module in its toolchain) is stricter about how to pass Makefile variables in your Makefile.PL. Using curly-braces here makes them handled literally:
PM => {
'lib/XML/Entities.pm' => '${INST_LIBDIR}/Entities.pm',
'lib/XML/Entities/Data.pm' => '${INST_LIBDIR}/Entities/Data.pm',
'lib/XML/Entities/Data.pod' => '${INST_LIBDIR}/Entities/Data.pod',
},
[...]
MAN3PODS => {
'lib/XML/Entities.pm' => '${INST_MAN3DIR}/XML::Entities.3pm',
'lib/XML/Entities/Data.pod' => '${INST_MAN3DIR}/XML::Entities::Data.3pm',
'bin/download-entities.pl' => '${INST_MAN3DIR}/download-entities.pl.3pm',
},
Instead, use parens to get interpolation:
PM => {
'lib/XML/Entities.pm' => '$(INST_LIBDIR)/Entities.pm',
'lib/XML/Entities/Data.pm' => '$(INST_LIBDIR)/Entities/Data.pm',
'lib/XML/Entities/Data.pod' => '$(INST_LIBDIR)/Entities/Data.pod',
},
[...]
MAN3PODS => {
'lib/XML/Entities.pm' => '$(INST_MAN3DIR)/XML::Entities.3pm',
'lib/XML/Entities/Data.pod' => '$(INST_MAN3DIR)/XML::Entities::Data.3pm',
'bin/download-entities.pl' => '$(INST_MAN3DIR)/download-entities.pl.3pm',
},
That gives a 'make' output of:
cp lib/XML/Entities/Data.pod blib/lib/XML/Entities/Data.pod
cp lib/XML/Entities.pm blib/lib/XML/Entities.pm
cp lib/XML/Entities/Data.pm blib/lib/XML/Entities/Data.pm
and then the self-test and installation work correctly.
dan
--
Daniel Macks
dmacks@netspace.org