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-> = 'First 'Middle' Last ' # $expected-> = 'First 'Middle' Last' # Failed test at t\20_authors_with_special_characters.t line 103. # Structures begin differing at: # $got-> = 'Olivier Mengu? ' # $expected-> = 'Olivier Mengu\xE9'
Let’s first look at the first failure, line 33 in
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(
_read are from
_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
# 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.