The Perl Toolchain Summit 2025 Needs You: You can help 🙏 Learn more

$ExtUtils::Builder::Action::VERSION = '0.016';
use strict;
sub new {
my ($class, %args) = @_;
return bless { %args }, $class;
}
sub preference {
my ($self, @possibilities) = @_;
my $map = $self->_preference_map;
my @keys = @possibilities ? @possibilities : keys %{$map};
my ($ret) = reverse sort { $map->{$a} <=> $map->{$b} } @keys;
return $ret;
}
sub to_code_hash {
my ($self, %opts) = @_;
return {
code => $self->to_code(%opts),
}
}
1;
#ABSTRACT: The ExtUtils::Builder Action role
__END__
=pod
=encoding UTF-8
=head1 NAME
ExtUtils::Builder::Action - The ExtUtils::Builder Action role
=head1 VERSION
version 0.016
=head1 SYNOPSIS
$_->execute for @actions;
open my $script, '>', 'foo.sh';
print $script shell_quote(@{$_}) for map { $_->to_command } @actions;
=head1 DESCRIPTION
Actions are the cornerstone of the ExtUtils::Builder framework. They provide an interface between build tools (L<ExtUtils::MakeMaker|ExtUtils::MakeMaker>, L<Module::Build|Module::Build>) and building extensions. This allows both sides to be completely independent from each other. It is a flexible abstraction around pieces of work, this work can be a piece of perl code, an external command, a mix of those or possibly other things.
=head1 OVERVIEW
An action can be consumed in many ways. It can be C<execute>d, which is often the simplest way to deal with them. It can be serialized to commands that can be passed on to system or strings that can be C<eval>led. If a consumer can deal with multiple of these, the C<preference> method can be used to choose between options. On L<composite|ExtUtils::Builder::Action::Composite> actions, C<flatten> can be called to retrieve the constituent actions, on L<primitive|ExtUtils::Builder::Action::Primitive> actions it's just an identity operator. This is particularly useful before calling preference, because different sub-actions are likely to have different preferences.
=head1 METHODS
=head2 execute(%arguments)
Execute this action immediately. This may throw an exception on errors, but doesn't otherwise return anything. C<%arguments> may be used by the command.
=over 4
=item * quiet
If true, this suppresses logging.
=back
=head2 to_command(%options)
Convert the action into a set of platform appropriate commands. It returns a list of array-refs, each array-ref being an individual command that can be passes to C<system> or equivalent. C<%options> can influence how something is serialized in action-type specific ways, but shouldn't fundamentally affect the action that is performed. All options are optional.
=over 4
=item perl
This contains the path to the current perl interpreter.
=item config
This should contain an ExtUtils::Config object, or equivalent.
=back
=head2 to_code(%options)
This returns a list of strings that can be evalled to sub-refs. C<%options> can influence how something is serialized in action-type specific ways, but shouldn't fundamentally affect the action that is performed.
=head2 to_code_hash(%options)
This returns a list of hashes that can be used to create L<Action::Code|ExtUtils::Builder::Action::Code> objects.
=head2 preference(@possibilities)
This action returns the favored out of C<@possibilities>. Valid values are C<execute>, C<code>, C<command>, C<flatten>. If no arguments are given, the favorite from all valid values is given.
=head2 flatten
This action returns all actions behind this action. It may return itself, it may return a long list of actions, it may even return an empty list.
=for Pod::Coverage new
=head1 AUTHOR
Leon Timmermans <fawaka@gmail.com>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2013 by Leon Timmermans.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut