delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2005/07/17/06:57:36

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
Message-ID: <42DA398D.60802@familiehaase.de>
Date: Sun, 17 Jul 2005 12:57:17 +0200
From: "Gerrit P. Haase" <gerrit AT familiehaase DOT de>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.8) Gecko/20050511
MIME-Version: 1.0
To: Andrew Ho <andrew AT tellme DOT com>
CC: cygwin AT cygwin DOT com, makemaker AT perl DOT org, perl5-porters AT perl DOT org
Subject: [perl-5.8.7] Perl regression tests fail when lib directory is present
References: <Pine DOT GSO DOT 4 DOT 62 DOT 0507160052140 DOT 18081 AT shell02 DOT corp DOT tellme DOT com> <42D8D5F3 DOT 9060307 AT familiehaase DOT de> <Pine DOT GSO DOT 4 DOT 62 DOT 0507161219350 DOT 18081 AT shell02 DOT corp DOT tellme DOT com>
In-Reply-To: <Pine.GSO.4.62.0507161219350.18081@shell02.corp.tellme.com>
X-IsSubscribed: yes

Hello,

we are on Cygwin: 1.5.18(0.132/4/2) 2005-07-02 20:30, perl is the latest
stable release: This is perl, v5.8.7 built for cygwin-thread-multi-64int

We have a problem building modules, i.e. make test fails if a .pm file
in the source package is located below the root in a subdirectory called
'lib'.


Andrew Ho wrote:
 >>> It appears that on the latest version of Cygwin's Perl, Perl modules
 >>> with regression tests (for example, ones you can download from CPAN)
 >>> fail "make test" on every other test. I did some experimentation and
 >>> this appears to happen only if the modules are in a subdirectory
 >>> (typically "lib") rather than in the install root.
 >>>
 >>> How to reproduce:
 >>>
 >>>     * Upgrade to latest versions of all Cygwin packages (probably
 >>>       Perl is the only relevant one)
 >>>
 >>>     * Download any CPAN module (or create a Perl module) whose files
 >>>       are in a "lib" subdirectory. Lingua::EN::Inflect is an arbitrary
 >>>       example of one that is unlikely to be already installed.
 >>>
 >>>     * Run through the usual Perl install steps:
 >>>       perl Makefile.PL && make && make test
 >>>
 >>>     * Observe that "make test" fails on every other test (odd numbered
 >>>       runs, apparently).
 >>>
 >>> I have reduced this breakage to the smallest possible test case:
 >>> http://www.zeuscat.com/andrew/src/TestModule.tar.gz

> Did you try to run "make test" on the TestModule.tar.gz that I linked 
> to? I'm curious to see if that simple case fails (it contains both a 
> "working" and "broken" version, the latter has the module in a "lib" 
> subdirectory). And is it possible you already had Lingua::EN::Inflect 
> installed on your test system?

Hm, maybe I tried it at first from a cpan shell, and then from the 
command line. I saw a similar problem with XML::GDOME, however tests are
failing even when running from a cpan shell, I reported this as a bug to
the Gdome list, because there are also tests failing after the module
was installed and could be found in @INC.  Unfortunately I didn't 
realized that the "Can't locate ... in @INC" could be a perl bug
since other modules are working ok or I used the cpan shell to install
them.



Now I see that you're right:

$ wget http://www.zeuscat.com/andrew/src/TestModule.tar.gz
--12:11:14--  http://www.zeuscat.com/andrew/src/TestModule.tar.gz
            => `TestModule.tar.gz'
Resolving www.zeuscat.com... 205.217.153.72
Connecting to www.zeuscat.com[205.217.153.72]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 754 [application/x-tar]

100%[====================================>] 754           --.--K/s 


12:11:15 (7.19 MB/s) - `TestModule.tar.gz' saved [754/754]

$ tar zxvf TestModule.tar.gz
TestModule_broken/
TestModule_broken/lib/
TestModule_broken/lib/TestModule.pm
TestModule_broken/Makefile.PL
TestModule_broken/t/
TestModule_broken/t/test0.t
TestModule_broken/t/test1.t
TestModule_broken/t/test2.t
TestModule_broken/t/test3.t
TestModule_broken/t/test4.t
TestModule_broken/t/test5.t
TestModule_working/
TestModule_working/Makefile.PL
TestModule_working/t/
TestModule_working/t/test0.t
TestModule_working/t/test1.t
TestModule_working/t/test2.t
TestModule_working/t/test3.t
TestModule_working/t/test4.t
TestModule_working/t/test5.t
TestModule_working/TestModule.pm

$ cd TestModule_broken/

$ perl Makefile.PL
Writing Makefile for TestModule

$ make
cp lib/TestModule.pm blib/lib/TestModule.pm

$ make test
/usr/bin/perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 
'blib/lib', 'blib/arch')" t/*.t
t/test0....ok 

t/test1....Can't locate TestModule.pm in @INC (@INC contains: 
/usr/lib/perl5/5.8/cygwin /usr/lib/perl5/5.8 
/usr/lib/perl5/site_perl/5.8/cygwin /usr/lib/perl5/site_perl/5.8 
/usr/lib/perl5/site_perl/5.8 /usr/lib/perl5/vendor_perl/5.8/cygwin 
/usr/lib/perl5/vendor_perl/5.8 /usr/lib/perl5/vendor_perl/5.8 .) at 
t/test1.t line 2.
BEGIN failed--compilation aborted at t/test1.t line 2.
t/test1....dubious 

         Test returned status 2 (wstat 512, 0x200)
t/test2....ok 

t/test3....Can't locate TestModule.pm in @INC (@INC contains: 
/usr/lib/perl5/5.8/cygwin /usr/lib/perl5/5.8 
/usr/lib/perl5/site_perl/5.8/cygwin /usr/lib/perl5/site_perl/5.8 
/usr/lib/perl5/site_perl/5.8 /usr/lib/perl5/vendor_perl/5.8/cygwin 
/usr/lib/perl5/vendor_perl/5.8 /usr/lib/perl5/vendor_perl/5.8 .) at 
t/test3.t line 2.
BEGIN failed--compilation aborted at t/test3.t line 2.
t/test3....dubious 

         Test returned status 2 (wstat 512, 0x200)
t/test4....ok 

t/test5....Can't locate TestModule.pm in @INC (@INC contains: 
/usr/lib/perl5/5.8/cygwin /usr/lib/perl5/5.8 
/usr/lib/perl5/site_perl/5.8/cygwin /usr/lib/perl5/site_perl/5.8 
/usr/lib/perl5/site_perl/5.8 /usr/lib/perl5/vendor_perl/5.8/cygwin 
/usr/lib/perl5/vendor_perl/5.8 /usr/lib/perl5/vendor_perl/5.8 .) at 
t/test5.t line 2.
BEGIN failed--compilation aborted at t/test5.t line 2.
t/test5....dubious 

         Test returned status 2 (wstat 512, 0x200)
Failed Test Stat Wstat Total Fail  Failed  List of Failed
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
t/test1.t      2   512    ??   ??       %  ??
t/test3.t      2   512    ??   ??       %  ??
t/test5.t      2   512    ??   ??       %  ??
Failed 3/6 test scripts, 50.00% okay. 0/3 subtests failed, 100.00% okay.
make: *** [test_dynamic] Error 14

$ cd ../TestModule_working/

$ perl Makefile.PL
Writing Makefile for TestModule

$ make
cp TestModule.pm blib/lib/TestModule.pm

$ make test
/usr/bin/perl.exe "-MExtUtils::Command::MM" "-e" "test_harness(0, 
'blib/lib', 'blib/arch')" t/*.t
t/test0....ok 

t/test1....ok 

t/test2....ok 

t/test3....ok 

t/test4....ok 

t/test5....ok 

All tests successful.
Files=6, Tests=6,  2 wallclock secs ( 1.14 cusr +  0.90 csys =  2.04 CPU)



The problem seems to be that blib and/or blib/lib isn't added to @INC:

t/test1....Can't locate TestModule.pm in @INC (@INC contains: 
/usr/lib/perl5/5.8/cygwin /usr/lib/perl5/5.8 
/usr/lib/perl5/site_perl/5.8/cygwin /usr/lib/perl5/site_perl/5.8 
/usr/lib/perl5/site_perl/5.8 /usr/lib/perl5/vendor_perl/5.8/cygwin 
/usr/lib/perl5/vendor_perl/5.8 /usr/lib/perl5/vendor_perl/5.8 .) at 
t/test1.t line 2.

The .pm is right there:
$ ls blib/lib
TestModule.pm  auto/


This is dubious since it works ok when the .pm in the original
source package is in TestModule_working/TestModule.pm instead of
TestModule_working/lib/TestModule.pm.

How does the location of the source affect the @INC settings?

in test_harness this is called:
     unshift @INC, map { File::Spec->rel2abs($_) } @_;

I added a print here:
/home/gerrit/perltemp/TestModule_broken/blib/lib
/home/gerrit/perltemp/TestModule_broken/blib/arch
/usr/lib/perl5/5.8/cygwin
/usr/lib/perl5/5.8
/usr/lib/perl5/site_perl/5.8/cygwin
/usr/lib/perl5/site_perl/5.8
/usr/lib/perl5/site_perl/5.8
/usr/lib/perl5/vendor_perl/5.8/cygwin
/usr/lib/perl5/vendor_perl/5.8
/usr/lib/perl5/vendor_perl/5.8
.

So the path seems to be correct in the first step.

Then Test::Harness::runtests is called, the @INC setting is different
now (i.e. just the default):

Can't locate TestModule.pm in @INC (@INC contains:
/usr/lib/perl5/5.8/cygwin
/usr/lib/perl5/5.8
/usr/lib/perl5/site_perl/5.8/cygwin
/usr/lib/perl5/site_perl/5.8
/usr/lib/perl5/site_perl/5.8
/usr/lib/perl5/vendor_perl/5.8/cygwin
/usr/lib/perl5/vendor_perl/5.8
/usr/lib/perl5/vendor_perl/5.8
.) at t/test1.t line 2.


Here I have no idea.  After a short view into Harness.pm I decided
to ask someone who is more familiar with MakeMaker and Test::Harness
than me.


Gerrit
-- 
=^..^=

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019