Skip Menu |

This queue is for tickets about the Module-Install CPAN distribution.

Report information
The Basics
Id: 21139
Status: resolved
Priority: 0/
Queue: Module-Install

People
Owner: Nobody in particular
Requestors: mschwern [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: Critical
Broken in: 0.63
Fixed in: (no value)



Subject: requires() fails if the requirement has dependencies.
The attached Makefile.PL and output illustrates the problem. When using MI, if your dependencies have unresolved dependencies the build for the dependency is considered a failure. This does not occur when simply installing the dependency under the CPAN shell. In my environment I do not have File::Find::Rule nor Number::Compare installed to trigger the bug. I've tried it also on Test::Dependencies (lacking it and File::Find::Rule) and JSAN::Client (lacking it and HTML::Location). I noticed this bug because I am unable to install anything which depends on Test::Dependencies without first manually installing TD. This includes Class::Accessor::Named.
Subject: mi_require_failure.txt
0 windhund ~/tmp/Foo-Bar$ perl Makefile.PL include /Users/schwern/tmp/Foo-Bar/inc/Module/Install.pm include inc/Module/Install/Metadata.pm include inc/Module/Install/Base.pm include inc/Module/Install/AutoInstall.pm include inc/Module/Install/Include.pm include inc/Module/AutoInstall.pm *** Module::AutoInstall version 1.02 *** Checking for Perl dependencies... [Core Features] - File::Find::Rule ...missing. ==> Auto-install the 1 mandatory module(s) from CPAN? [y] CPAN: File::HomeDir loaded ok *** Dependencies will be installed the next time you type 'make'. (You may need to do that as the 'root' user.) *** Module::AutoInstall configuration finished. include inc/Module/Install/Makefile.pm include inc/Module/Install/WriteAll.pm Writing META.yml include inc/Module/Install/Win32.pm include inc/Module/Install/Can.pm include inc/Module/Install/Fetch.pm Warning: prerequisite File::Find::Rule 0 not found. Writing Makefile for Foo::Bar 0 windhund ~/tmp/Foo-Bar$ sudo make /usr/bin/perl "-Iinc" Makefile.PL --config= --installdeps=File::Find::Rule,0 include /Users/schwern/tmp/Foo-Bar/inc/Module/Install.pm include inc/Module/Install/Metadata.pm include inc/Module/Install/Base.pm include inc/Module/Install/AutoInstall.pm include inc/Module/Install/Include.pm include inc/Module/AutoInstall.pm *** Installing dependencies... CPAN: File::HomeDir loaded ok *** Installing File::Find::Rule... CPAN: Storable loaded ok Going to read /var/local/cpan_shell/Metadata Database was generated on Tue, 22 Aug 2006 02:32:34 GMT Running install for module File::Find::Rule Running make for R/RC/RCLAMP/File-Find-Rule-0.30.tar.gz CPAN: Digest::SHA loaded ok CPAN: Module::Signature loaded ok WARNING: This key is not certified with a trusted signature! Primary key fingerprint: 2E66 557A B97C 19C7 91AF 8E20 328D A867 450F 89EC Signature for /var/local/cpan_shell/sources/authors/id/R/RC/RCLAMP/CHECKSUMS ok CPAN: Compress::Zlib loaded ok Checksum for /var/local/cpan_shell/sources/authors/id/R/RC/RCLAMP/File-Find-Rule-0.30.tar.gz ok Scanning cache /var/local/cpan_shell/build for sizes File-Find-Rule-0.30/ File-Find-Rule-0.30/t/ File-Find-Rule-0.30/t/lib/ File-Find-Rule-0.30/t/lib/File/ File-Find-Rule-0.30/t/lib/File/Find/ File-Find-Rule-0.30/t/lib/File/Find/Rule/ File-Find-Rule-0.30/t/lib/File/Find/Rule/Test/ File-Find-Rule-0.30/t/lib/File/Find/Rule/Test/ATeam.pm File-Find-Rule-0.30/t/foobar File-Find-Rule-0.30/t/File-Find-Rule.t File-Find-Rule-0.30/t/findrule.t File-Find-Rule-0.30/findrule File-Find-Rule-0.30/META.yml File-Find-Rule-0.30/lib/ File-Find-Rule-0.30/lib/File/ File-Find-Rule-0.30/lib/File/Find/ File-Find-Rule-0.30/lib/File/Find/Rule.pm File-Find-Rule-0.30/lib/File/Find/Rule/ File-Find-Rule-0.30/lib/File/Find/Rule/Extending.pod File-Find-Rule-0.30/lib/File/Find/Rule/Procedural.pod File-Find-Rule-0.30/Changes File-Find-Rule-0.30/MANIFEST File-Find-Rule-0.30/README File-Find-Rule-0.30/Makefile.PL File-Find-Rule-0.30/Build.PL Removing previously used /var/local/cpan_shell/build/File-Find-Rule-0.30 Package came without SIGNATURE CPAN: Module::Build loaded ok CPAN.pm: Going to build R/RC/RCLAMP/File-Find-Rule-0.30.tar.gz Checking whether your kit is complete... Looks good Checking prerequisites... - ERROR: Number::Compare is not installed ERRORS/WARNINGS FOUND IN PREREQUISITES. You may wish to install the versions of the modules indicated above before proceeding with this installation Creating new 'Build' script for 'File-Find-Rule' version '0.30' CPAN: YAML loaded ok ---- Unsatisfied dependencies detected during [R/RC/RCLAMP/File-Find-Rule-0.30.tar.gz] ----- Number::Compare Running Build test Delayed until after prerequisites Running Build install Delayed until after prerequisites *** File::Find::Rule installation failed. *** Module::AutoInstall installation finished. 0 windhund ~/tmp/Foo-Bar$
Subject: Makefile.PL
use inc::Module::Install; name 'Foo-Bar'; version 123; requires 'File::Find::Rule'; license 'perl'; auto_install(); &WriteAll;
PS CPAN shell 1.87 MakeMaker 6.30. perl 5.8.6
The problem only occurs if the Makefile.PL is run from the command line. Otherwise AI allows the CPAN shell to do the installation and everything runs fine. PS CPANPLUS is not installed.
Fixed it. The issue is that the CPAN.pm docs lie. CPAN::Shell->install($module) is not the same as CPAN::Shell->expand(Module => $mod)->install. CPAN::Shell->install is different from CPAN::Distribution->install. See rt.cpan.org 21144. The fix is to have AutoInstall use CPAN::Shell->install. Jesse has given me commit rights on the modinstall openfoundry repository so I'm going to commit this. --- lib/Module/AutoInstall.pm (revision 17334) +++ lib/Module/AutoInstall.pm (local) @@ -465,9 +465,9 @@ delete $INC{$inc}; } - $obj->force('install') if $args{force}; - - my $rv = $obj->install || eval { + my $rv = $args{force} ? CPAN::Shell->force( install => $pkg ) + : CPAN::Shell->install($pkg); + $rv ||= eval { $CPAN::META->instance( 'CPAN::Distribution', $obj->cpan_file, ) ->{install} if $CPAN::META;
Closed as this patch has already been applied. Thanks.