Skip Menu |

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

Report information
The Basics
Id: 65382
Status: rejected
Priority: 0/
Queue: Module-Build

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

Bug Information
Severity: Normal
Broken in: 0.3624
Fixed in: (no value)



I upgraded ExtUtils::CBuilder and Module::Build. Now my build test generates this error when I try to 'require' a basic handler package that uses Apache2::Request. However, I can run the test script directly or with `prove -I blib -r t` and it succeeds. # Error: Can't load '/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/APR/Request/Apache2/Apache2.so' for module APR::Request::Apache2: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/APR/Request/Apache2/Apache2.so: undefined symbol: modperl_xs_sv2request_rec at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230. # at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Apache2/Request.pm line 3 # Compilation failed in require at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Apache2/Request.pm line 3. # BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Apache2/Request.pm line 3. I can rebuild libapreq2-2.12 and 2.13 with no trouble on its tests. I tried updating CentOS perl, apr, apr-devel, apr-util, apr-util-devel packages, but it did not help. Other handlers that do not use Apache2::Request are fine. I saw this error in some searches. Rebuilding libapreq2 with apache stopped did not help. Setting PERL_DL_NONLAZY=0 in env did not help. (http://my.opera.com/cstrep/blog/2010/05/14/undefined-symbol-modperl-xs-sv2request-rec-at-usr-lib-perl-5-10-dynaloader-pm) Oh, PERL_DL_NONLAZY is a compiler flag. I'm not sure I understand what it does. I don't know how to make Module::Build `Build test` behave the same way, but something seems to have changed in the recent version that caused this change in behavior. Thanks. --mark--
Subject: Re: [rt.cpan.org #65382]
Date: Wed, 2 Feb 2011 16:48:03 -0500
To: bug-Module-Build [...] rt.cpan.org
From: David Golden <dagolden [...] cpan.org>
On Wed, Feb 2, 2011 at 3:34 PM, Mark Hedges via RT <bug-Module-Build@rt.cpan.org> wrote: Show quoted text
>  Oh, PERL_DL_NONLAZY is a compiler flag.  I'm not sure I understand what > it does.  I don't know how to make Module::Build `Build test` behave the > same way, but something seems to have changed in the recent version that > caused this change in behavior.
This change has brought Module::Build in line with the behavior of ExtUtils::MakeMaker. As you can see, it exposes bugs that would not otherwise be detected. --David
Ah good I was on the right track. Can you point me in the right direction so I can try to make it work? --m--
Subject: Re: [rt.cpan.org #65382]
Date: Wed, 2 Feb 2011 16:54:52 -0500
To: bug-Module-Build [...] rt.cpan.org
From: David Golden <dagolden [...] cpan.org>
On Wed, Feb 2, 2011 at 4:51 PM, Mark Hedges via RT <bug-Module-Build@rt.cpan.org> wrote: Show quoted text
>       Queue: Module-Build >  Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=65382 > > > Ah good I was on the right track.  Can you point me in the right > direction so I can try to make it work?  --m--
Unfortunately, XS/C is not my forte. I would encourage you to ask on PerlMonks.org or on IRC on either #p5p or #toolchain. I'm sure you'll find experts in either place who would be happy to help. Regards, David
It looks like this is the problem, or at least, this fixes it for me. Why does do_tests() need to explicitly set this? --m-- --- /usr/lib/perl5/site_perl/5.8.8/Module/Build/Base.pm.orig 2011-02-02 15:04:07.000000000 -0800 +++ /usr/lib/perl5/site_perl/5.8.8/Module/Build/Base.pm 2011-02-02 15:07:21.000000000 -0800 @@ -2667,8 +2667,6 @@ my $tests = $self->find_test_files; - local $ENV{PERL_DL_NONLAZY} = 1; - if(@$tests) { my $args = $self->tap_harness_args; if($self->use_tap_harness or ($args and %$args)) {
Subject: Re: [rt.cpan.org #65382]
Date: Thu, 03 Feb 2011 16:01:55 +1000
To: bug-Module-Build [...] rt.cpan.org
From: Michael G Schwern <schwern [...] pobox.com>
If that fixes it then you're likely papering over an error. perlrun explains PERL_DL_NONLAZY and why you'd set it to true for tests. PERL_DL_NONLAZY Set to one to have perl resolve all undefined symbols when it loads a dynamic library. The default behaviour is to resolve symbols when they are used. Setting this variable is useful during testing of extensions as it ensures that you get an error on misspelled function names even if the test suite doesn't call it. So the test is trying to tell you that modperl_xs_sv2request_rec is not defined in your shared library. Also, `prove -I blib` is not correct. You want `prove -b` which will pull in blib/lib and blib/arch. On 2011.2.3 9:08 AM, Mark Hedges via RT wrote: Show quoted text
> It looks like this is the problem, or at least, this fixes it for me. > Why does do_tests() need to explicitly set this? --m-- > > --- /usr/lib/perl5/site_perl/5.8.8/Module/Build/Base.pm.orig 2011-02-02 > 15:04:07.000000000 -0800 > +++ /usr/lib/perl5/site_perl/5.8.8/Module/Build/Base.pm 2011-02-02 > 15:07:21.000000000 -0800 > @@ -2667,8 +2667,6 @@ > > my $tests = $self->find_test_files; > > - local $ENV{PERL_DL_NONLAZY} = 1; > - > if(@$tests) { > my $args = $self->tap_harness_args; > if($self->use_tap_harness or ($args and %$args)) {
-- 10. Not allowed to purchase anyone's soul on government time. -- The 213 Things Skippy Is No Longer Allowed To Do In The U.S. Army http://skippyslist.com/list/