Nicholas Clark wrote on 2009-08-28:
> On Fri, Aug 28, 2009 at 03:44:34PM +0100, Steve Hay wrote:
>> Nicholas Clark wrote on 2009-08-28:
> 
>>> 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?
>> 
>> Yes, File::Spec::Win32::rel2abs() does dynamic loading of Cwd when
>> called with no $base:
>> 
>>     if ( !defined( $base ) || $base eq '' ) {
>>       require Cwd ;
>>       $base = Cwd::getdcwd( ($self->splitpath( $path ))[0] ) if
> defined
>> &Cwd::getdcwd ;
>>       $base = $self->_cwd() unless defined $base ;
>>     }
>>     elsif ( ! $self->file_name_is_absolute( $base ) ) {
>>       $base = $self->rel2abs( $base ) ;
>>     }
>>     else {
>>       $base = $self->canonpath( $base ) ;
>>     }
>> 
>> Hacking TestInit to do:
>> 
>> @new_inc = map { $_ = File::Spec::Functions::rel2abs($_,
>> 'C:/gitclients/perl/ext/DynaLoader'); /(.*)/; $1 }
>> 
>> it now runs okay with the 'A' flag.
>  But it should still be the same (actual) path, and nothing is
changing
> directory here. Hence why I'm really confused, as I would have thought
> that all the C runtime gubbins loading the DLL will be loading it
either
> as ../../lib/$whatever or
> C:/gitclients/perl/ext/DynaLoader/../../lib/$whatever or
> C:/gitclients/perl/lib/$whatever
> 
> Which will all be the same place.
> 
> So when run from the directory C:/gitclients/perl/ext/DynaLoader, what
do
> 
>     File::Spec::Functions::rel2abs($_,
> 'C:/gitclients/perl/ext/DynaLoader');
> 
> and
> 
>     File::Spec::Functions::rel2abs($_);
> 
> generate (for ../../lib and ../../t) ?

C:\gitclients\perl\ext\DynaLoader>..\..\perl -MFile::Spec::Functions -e
"print File::Spec::Functions::rel2abs('../../lib',
'C:/gitclients/perl/ext/DynaLoader')"
C:\gitclients\perl\lib

C:\gitclients\perl\ext\DynaLoader>..\..\perl -MFile::Spec::Functions -e
"print File::Spec::Functions::rel2abs('../../t',
'C:/gitclients/perl/ext/DynaLoader')"
C:\gitclients\perl\t


> 
> Does the world suddenly become a happy place if those two paths are
re-
> written as ..\..\lib and ..\..\t ?

No different:

C:\gitclients\perl\ext\DynaLoader>..\..\perl -MFile::Spec::Functions -e
"print File::Spec::Functions::rel2abs('..\..\lib',
'C:/gitclients/perl/ext/DynaLoader')"
C:\gitclients\perl\lib

C:\gitclients\perl\ext\DynaLoader>..\..\perl -MFile::Spec::Functions -e
"print File::Spec::Functions::rel2abs('..\..\t',
'C:/gitclients/perl/ext/DynaLoader')"
C:\gitclients\perl\t

Reply via email to