delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2011/07/07/14:46:12

X-Recipient: archive-cygwin AT delorie DOT com
X-SWARE-Spam-Status: No, hits=1.9 required=5.0 tests=AWL,BAYES_20,DKIM_SIGNED,DKIM_VALID,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,T_TO_NO_BRKTS_FREEMAIL
X-Spam-Check-By: sourceware.org
MIME-Version: 1.0
Date: Thu, 7 Jul 2011 14:37:08 -0400
Message-ID: <CAJfRpHqagKODKmWEuQ-NRJGz-XNCkLcFk_DWxxLh47nDK-iBkg@mail.gmail.com>
Subject: Perl's ExtUtils::MakeMaker fails and proposed fix
From: Marco Moreno <mmoreno AT pobox DOT com>
To: cygwin AT cygwin DOT com
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
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

Reini,

After doing a little debugging, I discovered why installing ExtUtils::MakeMaker
was failing for me.  ExtUtils::MM_Cygwin.pm contains:

=item maybe_command

If our path begins with F</cygdrive/> then we use C<ExtUtils::MM_Win32>
to determine if it may be a command.  Otherwise we use the tests
from C<ExtUtils::MM_Unix>.

=cut

sub maybe_command {
    my ($self, $file) = @_;

    if ($file =~ m{^/cygdrive/}i) {
        return ExtUtils::MM_Win32->maybe_command($file);
    }

    return $self->SUPER::maybe_command($file);
}


Obviously, if your cygdrive prefix is something else (e.g. '/'), then
this will fail.

What do you think of this instead:

=item maybe_command

Determine whether a file is native to Cygwin by checking whether it
resides inside the Cygwin installation (using Windows paths).  If so,
use C<ExtUtils::MM_Unix> to determine if it may be a command.
Otherwise use the tests from C<ExtUtils::MM_Win32>.

=cut

sub maybe_command {
    my ($self, $file) = @_;

    my $cygwin_winpath = Cygwin::posix_to_win_path('/', 1);
    my $file_winpath = Cygwin::posix_to_win_path($file, 1);

    return ($file_winpath =~ /^${cygwin_winpath}/)
        ? $self->SUPER::maybe_command($file)
        : ExtUtils::MM_Win32->maybe_command($file);
}


This passed all the tests and installed ok for me.  Does this look
ok to you and is it reasonable to assume that native Cygwin
commands will always be inside the Cygwin installation directory?
If this proposed change is worthy of implementing, what is the best
way to do it?  rt.cpan.org?

Marco Moreno

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

- Raw text -


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