ModPerl::MM is a ``subclass'' of ExtUtils::MakeMaker for mod_perl
2.0, to a degree of sub-classability of ExtUtils::MakeMaker.

When ModPerl::MM::WriteMakefile() is used instead of
ExtUtils::MakeMaker::WriteMakefile(), ModPerl::MM overrides
several ExtUtils::MakeMaker methods behind the scenes and supplies
default WriteMakefile() arguments adjusted for mod_perl 2.0
build. It's written in such a way so that normally 3rd party module
developers for mod_perl 2.0, don't need to mess with Makefile.PL at
all.

ModPerl::MM overrides method foo as long as Makefile.PL
hasn't already specified a method MY::foo. If the latter happens,
ModPerl::MM will DWIM and do nothing.

In case the functionality of ModPerl::MM methods needs to be
extended, rather than completely overriden, the ModPerl::MM methods
can be called internally. For example if you need to modify constants
in addition to the modifications applied by
ModPerl::MM::MY::constants, call the ModPerl::MM::MY::constants
method (notice that it resides in the package ModPerl::MM::MY and
not ModPerl::MM), then do your extra manipulations on constants:

# if there is a need to extend the methods
sub MY::constants {
my $self = shift;
$self->ModPerl::MM::MY::constants;
# do something else;
}

In certain cases a developers may want to prevent from ModPerl::MM
to override certain methods. In that case an explicit override in
Makefile.PL will do the job. For example if you don't want the
constants() method to be overriden by ModPerl::MM, add to your
Makefile.PL:

ModPerl::MM::WriteMakefile supplies default arguments such as
INC and TYPEMAPS unless they weren't passed to
ModPerl::MM::WriteMakefile from Makefile.PL.

If the default values aren't satisfying these should be overriden in
Makefile.PL. For example to supply an empty INC, explicitly set the
argument in Makefile.PL.

ModPerl::MM::WriteMakefile(
...
INC => '',
...
);

If instead of fully overriding the default arguments, you want to
extend or modify them, they can be retrieved using the
ModPerl::MM::get_def_opt() function. The following example appends
an extra value to the default INC attribute: