Created
April 4, 2015 16:19
-
-
Save JaHIY/dc74e17d0b07a8fc69ce to your computer and use it in GitHub Desktop.
convert perl module to PKGBUILD through metacpan API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env perl | |
use strict; | |
use warnings; | |
use utf8::all; | |
use Carp; | |
use HTTP::Tiny; | |
use JSON qw(decode_json); | |
use Template; | |
use URI; | |
use Data::Dumper; | |
my $HEADER = '# Maintainer: Kars Wang <jaklsy AT gmail.com>'; | |
my $API_URL = 'http://api.metacpan.org/v0'; | |
sub main { | |
( my $dist_name = $_[0] ) =~ s/::/-/g; | |
my $pkg_name = sprintf 'perl-%s', lc $dist_name; | |
my $request_uri = URI->new( join( '/', $API_URL, 'release', $dist_name ) ); | |
my $http = HTTP::Tiny->new; | |
my $response = $http->post( $request_uri->canonical ); | |
croak 'HTTP failed!' if not $response->{success}; | |
croak 'No content!' if not $response->{content}; | |
my $json = decode_json $response->{content}; | |
croak sprintf('error! code:%d, message:%s', $response->{code}, $response->{message}) if defined $response->{code}; | |
my $dist_version = $json->{version}; | |
my $dist_desc = $json->{abstract}; | |
my @dist_depends; | |
if ( defined ( my $requires_ref = $json->{metadata}->{prereqs}->{runtime}->{requires} ) ) { | |
my %runtime_requires = %{ $requires_ref }; | |
@dist_depends = map { ( my $n = $_ ) =~ s/::/-/g; sprintf q{'perl-%s>=%s'}, lc $n, $runtime_requires{$_}; } keys %runtime_requires; | |
} | |
my @dist_checkdepends; | |
if ( defined ( my $requires_ref = $json->{metadata}->{prereqs}->{test}->{requires} ) ) { | |
my %test_requires = %{ $requires_ref }; | |
@dist_checkdepends = map { ( my $n = $_ ) =~ s/::/-/g; sprintf q{'perl-%s>=%s'}, lc $n, $test_requires{$_}; } keys %test_requires; | |
} | |
my @dist_makedepends; | |
if ( defined ( my $requires_ref = $json->{metadata}->{prereqs}->{build}->{requires} ) ) { | |
my %build_requires = %{ $requires_ref }; | |
@dist_makedepends = map { ( my $n = $_ ) =~ s/::/-/g; sprintf q{'perl-%s>=%s'}, lc $n, $build_requires{$_}; } keys %build_requires; | |
} | |
my @dist_provides = map { sprintf q{'perl-%s=%s'}, lc $_, $dist_version; } grep { $_ ne $dist_name } map { ( my $n = $_ ) =~ s/::/-/g; $n; } @{ $json->{provides} }; | |
my $download_url = $json->{download_url}; | |
my ( $author_field ) = $download_url =~ m{^https?:\/\/cpan\.metacpan\.org\/authors\/id\/(.*)\/[^/]+\.tar\.gz$}; | |
my $template = Template->new; | |
$template->process(\*DATA, { | |
header => $HEADER, | |
dist_name => $dist_name, | |
pkg_name => $pkg_name, | |
dist_version => $dist_version, | |
dist_desc => $dist_desc, | |
dist_depends => join( ' ', @dist_depends ), | |
dist_checkdepends => join( ' ', @dist_checkdepends ), | |
dist_makedepends => join( ' ', @dist_makedepends ), | |
dist_provides => join( ' ', @dist_provides ), | |
author_field => $author_field, | |
}); | |
} | |
main @ARGV; | |
__END__ | |
[% header %] | |
pkgname='[% pkg_name %]' | |
pkgver=[% dist_version %] | |
pkgrel=1 | |
pkgdesc='[% dist_desc %]' | |
_dist='[% dist_name %]' | |
arch=('any') | |
url="https://metacpan.org/release/$_dist" | |
license=('PerlArtistic') | |
depends=('perl' [% dist_depends %]) | |
checkdepends=([% dist_checkdepends %]) | |
makedepends=([% dist_makedepends %]) | |
provides=([% dist_provides %]) | |
options=('!emptydirs' 'purge') | |
source=("http://search.cpan.org/CPAN/authors/id/[% author_field %]/$_dist-$pkgver.tar.gz") | |
sha256sums=('SKIP') | |
build() ( | |
cd "$srcdir/$_dist-$pkgver" | |
unset PERL5LIB PERL_MM_OPT PERL_LOCAL_LIB_ROOT | |
export PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps | |
/usr/bin/perl Makefile.PL | |
make | |
) | |
check() ( | |
cd "$srcdir/$_dist-$pkgver" | |
unset PERL5LIB PERL_MM_OPT PERL_LOCAL_LIB_ROOT | |
export PERL_MM_USE_DEFAULT=1 | |
make test | |
) | |
package() ( | |
cd "$srcdir/$_dist-$pkgver" | |
unset PERL5LIB PERL_MM_OPT PERL_LOCAL_LIB_ROOT | |
make install INSTALLDIRS=vendor DESTDIR="$pkgdir" | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment