App-CamelPKI
view release on metacpan or search on metacpan
inc/My/Module/Build.pm view on Meta::CPAN
Term::ReadKey::ReadMode("normal");
return 0;
}
=item I<check_maintainer_dependencies()>
Checks that the modules required for B<modifying> the CPAN package are
installed on the target system, and displays a friendly, non-fatal
message otherwise. This method is automatically run from L</new> if
appropriate (that is, if L</maintainer_mode_enabled> is true).
=cut
sub check_maintainer_dependencies {
my $self = shift;
unless ($self->check_installed_status('YAML', 0)->{ok})
{ $self->show_warning(<<"MESSAGE"); }
The YAML module from CPAN is missing on your system.
YAML is required for the "./Build distmeta" operation. You have to run
that command to regenerate META.yml every time you add a new .pm,
change dependencies or otherwise alter the namespace footprint of this
CPAN package. You will therefore only be able to contribute small
bugfixes until you install YAML.
MESSAGE
foreach my $testmod (qw(Test::NoBreakpoints
Test::Pod Test::Pod::Coverage)) {
unless ($self->check_installed_status($testmod, 0)->{ok})
{ $self->show_warning(<<"MESSAGE")};
The $testmod module from CPAN is missing on your system.
One of the tests in t/maintainer will fail because of that. Please
install the corresponding module to run the full test suite.
MESSAGE
}
}
=item I<show_warning($message)>
Displays a multi-line message $message to the user, and prompts
him/her to "Press RETURN to continue".
=cut
sub show_warning {
my ($self, $message) = @_;
$message = "\n$message" until ($message =~ m/^\n\n/);
$message .= "\n" until ($message =~ m/\n\n$/);
warn $message;
$self->prompt("Press RETURN to continue");
1;
}
=item I<show_fatal_error($message)>
Like L</show_warning>, but throws an exception after displaying
$message.
=cut
sub show_fatal_error {
my ($self, $message) = @_;
$self->show_warning($message);
die "Fatal error, bailing out.\n";
}
=back
=head2 Methods
These are intended to be called directly from Build.PL
=over
=item I<topir>
Returns the directory in which C<Build.PL> resides.
=cut
sub topdir {
# TODO: probably not good enough in some cases.
require FindBin;
no warnings "once";
return $FindBin::Bin;
}
=item I<package2filename($packagename)>
Converts $packagename (e.g. C<Foo::Bar>) into its OS-specific notation
(e.g. C<Foo/Bar.pm>).
=cut
sub package2filename {
my ($self, $package) = @_;
my @components = split m/::/, $package;
$components[$#components] .= ".pm";
return catfile(@components);
}
=item I<process_Inline_C_file($filename, @preload_modules)>
Arranges for L<Inline::C> code contained in $filename to be compiled
into .bs's and .so's. @preload_modules is a list of Perl packages (in
Perl C<use> notation, eg C<Foo::Bar> instead of C<Foo/Bar.pm>) that
should be loaded with C<use> before starting the L<Inline> install
process. Uses a stamp file in C<blib/stamp> to avoid compiling anew
if neither $filename nor @preload_modules changed.
=cut
sub process_Inline_C_file {
my ($self, $filename, @preload_modules) = @_;
my $stampfile = do {
( run in 0.414 second using v1.01-cache-2.11-cpan-39bf76dae61 )