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

Re: [PATCH] Fix ExtUtils::Installed failure with -Duserelocatableinc

Thread Previous | Thread Next
From:
Craig A. Berry
Date:
July 17, 2009 08:31
Subject:
Re: [PATCH] Fix ExtUtils::Installed failure with -Duserelocatableinc
Message ID:
c9ab31fc0907170831n269867dev4df735f56f14f1b4@mail.gmail.com
On Fri, Jul 10, 2009 at 12:14 PM, David E. Wheeler<david@kineticode.com> wrote:
> This patch fixes an issue with ExtUtils::Installed when Perl is compiled with
> userelocatableinc. It looks a though the issue is that `%Config` contains
> local paths when built with -Duserelocatableinc, some, at least, with a
> leading "./". The solution is to use `File::Spec->canonpath()` to clean up the
> path before comparing two paths that are otherwise the same. A better solution
> might be to use some sort of other utility function that checks that paths are
> the same even if they're not spelled the same. I didn't notice such a function
> in File::Spec, alas.
>
> Also, I'm not sure what effects this change might have on VMS; it deserves
> another testing there.
>
> And finally, there appears to be another failure, not fixed in this patch,
> that I haven't been able to track down:
>
>    lib/ExtUtils/t/INST_PREFIX....................................#   Failed test '$(SITEPREFIX) + sitearch'
>    #   at ../lib/ExtUtils/t/INST_PREFIX.t line 142.
>    #                   './../lib/site_perl/5.10.0/darwin-thread-multi-2level'
>    #     doesn't match '(?-xism:^\$\(SITEPREFIX\))'
>    FAILED at test 19
>
> This is also likely due to relative paths in `%Config`, but I'm pretty
> clueless about what that test is trying to do, as
> './../lib/site_perl/5.10.0/darwin-thread-multi-2level' comes from an
> ExtUtils::MakeMaker object, and while it seems relevant, I can't imagine why
> the test would be expecting something to look like a shell variable there.
> Could it be an ExtUtils::MakeMaker issue? Or is INST_PREFIX just wrong to
> think that such a variable will be there when Perl is built with
> -Duserelocatableinc? I have no idea, but someone needs to look more closely at
> the ramifications of -Duserelocatableinc, I think.
> ---
>  lib/ExtUtils/Installed.pm  |    5 ++---
>  lib/ExtUtils/t/Installed.t |    2 +-
>  2 files changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/lib/ExtUtils/Installed.pm b/lib/ExtUtils/Installed.pm
> index 8e65139..a6de311 100644
> --- a/lib/ExtUtils/Installed.pm
> +++ b/lib/ExtUtils/Installed.pm
> @@ -28,9 +28,8 @@ sub _is_prefix {
>         $path   = VMS::Filespec::unixify($path);
>     }
>
> -    # Sloppy Unix path normalization.
> -    $prefix =~ s{/+}{/}g;
> -    $path   =~ s{/+}{/}g;
> +    # Unix path normalization.
> +    $prefix = File::Spec->canonpath($prefix);
>
>     return 1 if substr($path, 0, length($prefix)) eq $prefix;
>
> diff --git a/lib/ExtUtils/t/Installed.t b/lib/ExtUtils/t/Installed.t
> index f820ef4..dd492c2 100644
> --- a/lib/ExtUtils/t/Installed.t
> +++ b/lib/ExtUtils/t/Installed.t
> @@ -45,7 +45,7 @@ ok( $ei->_is_type(0, 'all'), '_is_type() should be true for type of "all"' );
>
>  foreach my $path (qw( man1dir man3dir )) {
>     SKIP: {
> -        my $dir = $Config{$path.'exp'};
> +        my $dir = File::Spec->canonpath($Config{$path.'exp'});
>         skip("no man directory $path on this system", 2 ) unless $dir;
>
>         my $file = $dir . '/foo';
> --

I don't see any follow-up to this on the list, nor does the code
appear to be in blead.  Is it rattling around upstream on its way here
or did we drop the ball?  Or find some other solution?

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