diff --git a/lib/App/cpanminus/script.pm b/lib/App/cpanminus/script.pm index 0487b245e..4a7d152ac 100644 --- a/lib/App/cpanminus/script.pm +++ b/lib/App/cpanminus/script.pm @@ -1406,13 +1406,18 @@ sub save_meta { File::Copy::copy("MYMETA.json", "$dir/MYMETA.json"); } + my $provides = $self->_merge_hashref( + map Module::Metadata->package_versions_from_directory($_), + qw( blib/lib blib/arch ) # FCGI.pm :( + ); + my $local = { name => $module_name, module => $module, version => $dist->{version}, dist => $dist->{distvname}, pathname => $dist->{pathname}, - provides => Module::Metadata->package_versions_from_directory("blib/lib"), + provides => $provides, }; require JSON::PP; @@ -1420,6 +1425,17 @@ sub save_meta { print $fh JSON::PP::encode_json($local); } +sub _merge_hashref { + my($self, @hashrefs) = @_; + + my %hash; + for my $h (@hashrefs) { + %hash = (%hash, %$h); + } + + return \%hash; +} + sub install_base { my($self, $mm_opt) = @_; $mm_opt =~ /INSTALL_BASE=(\S+)/ and return $1; diff --git a/xt/blib_install.t b/xt/blib_install.t new file mode 100644 index 000000000..af6899577 --- /dev/null +++ b/xt/blib_install.t @@ -0,0 +1,19 @@ +use strict; +use Test::More; +use JSON; +use Config; +use xt::Run; + +my $local_lib = "$ENV{PERL_CPANM_HOME}/perl5"; +run "-L", $local_lib, "FLORA/FCGI-0.74.tar.gz"; + +my $file = "$local_lib/lib/perl5/$Config{archname}/.meta/FCGI-0.74/install.json"; + +open my $in, "<", $file or die $!; + +my $data = JSON::decode_json(join "", <$in>); +is $data->{name}, "FCGI"; +ok exists $data->{provides}{FCGI}; + +done_testing; +