On Sun, Nov 25, 2001 at 10:31:15PM -0700, chromatic wrote:
> On Sunday 25 November 2001 22:31, Michael G Schwern wrote:
> 
> > > Porta-paranoia.  cflags() and canonpath() are delegated to it.  This may
> > > be why File::Spec was commingled.
> 
> > Now wait a second, this means you're not actually testing what
> > ExtUtils::MM_Cygwin->catfile() and cflags() and perl_script() do.
> 
> There exist neither ExtUtils::MM_Cygwin::catfile() or 
> ExtUtils::MM_Cygwin::perl_script().  They're both inherited from somewhere, 
> and are called within ExtUtils::MM_Cygwin::manifypods().

They should be inherited from ExtUtils::MM_Unix.

Inheritance within the MM_* modules is a little confused.  Actually
it's a lot confused.  ExtUtils::MakeMaker and all the MM_* modules are
all tangled up in each other.  This is something I want to pull apart
after there are some tests.

It basically goes like this:

ExtUtils::MakeMaker sets up the MM class:

    @MM::ISA = qw[ExtUtils::MM_Unix ExtUtils::Liblist::Kid 
                  ExtUtils::MakeMaker];

It then looks at $^O and requires the appropriate ExtUtils::MM_*
class.  In this case, ExtUtils::MM_Cygwin.  MM_Cygwin then makes it's
own addition to @MM::ISA...

    unshift @MM::ISA, 'ExtUtils::MM_Cygwin';

Leaving you with a fine example of multiple inheritance abuse:

    @MM::ISA = qw[ExtUtils::MM_Cygwin ExtUtils::MM_Unix 
                  ExtUtils::Liblist::Kid ExtUtils::MakeMaker];

So before ExtUtils::MM_Cygwin is used, you have to set the initial
@MM::ISA that ExtUtils::MakeMaker normally does, then let
ExtUtils::MM_Cygwin add itself.  Sorry, forgot to mention that bit of
fun.  In the end, test it like this:

    @MM::ISA = qw[ExtUtils::MM_Unix ExtUtils::Liblist::Kid 
                  ExtUtils::MakeMaker];
    use_ok('ExtUtils::MM_Cygwin');

I'll start tearing apart the way MM inheritance works shortly.


> My assumption (which may very well be invalid) is that anything that breaks 
> ExtUtils::MM_Unix should be caught by the ExtUtils::MM_Unix test.  

Right, the MM_Unix test.  I could have sworn we had one...  And the
patch to make MM_Unix use File::Spec doesn't seem to have gone in.


> The ExtUtils::MM_Cygwin test is predicated upon the assumption that
> the bits in ExtUtils::MM_Unix Just Work.  As such, I considered them
> fair game to be replaced with decaf crystals.

Is there a need to do so?  ExtUtils::MM_Unix::catfile() should work on
Cygwin else MM_Cygwin would override it.  Ditto the rest.  Do they
have weird side effects?


-- 

Michael G. Schwern   <[EMAIL PROTECTED]>    http://www.pobox.com/~schwern/
Perl Quality Assurance      <[EMAIL PROTECTED]>         Kwalitee Is Job One
We have cornered the market on senselessness and have profited.

Reply via email to