Module-Build-JSAN
view release on metacpan or search on metacpan
lib/Module/Build/JSAN.pm view on Meta::CPAN
$jsan->index;
my @deps = (
keys( %{$self->{properties}{build_requires}} ),
keys( %{$self->{properties}{requires}} ),
);
eval { $jsan->install( $_, $prefix ) }, ($@ && print$@)
for @deps;
$self->add_to_cleanup( $prefix );
}
sub dist_version {
my $self = shift;
my $p = $self->{properties};
return $p->{dist_version} if defined $p->{dist_version};
if ($self->module_name) {
$p->{dist_version_from} ||=
join( '/', 'lib', split /\./, $self->module_name ) . '.js';
print $p->{dist_version_from}, $/;
}
die "Can't determine distribution version, must supply either "
. "'dist_version',\n'dist_version_from', or 'module_name' parameter"
unless $p->{dist_version_from};
# Search for the version number.
return $p->{dist_version} = $self->_parse_version(
$self->module_name,
$p->{dist_version_from}
);
}
sub find_js_files { shift->_find_file_by_type('js', 'lib') }
sub find_dist_packages {
my $self = shift;
# Only packages in .js files are candidates for inclusion here.
# Only include things in the MANIFEST, not things in developer's
# private stock.
my $manifest = $self->_read_manifest('MANIFEST')
or die "Can't find dist packages without a MANIFEST file "
. "- run 'manifest' action first";
# Localize
my %dist_files = map { $self->localize_file_path($_) => $_ }
keys %$manifest;
my @js_files = grep {exists $dist_files{$_}} keys %{ $self->find_js_files };
my %out;
for my $file (@js_files) {
next if $file =~ m{^t/}; # Skip things in t/
# Assume that the file name corresponds to the library. This may need
# to be more sophisticated in the future, but will do for now.
(my $lib = $file) =~ s|^[^/]+/||;
$lib = join '.', split m{/}, $lib;
$lib =~ s/\.js$//;
$out{$lib} = {
file => $dist_files{$file},
version => $self->_parse_version($lib, $file),
};
}
return \%out;
}
sub _parse_version {
my ($self, $lib, $file) = @_;
my $version_from = File::Spec->catfile( split m{/}, $file );
open VF, "<$version_from" or die "Cannot open '$version_from': $!\n";
my $version = '';
my $find = qr/VERSION\s*(?:=|:)\s*[^\d._]*([\d._]+)/;
while (<VF>) {
last if ($version) = /$find/;
}
close VF;
return $version;
}
sub write_metafile {
my $self = shift;
my $metafile = $self->metafile;
require Module::Build::JSAN::ConfigData; # Only works after the 'build'
if (Module::Build::JSAN::ConfigData->feature('JSON_support')) {
require JSON;
$self->prepare_metadata( my $node = {} );
open my $meta, '>', $metafile or die "Cannot open '$metafile': $!\n";
print $meta JSON->new->pretty->encode( $node );
close $meta;
} else {
$self->log_warn(
"\nCouldn't load JSON.pm, generating a minimal META.json without ",
"it.\nPlease check and edit the generated metadata, or consider ",
"installing\nJSON.pm.\n\n"
);
$self->_write_minimal_metadata;
}
$self->_add_to_manifest('MANIFEST', $metafile);
}
sub _write_minimal_metadata {
my $self = shift;
my $p = $self->{properties};
my $file = $self->metafile;
my $fh = IO::File->new("> $file") or die "Can't open $file: $!";
# XXX Add the meta_add & meta_merge stuff
print $fh <<"END_OF_META";
{
"name": "$p->{dist_name}",
"version": "$p->{dist_version}",
"author":
@{[ join "\n", map qq{ "$_"}, @{$self->dist_author} ]},
"abstract": "@{[ $self->dist_abstract ]}",
"license": "$p->{license}",
"generated_by": "Module::Build::JSAN version $Module::Build::JSAN::VERSION, without JSON.pm"
}
END_OF_META
}
sub _write_default_maniskip {
my $self = shift;
my $file = shift || 'MANIFEST.SKIP';
$self->SUPER::_write_default_maniskip($file);
my $fh = IO::File->new(">> $file")
( run in 1.049 second using v1.01-cache-2.11-cpan-71847e10f99 )