1The Simplified MakeMaker class hierarchy 2**************************************** 3 4What 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 18The object actually used is of the class MY which allows you to 19override bits of MakeMaker inside your Makefile.PL by declaring 20MY::foo() methods. 21 22 23The Real MakeMaker class hierarchy 24********************************** 25 26You wish it was that simple. 27 28Here'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 54NOTE: Yes, this is a mess. See 55http://archive.develooper.com/makemaker@perl.org/msg00134.html 56for some history. 57 58NOTE: When ExtUtils::MM is loaded it chooses a superclass for MM from 59amongst the ExtUtils::MM_* modules based on the current operating 60system. 61 62NOTE: ExtUtils::MM_{Current OS} represents one of the ExtUtils::MM_* 63modules except ExtUtils::MM_Any chosen based on your operating system. 64 65NOTE: The main object used by MakeMaker is a PACK### object, *not* 66ExtUtils::MakeMaker. It is, effectively, a subclass of MY, 67ExtUtils::Makemaker, ExtUtils::Liblist and ExtUtils::MM_{Current OS} 68 69NOTE: The methods in MY are simply copied into PACK### rather than 70MY being a superclass of PACK###. I don't remember the rationale. 71 72NOTE: ExtUtils::Liblist should be removed from the inheritence hiearchy 73and simply be called as functions. 74 75NOTE: Modules like File::Spec and Exporter have been omitted for clarity. 76 77 78The MM_* hierarchy 79****************** 80 81 MM_Win95 MM_NW5 82 \ / 83MM_BeOS MM_Cygwin MM_OS2 MM_VMS MM_Win32 MM_DOS MM_UWIN 84 \ | | | / / / 85 ------------------------------------------------ 86 | | 87 MM_Unix | 88 | | 89 MM_Any 90 91NOTE: Each direct MM_Unix subclass is also an MM_Any subclass. This 92is a temporary hack because MM_Unix overrides some MM_Any methods with 93Unix specific code. It allows the non-Unix modules to see the 94original MM_Any implementations. 95 96NOTE: Modules like File::Spec and Exporter have been omitted for clarity. 97