Module::Build and Custom Install Steps
pileofrogs
created: 2006-03-03 14:00:52

I'm writing a module, and I'm using Module::Build. I want to add some unusual steps to the install process (specifically, I want to change the file owner of an installed CGI).

It seems like there ought to be a way to run arbitrary commands/scripts during the install phase, but Module::Build and Module::Build::Cookbook haven't hinted at anything.

Does anyone know how to do that? Or better yet, can anyone point me to a tutorial/howto/whatever that discusses advanced Module::Build usage and covers this question?

Thanks!
--Pileofrogs

Re: Module::Build and Custom Install Steps
xdg
created: 2006-03-03 14:08:50

You can subclass Module::Build on the fly using the subclass method and override the methods that perform the actions. You may need to read through Module::Build::Base to find the methods you want to override, but the general pattern is ACTION_ followed by the name of the action you'd put after "Build". Here's an example of how it would work for install:

# Build.PL
use Module::Build;

my $class = Module::Build->subclass(
    class => "Module::Build::Custom",
    code => <<'SUBCLASS', );

    sub ACTION_install {
        my $self = shift;
        # YOUR CODE HERE
        $self->SUPER::ACTION_install;
    }
SUBCLASS
            
$class->new( 
    module_name         => 'Your::Module',
    # rest of the usual Module::Build parameters
)->create_build_script;

See the [http://search.cpan.org/~kwilliams/Module-Build-0.27_07/lib/Module/Build/Authoring.pod|Module::Build::Authoring] pod in any of the 0.27 developer releases for better documentation on this.

-xdg

Code written by xdg and posted on PerlMonks is [http://creativecommons.org/licenses/publicdomain|public domain]. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

Re^2: Module::Build and Custom Install Steps
created: 2006-03-06 12:39:05

Oy! ++

Awesome! It's so simple, now that you've waved it in front of my nose. I'm going to take this post and sent it to the Module::Build folks with a suggestion that they add it to their documentation.

Thanks!

--Pileofrogs

perlmonks.org content © perlmonks.org and pileofrogs, xdg

prlmnks.org © 2006 edmund von der burg (eccles & toad)

v 0.03