man ModPerl::MM () - ModPerl::MM -- A "subclass" of ExtUtils::MakeMaker for mod_perl 2.0
NAME
ModPerl::MM -- A "subclass" of ExtUtils::MakeMaker for mod_perl 2.0
Synopsis
use ModPerl::MM;
# ModPerl::MM takes care of doing all the dirty job of overriding ModPerl::MM::WriteMakefile(...);
# if there is a need to extend the default methods sub MY::constants { my $self = shift; $self->ModPerl::MM::MY::constants; # do something else; }
# or prevent overriding completely sub MY::constants { shift->MM::constants(@_); }";
# override the default value of WriteMakefile's attribute my $extra_inc = "/foo/include"; ModPerl::MM::WriteMakefile( ... INC => $extra_inc, ... );
# extend the default value of WriteMakefile's attribute my $extra_inc = "/foo/include"; ModPerl::MM::WriteMakefile( ... INC => join " ", $extra_inc, ModPerl::MM::get_def_opt('INC'), ... );
Description
CWModPerl::MM is a subclass of CWExtUtils::MakeMaker for mod_perl 2.0, to a degree of sub-classability of CWExtUtils::MakeMaker.
When CWModPerl::MM::WriteMakefile() is used instead of CWExtUtils::MakeMaker::WriteMakefile(), CWModPerl::MM overrides several CWExtUtils::MakeMaker methods behind the scenes and supplies default CWWriteMakefile() 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. CWModPerl::MM overrides method foo as long as Makefile.PL hasn't already specified a method MY::foo. If the latter happens, CWModPerl::MM will DWIM and do nothing.
In case the functionality of CWModPerl::MM methods needs to be extended, rather than completely overriden, the CWModPerl::MM methods can be called internally. For example if you need to modify constants in addition to the modifications applied by CWModPerl::MM::MY::constants, call the CWModPerl::MM::MY::constants method (notice that it resides in the package CWModPerl::MM::MY and not CWModPerl::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 CWModPerl::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 CWconstants() method to be overriden by CWModPerl::MM, add to your Makefile.PL:
sub MY::constants { shift->MM::constants(@_); }";
CWModPerl::MM overrides the following methods: This method is deprecated. CWModPerl::MM::WriteMakefile supplies default arguments such as CWINC and CWTYPEMAPS unless they weren't passed to CWModPerl::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 CWModPerl::MM::get_def_opt() function. The following example appends an extra value to the default CWINC attribute:
my $extra_inc = "/foo/include"; ModPerl::MM::WriteMakefile( ... INC => join " ", $extra_inc, ModPerl::MM::get_def_opt('INC'), ... );
CWModPerl::MM supplies default values for the following CWModPerl::MM::WriteMakefile attributes: CIOTHERLDFLAGS
dynamic_lib => { OTHERLDFLAGS => ... }CIMOD_INSTALL
macro => { MOD_INSTALL => ... }
makes sure that Apache-Test/ is added to CW@INC.
Public API
The following functions are a part of the public API. They are described elsewhere in this document.
ModPerl::MM::WriteMakefile(...);
my $def_val = ModPerl::MM::get_def_opt($key);