develooper Front page | perl.perl5.porters | Postings from August 2009

Re: Smoke [5.11.0] blead-1964-g2adbc9b FAIL(F) MSWin32 Win2000 SP4 (x86/1 cpu)

Thread Previous | Thread Next
From:
Nicholas Clark
Date:
August 28, 2009 07:18
Subject:
Re: Smoke [5.11.0] blead-1964-g2adbc9b FAIL(F) MSWin32 Win2000 SP4 (x86/1 cpu)
Message ID:
20090828141816.GO60303@plum.flirble.org
On Fri, Aug 28, 2009 at 03:08:26PM +0100, Steve Hay wrote:
> Nicholas Clark wrote on 2009-08-28:

> > The logic is here
> > http://perl5.git.perl.org/perl.git/blob/HEAD:/t/TEST#l26 and here
> > http://perl5.git.perl.org/perl.git/blob/HEAD:/t/TEST#l202
> > 
> > I wonder if that's it
> 
> Ah, so *that*'s where the test actually gets run!
> 
> I stuck in a print statement to see what the $run command-line actually
> is. In the relative path case it is:
> 
> ../../perl -I../../t -MTestInit=U2T,A,NC "-T" t/DynaLoader.t |
> 
> whereas in the absolute path case it is:
> 
> ./perl -I. -MTestInit "-T"
> C:/gitclients/perl/ext/DynaLoader/t/DynaLoader.t |
> 
> so it looks like the (broken) relative path case has done a cd into
> ext/DynaLoader, and the (working) absolute path case has not. Is that
> expected?
> 
> Running the first of those command-lines from the ext/DynaLoader, it
> seems that it is actually the "A" flag that causes the breakage, not the
> "NC" flag:
> 
> C:\gitclients\perl\ext\DynaLoader>..\..\perl -I../../t
> -MTestInit=U2T,A,NC "-T" t/DynaLoader.t
> Not enough arguments for DynaLoader::dl_load_file at t/DynaLoader.t line
> 90, near "() "
> BEGIN not safe after errors--compilation aborted at t/DynaLoader.t line
> 94.
> 
> C:\gitclients\perl\ext\DynaLoader>..\..\perl -I../../t -MTestInit=U2T,NC
> "-T" t/DynaLoader.t
> 1..40
> ok 1 - use DynaLoader;
> ok 2 - DynaLoader->can('bootstrap')
> [...all tests pass ok...]

That's bonkers. Given that the import routine is

sub import {
    my $self = shift;
    my $abs;
    foreach (@_) {
	if ($_ eq 'U2T') {
	    @new_inc = ('../../lib', '../../t');
	} elsif ($_ eq 'NC') {
	    delete $ENV{PERL_CORE}
	} elsif ($_ eq 'A') {
	    $abs = 1;
	} else {
	    die "Unknown option '$_'";
	}
    }

    if ($abs) {
	if(!@new_inc) {
	    @new_inc = '../lib';
	}
	@INC = @new_inc;
	require File::Spec::Functions;
	# Forcibly untaint this.
	@new_inc = map { $_ = File::Spec::Functions::rel2abs($_); /(.*)/; $1 }
	    @new_inc;
	$^X = File::Spec::Functions::rel2abs($^X);
    }

    if (@new_inc) {
	new_inc(@new_inc);
	set_opt(@new_inc);
    }
}


it's going to process things in this order:

	    @new_inc = ('../../lib', '../../t');
	    $abs = 1;
	    delete $ENV{PERL_CORE}

	@INC = @new_inc;
	require File::Spec::Functions;
	# Forcibly untaint this.
	@new_inc = map { $_ = File::Spec::Functions::rel2abs($_); /(.*)/; $1 }
	    @new_inc;
	$^X = File::Spec::Functions::rel2abs($^X);


So, somehow, require File::Spec::Functions; or running
File::Spec::Functions::rel2abs() is triggering this. So do they do
dynamic loading somewhere? And why is doing it with a relative path and
then the same relative path made absolute going to upset it?

(we don't need to run the DynaLoader test with absolute paths. Currently only
Devel-PPPort and Cwd really needed it. But it would be nice to work out *why*
this is failing)

Nicholas Clark

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About