nix-generate-from-cpan: Handle META.json

Fixes #761.
This commit is contained in:
Eelco Dolstra 2013-07-16 13:44:55 +02:00
parent 4cc4ed6d2d
commit 01294254a0

View File

@ -51,15 +51,21 @@ print STDERR "unpacked to: $pkg_path\n";
my $meta; my $meta;
if (-e "$pkg_path/META.yml") { if (-e "$pkg_path/META.yml") {
eval { eval {
$meta = YAML::XS::LoadFile("$pkg_path/META.yml"); $meta = YAML::XS::LoadFile("$pkg_path/META.yml");
}; };
if ($@) { if ($@) {
system("iconv -f windows-1252 -t utf-8 '$pkg_path/META.yml' > '$pkg_path/META.yml.tmp'"); system("iconv -f windows-1252 -t utf-8 '$pkg_path/META.yml' > '$pkg_path/META.yml.tmp'");
$meta = YAML::XS::LoadFile("$pkg_path/META.yml.tmp"); $meta = YAML::XS::LoadFile("$pkg_path/META.yml.tmp");
} }
} elsif (-e "$pkg_path/META.json") {
local $/;
open(my $fh, '<', "$pkg_path/META.json") or die;
$meta = decode_json(<$fh>);
} else {
warn "package has no META.yml or META.json\n";
} }
print STDERR "metadata: ", encode_json($meta), "\n"; print STDERR "metadata: ", encode_json($meta), "\n" if defined $meta;
# Map a module to the attribute corresponding to its package # Map a module to the attribute corresponding to its package
# (e.g. HTML::HeadParser will be mapped to HTMLParser, because that # (e.g. HTML::HeadParser will be mapped to HTMLParser, because that
@ -120,11 +126,13 @@ my $homepage = $meta->{resources}->{homepage};
print STDERR "homepage: $homepage\n" if defined $homepage; print STDERR "homepage: $homepage\n" if defined $homepage;
my $description = $meta->{abstract}; my $description = $meta->{abstract};
$description = uc(substr($description, 0, 1)) . substr($description, 1); # capitalise first letter if (defined $description) {
$description =~ s/\.$//; # remove period at the end $description = uc(substr($description, 0, 1)) . substr($description, 1); # capitalise first letter
$description =~ s/\s*$//; $description =~ s/\.$//; # remove period at the end
$description =~ s/^\s*//; $description =~ s/\s*$//;
print STDERR "description: $description\n"; $description =~ s/^\s*//;
print STDERR "description: $description\n";
}
my $license = $meta->{license}; my $license = $meta->{license};
if (defined $license) { if (defined $license) {
@ -156,7 +164,7 @@ EOF
print <<EOF if defined $homepage; print <<EOF if defined $homepage;
homepage = $homepage; homepage = $homepage;
EOF EOF
print <<EOF; print <<EOF if defined $description;
description = "$description"; description = "$description";
EOF EOF
print <<EOF if defined $license; print <<EOF if defined $license;