The Simplified MakeMaker class hierarchy
****************************************

What most people need to know.

(Subclasses on top.)

               MY
                |
        ExtUtils::MakeMaker
                |
        ExtUtils::MM_{Current OS}
                |
        ExtUtils::MM_Unix
                |
        ExtUtils::MM_Any

The object actually used is of the class MY which allows you to
override bits of MakeMaker inside your Makefile.PL by declaring
MY::foo() methods.


The Real MakeMaker class hierarchy
**********************************

You wish it was that simple.

Here's how it really works.

               PACK### (created each call to ExtUtils::MakeMaker->new)
                    .                       |
                 (mixin)                    |
                    .                       |
        MY (created by ExtUtils::MY)        |
        |                                   |
    ExtUtils::MY         MM (created by ExtUtils::MM)
              |          |              |
              ExtUtils::MM              ExtUtils::MM_{Current OS}
               |         |                              .
               |         |                              
    ExtUtils::Liblist    ExtUtils::MakeMaker            .
          |                                             
    ExtUtils::Liblist::Kid                              .

                                                (variable subclass)

                                                        .

    ExtUtils::MM_{NonUnix}. . . . . . . . . . . . . . . .
            |
    ExtUtils::MM_Unix . . . . . . . . . . . . . . . . . .
            |
    ExtUtils::MM_Any


NOTE: Yes, this is a mess.  See
http://archive.develooper.com/makemaker@perl.org/msg00134.html
for some history.

NOTE: When ExtUtils::MM is loaded it chooses a superclass for MM from
amongst the ExtUtils::MM_* modules based on the current operating
system.

NOTE: ExtUtils::MM_{Current OS} represents one of the ExtUtils::MM_*
modules except ExtUtils::MM_Any.

NOTE: ExtUtils::MM_{NonUnix} represents all of the ExtUtils::MM_*
modules except ExtUtils::MM_Any and ExtUtils::MM_Unix.

NOTE: The main object used by MakeMaker is a PACK### object, *not*
ExtUtils::MakeMaker.  It is, effectively, a subclass of MY,
ExtUtils::Makemaker, ExtUtils::Liblist and an ExtUtils::MM_* class
appropriate for your operating system.

NOTE: The methods in MY are simply copied into PACK### rather than
MY being a superclass of PACK###.  I don't remember the rationale.

NOTE: ExtUtils::Liblist should be removed from the inheritence hiearchy
and simply be called as functions.

NOTE: Modules like File::Spec and Exporter have been omitted for clarity.


The MM_* hierarchy
******************

                               MM_Win95   MM_NW5
                                    \      /
MM_BeOS  MM_Cygwin  MM_OS2  MM_VMS  MM_Win32  MM_DOS  MM_MacOS  MM_UWIN
      \        |      |         |        /      /       /       /
       ---------------------------------------------------------
                           |       |
                        MM_Unix    |
                              |    |
                              MM_Any

NOTE: Each direct MM_Unix subclass is also an MM_Any subclass.  This
is a temporary hack because MM_Unix overrides some MM_Any methods with
Unix specific code.  It allows the non-Unix modules to see the
original MM_Any implementations.

NOTE: Modules like File::Spec and Exporter have been omitted for clarity.
