Move libnet Net::* to the top level, to mirror the CPAN distribution.
[perl.git] / ext / ExtUtils-MakeMaker / 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
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.