in reply to Re: Strawberry Perl 5.12.3, CPAN, make file problems (dmake.exe), DFSEP and backslash "\"
in thread Strawberry Perl 5.12.3, CPAN, make file problems (dmake.exe), DFSEP and backslash "\"

Judging by the fact that his DIRFILESEP was originally set to a single backslash, ExtUtils::MM_Win32's is_make_type() method doesn't seem to identify his make variant as either nmake or dmake, so that's where I would start digging...

(AFAICT, the implementation of the sub init_DIRFILESEP hasn't changed recently — at least all versions of EU::MM_W32 which shipped with various Perls going back to 5.8.8 do look the same in this respect.)

  • Comment on Re^2: Strawberry Perl 5.12.3, CPAN, make file problems (dmake.exe), DFSEP and backslash "\"

Replies are listed 'Best First'.
Re^3: Strawberry Perl 5.12.3, CPAN, make file problems (dmake.exe), DFSEP and backslash "\"
by jffry (Hermit) on Dec 03, 2011 at 00:44 UTC

    Here is that sub.

    I can probably read perlre to figure out what ?: does, but a search of perlop for !! gives me nothing useful. Is that really two Boolean NOTs side-by-side? Can't be. So what is that operator? In any case, I'm guessing the real answer lies in the make method, and I'll pretend this sub makes sense even though I don't understand it now.

    sub is_make_type { my($self, $type) = @_; return !! ($self->make =~ /\b$type(?:\.exe)?$/); }

    I found the make method defined over in ExtUtils::MM_Any, which is required by MM_Win32.pm on line 27.

    sub make { my $self = shift; my $make = lc $self->{MAKE}; # Truncate anything like foomake6 to just foomake. $make =~ s/^(\w+make).*/$1/; # Turn gnumake into gmake. $make =~ s/^gnu/g/; return $make; }

    So self->{MAKE} is some kind of OOesque hash key lookup, right? Sorry, but I don't know Perl OO very well.

    But where does that key get set? Since that is an access to private data in this class (I think), doesn't that particular MAKE hash key value have to get set within this package file? But I can't find it in MM_Any.pm. Well, I find plenty of "MAKE" strings being used to demarcate here-files, but that isn't helping my search.

    Any ideas?

      Any ideas?

      Stop digging before you've ruled out the most simple things

      Step 1, step out of cpan, cpan>look Module and run perl Makefile.PL yourself, and confirm

      perl -V: <P>Confirm all paths, eg <C>perl -V:make -V:perlpath -e " die $^X

      Look inside Makefile for path to perl.exe

        I ran your command, and it looks okay to to me.

        C:\strawberry\cpan\build\OLE-Storage_Lite-0.19-pT5XuU > perl -V:make -V:perlpath -e " die $^X" make='dmake'; perlpath='C:\strawberry\perl\bin\perl.exe'; C:\strawberry\perl\bin\perl.exe at -e line 1.

        After the perl Makefile.PL command, I look in the Makefile and see:

        C:\strawberry\cpan\build\OLE-Storage_Lite-0.19-pT5XuU > find "perl.exe" Makefile ---------- MAKEFILE PERL = C:\strawberry\perl\bin\perl.exe FULLPERL = C:\strawberry\perl\bin\perl.exe perl.exe so_locations \ FULLPERL = C:\strawberry\perl\bin\perl.exe

        Any more suggestions?

      But where does that key get set?

      There's init_MAKE(), which sets it (if it's not alredy set at this point) from the environment, or else from $Config{make} (which should be what you get via perl -V:make )

      sub init_MAKE { my $self = shift; $self->{MAKE} ||= $ENV{MAKE} || $Config{make}; }

      A couple of well-placed prints can answer many questions, e.g. allow you to check whether the value is what you'd expect, or something funky

      sub init_MAKE { my $self = shift; print STDERR ">>> before: '$self->{MAKE}'\n"; $self->{MAKE} ||= $ENV{MAKE} || $Config{make}; print STDERR ">>> after: '$self->{MAKE}'\n"; }

      (and if you don't get any print output at all, you'll at least know you're executing something else entirely...)

      P.S. For a discussion of !!, see Perl Idioms Explained - !!expr and Secret Perl Operators: the boolean list squash operator, x!! (and probably others) — if generally interested, it's not really relevant to the problem at hand.