| 1 | The Simplified MakeMaker class hierarchy
|
|---|
| 2 | ****************************************
|
|---|
| 3 |
|
|---|
| 4 | What most people need to know.
|
|---|
| 5 |
|
|---|
| 6 | (Subclasses on top.)
|
|---|
| 7 |
|
|---|
| 8 | MY
|
|---|
| 9 | |
|
|---|
| 10 | ExtUtils::MakeMaker
|
|---|
| 11 | |
|
|---|
| 12 | ExtUtils::MM_{Current OS}
|
|---|
| 13 | |
|
|---|
| 14 | ExtUtils::MM_Unix
|
|---|
| 15 | |
|
|---|
| 16 | ExtUtils::MM_Any
|
|---|
| 17 |
|
|---|
| 18 | The object actually used is of the class MY which allows you to
|
|---|
| 19 | override bits of MakeMaker inside your Makefile.PL by declaring
|
|---|
| 20 | MY::foo() methods.
|
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 | The Real MakeMaker class hierarchy
|
|---|
| 24 | **********************************
|
|---|
| 25 |
|
|---|
| 26 | You wish it was that simple.
|
|---|
| 27 |
|
|---|
| 28 | Here's how it really works.
|
|---|
| 29 |
|
|---|
| 30 | PACK### (created each call to ExtUtils::MakeMaker->new)
|
|---|
| 31 | . |
|
|---|
| 32 | (mixin) |
|
|---|
| 33 | . |
|
|---|
| 34 | MY (created by ExtUtils::MY) |
|
|---|
| 35 | | |
|
|---|
| 36 | ExtUtils::MY MM (created by ExtUtils::MM)
|
|---|
| 37 | | |
|
|---|
| 38 | ExtUtils::MM
|
|---|
| 39 | | | |-----------------------
|
|---|
| 40 | | | |
|
|---|
| 41 | ExtUtils::Liblist ExtUtils::MakeMaker |
|
|---|
| 42 | | |
|
|---|
| 43 | ExtUtils::Liblist::Kid |
|
|---|
| 44 | |
|
|---|
| 45 | |
|
|---|
| 46 | |
|
|---|
| 47 | ExtUtils::MM_{Current OS} (if necessary)
|
|---|
| 48 | |
|
|---|
| 49 | ExtUtils::MM_Unix
|
|---|
| 50 | |
|
|---|
| 51 | ExtUtils::MM_Any
|
|---|
| 52 |
|
|---|
| 53 |
|
|---|
| 54 | NOTE: Yes, this is a mess. See
|
|---|
| 55 | http://archive.develooper.com/makemaker@perl.org/msg00134.html
|
|---|
| 56 | for some history.
|
|---|
| 57 |
|
|---|
| 58 | NOTE: When ExtUtils::MM is loaded it chooses a superclass for MM from
|
|---|
| 59 | amongst the ExtUtils::MM_* modules based on the current operating
|
|---|
| 60 | system.
|
|---|
| 61 |
|
|---|
| 62 | NOTE: ExtUtils::MM_{Current OS} represents one of the ExtUtils::MM_*
|
|---|
| 63 | modules except ExtUtils::MM_Any chosen based on your operating system.
|
|---|
| 64 |
|
|---|
| 65 | NOTE: The main object used by MakeMaker is a PACK### object, *not*
|
|---|
| 66 | ExtUtils::MakeMaker. It is, effectively, a subclass of MY,
|
|---|
| 67 | ExtUtils::Makemaker, ExtUtils::Liblist and ExtUtils::MM_{Current OS}
|
|---|
| 68 |
|
|---|
| 69 | NOTE: The methods in MY are simply copied into PACK### rather than
|
|---|
| 70 | MY being a superclass of PACK###. I don't remember the rationale.
|
|---|
| 71 |
|
|---|
| 72 | NOTE: ExtUtils::Liblist should be removed from the inheritence hiearchy
|
|---|
| 73 | and simply be called as functions.
|
|---|
| 74 |
|
|---|
| 75 | NOTE: Modules like File::Spec and Exporter have been omitted for clarity.
|
|---|
| 76 |
|
|---|
| 77 |
|
|---|
| 78 | The MM_* hierarchy
|
|---|
| 79 | ******************
|
|---|
| 80 |
|
|---|
| 81 | MM_Win95 MM_NW5
|
|---|
| 82 | \ /
|
|---|
| 83 | MM_BeOS MM_Cygwin MM_OS2 MM_VMS MM_Win32 MM_DOS MM_UWIN
|
|---|
| 84 | \ | | | / / /
|
|---|
| 85 | ------------------------------------------------
|
|---|
| 86 | | |
|
|---|
| 87 | MM_Unix |
|
|---|
| 88 | | |
|
|---|
| 89 | MM_Any
|
|---|
| 90 |
|
|---|
| 91 | NOTE: Each direct MM_Unix subclass is also an MM_Any subclass. This
|
|---|
| 92 | is a temporary hack because MM_Unix overrides some MM_Any methods with
|
|---|
| 93 | Unix specific code. It allows the non-Unix modules to see the
|
|---|
| 94 | original MM_Any implementations.
|
|---|
| 95 |
|
|---|
| 96 | NOTE: Modules like File::Spec and Exporter have been omitted for clarity.
|
|---|