Add some basic POD to lib/ExtUtils/instmodsh so that
[p5sagit/p5-mst-13.2.git] / lib / ExtUtils / NOTES
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              ExtUtils::MM_{Current OS}
39                |         |                              .
40                |         |                              
41     ExtUtils::Liblist    ExtUtils::MakeMaker            .
42           |                                             
43     ExtUtils::Liblist::Kid                              .
44
45                                                 (variable subclass)
46
47                                                         .
48
49     ExtUtils::MM_{NonUnix}. . . . . . . . . . . . . . . .
50             |
51     ExtUtils::MM_Unix . . . . . . . . . . . . . . . . . .
52             |
53     ExtUtils::MM_Any
54
55
56 NOTE: Yes, this is a mess.  See
57 http://archive.develooper.com/makemaker@perl.org/msg00134.html
58 for some history.
59
60 NOTE: When ExtUtils::MM is loaded it chooses a superclass for MM from
61 amongst the ExtUtils::MM_* modules based on the current operating
62 system.
63
64 NOTE: ExtUtils::MM_{Current OS} represents one of the ExtUtils::MM_*
65 modules except ExtUtils::MM_Any.
66
67 NOTE: ExtUtils::MM_{NonUnix} represents all of the ExtUtils::MM_*
68 modules except ExtUtils::MM_Any and ExtUtils::MM_Unix.
69
70 NOTE: The main object used by MakeMaker is a PACK### object, *not*
71 ExtUtils::MakeMaker.  It is, effectively, a subclass of MY,
72 ExtUtils::Makemaker, ExtUtils::Liblist and an ExtUtils::MM_* class
73 appropriate for your operating system.
74
75 NOTE: The methods in MY are simply copied into PACK### rather than
76 MY being a superclass of PACK###.  I don't remember the rationale.
77
78 NOTE: ExtUtils::Liblist should be removed from the inheritence hiearchy
79 and simply be called as functions.
80
81 NOTE: Modules like File::Spec and Exporter have been omitted for clarity.
82
83
84 The MM_* hierarchy
85 ******************
86
87                                MM_Win95   MM_NW5
88                                     \      /
89 MM_BeOS  MM_Cygwin  MM_OS2  MM_VMS  MM_Win32  MM_DOS  MM_MacOS  MM_UWIN
90       \        |      |         |        /      /       /       /
91        ---------------------------------------------------------
92                            |       |
93                         MM_Unix    |
94                               |    |
95                               MM_Any
96
97 NOTE: Each direct MM_Unix subclass is also an MM_Any subclass.  This
98 is a temporary hack because MM_Unix overrides some MM_Any methods with
99 Unix specific code.  It allows the non-Unix modules to see the
100 original MM_Any implementations.
101
102 NOTE: Modules like File::Spec and Exporter have been omitted for clarity.