Alt-Acme-Math-XS-ModuleBuild
view release on metacpan or search on metacpan
inc/Inline/Module.pm view on Meta::CPAN
DEBUG_ON && DEBUG "Inline::Module::import(@_)";
my ($stub_module, $program) = caller;
$program =~ s!.*[\\\/]!!;
if ($program eq "Makefile.PL" and not -e 'INLINE.h') {
$class->check_inc_inc($program);
no warnings 'once';
*MY::postamble = \&postamble;
return;
}
elsif ($program eq 'Build.PL') {
$class->check_inc_inc($program);
}
return unless @_;
my $cmd = shift;
return $class->handle_stub($stub_module, @_)
if $cmd eq 'stub';
return $class->handle_autostub(@_)
if $cmd eq 'autostub';
return $class->handle_makestub(@_)
if $cmd eq 'makestub';
return $class->handle_distdir(@ARGV)
if $cmd eq 'distdir';
return $class->handle_fixblib()
if $cmd eq 'fixblib';
die "Unknown Inline::Module::import argument '$cmd'"
}
sub check_api_version {
my ($class, $stub_module, $api_version) = @_;
if ($api_version ne $API_VERSION) {
warn <<"...";
It seems that '$stub_module' is out of date.
It is using Inline::Module API version '$api_version'.
You have Inline::Module API version '$API_VERSION' installed.
Make sure you have the latest version of Inline::Module installed, then run:
perl -MInline::Module=makestub,$stub_module
...
# XXX 'exit' is used to get a cleaner error msg.
# Try to redo this without 'exit'.
exit 1;
}
}
sub check_inc_inc {
my ($class, $program) = @_;
my $first = $INC[0] or die;
if ($first !~ /^(\.[\/\\])?inc[\/\\]?$/) {
die <<"...";
First element of \@INC should be 'inc'.
It's '$first'.
Add this line to the top of your '$program':
use lib 'inc';
...
}
}
sub importer {
my ($class, $stub_module) = @_;
return sub {
my ($class, $lang) = @_;
return unless defined $lang;
require File::Path;
File::Path::mkpath($inline_build_path)
unless -d $inline_build_path;
require Inline;
Inline->import(
Config =>
directory => $inline_build_path,
($lang eq 'C') ? (using => 'Inline::C::Parser::RegExp') : (),
name => $stub_module,
CLEAN_AFTER_BUILD => 0,
);
shift(@_);
DEBUG_ON && DEBUG "Inline::Module::importer proxy to Inline::%s", @_;
Inline->import_heavy(@_);
};
}
#------------------------------------------------------------------------------
# The postamble method:
#------------------------------------------------------------------------------
sub postamble {
my ($makemaker, %args) = @_;
my $meta = $args{inline}
or croak "'postamble' section requires 'inline' key in Makefile.PL";
croak "postamble 'inline' section requires 'module' key in Makefile.PL"
unless $meta->{module};
my $class = __PACKAGE__;
$class->default_meta($meta);
my $code_modules = $meta->{module};
my $stub_modules = $meta->{stub};
my $included_modules = $class->included_modules($meta);
if ($meta->{makestub} and not -e 'inc' and not -e 'INLINE.h') {
$class->make_stub_modules(@{$meta->{stub}});
}
my $section = <<"...";
clean ::
\t- \$(RM_RF) $inline_build_path
distdir : distdir_inline
distdir_inline : create_distdir
\t\$(NOECHO) \$(ABSPERLRUN) -MInline::Module=distdir -e 1 -- \$(DISTVNAME) @$stub_modules -- @$included_modules
pure_all ::
...
( run in 0.809 second using v1.01-cache-2.11-cpan-6b5c3043376 )