So, I now had a chance to go back, and look at another one of the modules that failed to build during a cpan-outdated | cpanm -v
session on my Windows 8 laptop.
Here is why Module::Install failed to build:
# Failed test 'has author'
# at t\18_all_from.t line 33.
…
# Failed test 'has one author'
# at t\20_authors_with_special_characters.t line 51.
# String: # AUTHOR => [q[First 'Middle' Last ]]
# Failed test at t\20_authors_with_special_characters.t line 58.
# Structures begin differing at:
# $got->[0] = 'First 'Middle' Last
'
# $expected->[0] = 'First 'Middle' Last'
# Failed test at t\20_authors_with_special_characters.t line 103.
# Structures begin differing at:
# $got->[0] = 'Olivier Mengu?
'
# $expected->[0] = 'Olivier Mengu\xE9'
Let’s first look at the first failure, line 33 in t\18_all_from.t
.
my $file = makefile();
-f $file);
ok(my $content = _read($file);
$content, 'file is not empty');
ok($content =~ /#\s*ABSTRACT => q\[A test module\]/, 'has abstract');
ok($content =~ author_makefile_re("Foo Bar"), 'has author');
ok($content =~ /#\s*VERSION => q\[3\.21\]/, 'has version'); ok(
Both author_makefile_re
and _read
are from t/lib/Test.pm
.
_read
is just a straightforward slurp.
I have EUMM 7.02, so author_makefile_re("Foo Bar")
just returns qr/#\s*AUTHOR => \[q\[Foo Bar\]\]/;
.
Guess what the generated Makefile
contains:
# AUTHOR => [q[Foo Bar
]]
If you missed the carriage return, Vim will happily show you:
I believe this is related to commit cfabc28, and it may also explain the subsequent test failures. From the Changes file:
6.99_08 Mon Aug 18 14:17:04 BST 2014
Bug fixes:
…
- Generated META.files will now always have linefeed EOLs, even on
Windows
Mind you, that does not mean I think this is a bug in EUMM.
It is just that Module::Install
includes a support module in t/lib/Test.pm
which opens files, and prints them without taking any precautions (as opposed to, say Parse::CPAN::Meta). That’s where the CR comes from when the rest of the tools use LF only.
Fixing that makes all tests in t\18_all_from.t
pass. I will look at the rest later, and probably put together a patch, unless someone beats me to it ;-)
PS: See my pull request.