Subject: | Incompatible with older ExtUtils::Install |
Date: | Thu, 4 Jun 2009 00:21:27 -0400 |
To: | bug-ExtUtils-MakeMaker [...] rt.cpan.org |
From: | Daniel Macks <dmacks [...] netspace.org> |
ExtUtils::MakeMaker 6.52 creates a Makefile recipe that uses a
recently-implemented feature of ExtUtils::Install and that fails if
ExtUtils::Install is an older version. EU::I 1.33 (what ships with
perl5.8.8), 'perl Makefile.PL && make && make install' will fail when
EU::I::install() is called with a parameter style that isn't known.
For example, using fink to supply perl5.8.8 and all dependencies for
Gnome2::Canvas:
[...]
make install NOECHO=
[...]
/sw/bin/perl5.8.8 -MExtUtils::Install -e 'install([ from_to => {@ARGV}, verbose => '\''0'\'', uninstall_shadows => '\''0'\'', dir_mode => '\''755'\'' ]);' -- \
read /sw/lib/perl5/site_perl/5.8.8/darwin-thread-multi-2level/auto/Gnome2/Canvas/.packlist \
write /sw/build.build/root-gnome2-canvas-pm588-1.002-6/sw/lib/perl5/5.8.8/darwin-thread-multi-2level/auto/Gnome2/Canvas/.packlist \
blib/lib /sw/build.build/root-gnome2-canvas-pm588-1.002-6/sw/lib/perl5/5.8.8 \
blib/arch /sw/build.build/root-gnome2-canvas-pm588-1.002-6/sw/lib/perl5/5.8.8/darwin-thread-multi-2level \
blib/bin /sw/build.build/root-gnome2-canvas-pm588-1.002-6/sw/bin \
blib/script /sw/build.build/root-gnome2-canvas-pm588-1.002-6/sw/bin \
blib/man1 /sw/build.build/root-gnome2-canvas-pm588-1.002-6/sw/share/man/man1 \
blib/man3 /sw/build.build/root-gnome2-canvas-pm588-1.002-6/sw/share/man/man3
Can't coerce array into hash at /sw/lib/perl5-core/5.8.8/ExtUtils/Install.pm line 94.
If I upgrade my EU::I to 1.52, 'make install' works. Even with old
EU::I, previous versions of EU::MM worked. The problem is in
ExtUtils::MM_Any.pm line 1738:
install([ from_to => {@ARGV}, verbose => '$(VERBINST)', uninstall_shadows => '$(UNINST)', dir_mode => '$(PERM_DIR)' ]);
but until EU::I 1.47, install() only took a list of parameter values
in specific order, not an array-ref of named parameters.
I don't know the best solution here. The POD for EU::I::install() says
the simple parameter list is deprecated, so who knows how long that
syntax will be supported. Other solution is for EU::MM to specify a
dependency on EU::I >= 1.47. It makes functional sense that EU::I,
which is called by EU::MM, would be a dependency of EU::MM. But EU::I
currently specified a dependency on EU::MM (no idea why), so that's
circular.
dan
--
Daniel Macks
dmacks@netspace.org
http://www.netspace.org/~dmacks