summaryrefslogtreecommitdiffstats
path: root/metas
diff options
context:
space:
mode:
authorJustin Davis <jrcd83@gmail.com>2012-04-16 01:03:20 +0200
committerJustin Davis <jrcd83@gmail.com>2012-04-16 01:03:20 +0200
commit690e3e9a39e2691b483474725ee1a17d44231401 (patch)
tree9919cf2319fa08b8392659b63465c5c1434357c6 /metas
parent10ef1c3abeb88af473c34f8ddd18da3148796823 (diff)
downloadgenpkg-690e3e9a39e2691b483474725ee1a17d44231401.tar.gz
genpkg-690e3e9a39e2691b483474725ee1a17d44231401.tar.xz
Rename the metas/ directory to preps/.
This matches the prepkg script name.
Diffstat (limited to 'metas')
-rwxr-xr-xmetas/perl106
-rwxr-xr-xmetas/perl.d/fetchcpan60
-rwxr-xr-xmetas/perl.d/perl-dist617
-rwxr-xr-xmetas/perl.d/perl-pkgbuild120
-rwxr-xr-xmetas/perl.d/scrapecore241
5 files changed, 0 insertions, 1144 deletions
diff --git a/metas/perl b/metas/perl
deleted file mode 100755
index 23f4907..0000000
--- a/metas/perl
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/env perl
-
-use warnings 'FATAL' => 'all';
-use strict;
-
-use File::Fetch;
-use IO::Handle; # for autoflush
-use Cwd;
-
-my $PROG = 'metas/perl';
-my %BADNAMES = ('perl-libwww' => 'libwww-perl');
-
-sub err
-{
- print STDERR "$PROG: ", @_, "\n";
- exit 1;
-}
-
-sub matchdist
-{
- my($dist) = @_;
-
- # Refresh our local list of distributions if needed.
- my $var = $ENV{'PKGVAR'}
- or err('PKGVAR env variable is unset');
-
- if(!-f "$var/cpandists" || -M "$var/cpandists" > 1) {
- print STDERR "$PROG: Refreshing local CPAN data... ";
- my $cwd = getcwd();
- chdir $var or die "chdir: $!";
- system 'fetchcpan';
- die "FAILED\n" unless($? == 0);
- print STDERR "OK\n";
- chdir $cwd or die "chdir: $!";
- }
-
- open(DISTS, '<', "$var/cpandists") or err("open: $!");
- while(<DISTS>) {
- my @f = split;
- my $d = lc $f[0]; $d =~ tr/-_/--/s;
- next unless($d eq lc($dist));
- close(DISTS);
- return ($f[0], $f[2]);
- }
- close(DISTS);
- return ();
-}
-
-sub fetchdist
-{
- my($cpath) = @_;
- my $file = $cpath; $file =~ s{^.*/}{};
- if(-f $file) {
- print STDERR "$file already downloaded.\n";
- return;
- }
-
- my $mirror = $ENV{'CPANMIRROR'} || 'ftp://cpan.pair.com';
- my $url = "${mirror}/authors/id/${cpath}";
-
- print STDERR "Downloading $file... ";
- my $ff = File::Fetch->new('uri' => $url);
- die "FAILED\n" unless($ff->fetch());
- print STDERR "OK\n";
-}
-
-sub main
-{
- my $dist = shift or die "usage: $PROG [package name]\n";
-
- my $guess;
- if($BADNAMES{$dist}){
- $dist = $BADNAMES{$dist};
- }elsif($dist =~ s/^perl-// == 0){
- $guess = 1;
- $dist = "app-$dist";
- }
-
- STDERR->autoflush(1);
- my ($realname, $cpath) = matchdist($dist);
- unless($realname){
- if($guess){
- return 2
- }else{
- ## Return a hard error to makepkgmeta if perl- package.
- err(qq{failed to find perl dist similar to '$dist'});
- return 1
- }
- }
- fetchdist($cpath);
-
- print <<"END_META";
-url
-https://metacpan.org/release/$realname
-
-source
-http://search.cpan.org/CPAN/authors/id/$cpath
-
-END_META
-
- my $file = $cpath; $file =~ s{.*/}{};
- system 'perl-dist' => $file;
- return $? >> 8;
-}
-
-exit main(@ARGV);
diff --git a/metas/perl.d/fetchcpan b/metas/perl.d/fetchcpan
deleted file mode 100755
index 076599b..0000000
--- a/metas/perl.d/fetchcpan
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/sh
-
-mirror=${CPANMIRROR:-ftp://cpan.pair.com}
-path=/modules/02packages.details.txt.gz
-
-curl --silent "$mirror$path" | gzip -dc | awk '
-NR < 10 { next }
-{
- file = a[split($3, a, "/")]
-
- if (!match(file, /[-_][vV]?[0-9]+/)) {
- #print "error: failed to grok " $3 | "cat 1>&2"
- next
- }
- ver = substr(file, RSTART+1)
- dist = substr(file, 1, RSTART-1)
-
- sub(/[.]tar[.].*$|[.]zip$/, "", ver)
- sub(/^[vV]/, "", ver)
- sub(/[.]pm$/, "", dist)
-
- if(dist == "perl") next
-
- mods[dist,ver] = mods[dist,ver] $1 " " $2 "\n"
- if (lessthan(dists[dist], ver)) {
- dists[dist] = ver
- paths[dist] = $3
- }
-}
-
-END {
- for (dist in dists) {
- ver = dists[dist]
- print dist, ver, paths[dist] | "sort >cpandists"
- }
- close("sort >cpandists")
-
- # Prints modules out in sorted order, too!
- while(getline<"cpandists" > 0) {
- print $1 "\n" mods[$1,$2] >"cpanmods"
- }
-}
-
-function lessthan (l, r)
-{
- return decver(l) < decver(r)
-}
-
-function decver (vs)
-{
- pcnt = gsub(/[.]/, ".", vs)
- if (pcnt < 2) return vs
-
- len = split(vs, vc, ".")
- dec = vc[1]
- for (i=2; i<=len; i++) dec += (10 ^ (-i * 3)) * vc[i]
- return dec
-}
-
-'
diff --git a/metas/perl.d/perl-dist b/metas/perl.d/perl-dist
deleted file mode 100755
index b1eedf2..0000000
--- a/metas/perl.d/perl-dist
+++ /dev/null
@@ -1,617 +0,0 @@
-#!/usr/bin/env perl
-
-use warnings 'FATAL' => 'all';
-use strict;
-
-my $PROG = 'metas/perl.d/perl-dist';
-my $PBPROG = 'perl-pkgbuild';
-
-sub DBG {}
-if(exists $ENV{'GENDBG'}){
- no warnings 'redefine';
- *DBG = sub { print STDERR "$PROG: DBG: ", @_ };
-}
-
-package Convert;
-
-*DBG = *main::DBG;
-
-use Module::CoreList;
-use LWP::UserAgent qw();
-use YAML::XS qw();
-use version qw();
-
-# Match unpredictible package names .
-my %OVERRIDE =
- ('libwww-perl' => 'perl-libwww',
- 'aceperl' => 'perl-ace',
- 'mod_perl' => 'mod_perl',
- 'glade-perl-two' => 'perl-glade-two',
- 'Gnome2-GConf' => 'gconf-perl',
- 'Gtk2-GladeXML' => 'glade-perl',
- 'Glib' => 'glib-perl',
- 'Gnome2' => 'gnome-perl',
- 'Gnome2-VFS' => 'gnome-vfs-perl',
- 'Gnome2-Canvas' => 'gnomecanvas-perl',
- 'Gnome2-GConf' => 'gconf-perl',
- 'Gtk2' => 'gtk2-perl',
- 'Cairo' => 'cairo-perl',
- 'Pango' => 'pango-perl',
- 'Perl-Critic' => 'perl-critic',
- 'Perl-Tidy' => 'perl-tidy',
- 'App-Ack' => 'ack',
- 'TermReadKey' => 'perl-term-readkey');
-
-sub dist2pkg
-{
- my($name, $ver) = @_;
- return dist_pkgname($name), dist_pkgver($ver);
-}
-
-# Copied from CPANPLUS::Dist::Arch
-sub dist_pkgname
-{
- my($distname) = @_;
-
- return $OVERRIDE{$distname} if(exists $OVERRIDE{$distname});
-
- # Package names should be lowercase and consist of alphanumeric
- # characters only (and hyphens!)...
- $distname = lc $distname;
- $distname =~ tr/_+/--/;
- $distname =~ tr/-a-z0-9//cd; # Delete all other chars
- $distname =~ tr/-/-/s;
-
- # Delete leading or trailing hyphens...
- $distname =~ s/\A-//;
- $distname =~ s/-\z//;
-
- die qq{Dist name '$distname' completely violates packaging standards}
- if(length $distname == 0);
-
- # Don't prefix the package with perl- if it IS perl...
- $distname = "perl-$distname" unless($distname eq 'perl');
-
- return $distname;
-}
-
-sub dist_pkgver
-{
- my($version) = @_;
-
- # Remove developer versions because pacman has no special logic
- # to handle comparing them to regular versions such as perl uses.
- $version =~ s/_[^_]+\z//;
-
- # Package versions should be numbers and decimal points only...
- $version =~ tr/-_/../;
- $version =~ tr/0-9.//cd;
-
- $version =~ tr/././s;
- $version =~ s/^[.]|[.]$//g;
-
- return $version;
-}
-
-#---HELPER FUNCTION---
-# Decide if the dist. is named after the module.
-sub _ismainmod
-{
- my($mod_name, $dist_name) = @_;
-
- $mod_name =~ tr/:/-/s;
- return lc($mod_name) eq lc($dist_name);
-}
-
-#---HELPER FUNCTION---
-# Merges the right-hand deps into the left-hand deps.
-sub _merge
-{
- my($left_deps, $right_deps) = @_;
-
- MERGE_LOOP:
- while(my($pkg, $ver) = each %$right_deps){
- if($left_deps->{$pkg}){
- my $leftver = version->parse($left_deps->{$pkg});
- my $rightver = version->parse($ver);
- next MERGE_LOOP if $leftver > $rightver;
- }
- $left_deps->{$pkg} = $ver;
- }
-
- return;
-}
-
-#---HELPER FUNCTION---
-# Merge duplicate deps into $left always storing the greatest version there.
-sub _mergedups
-{
- my($left, $right) = @_;
-
- for my $name (keys %$left){
- my $rver = delete $right->{$name} or next;
- my $lver = $left->{$name};
- my $lvo = ($lver ? version->parse($lver) : 0);
- my $rvo = ($rver ? version->parse($rver) : 0);
- $left->{$name} = ($lvo > $rvo ? $lvo : $rvo);
- }
-
- return;
-}
-
-sub _filterdeps(&$)
-{
- my($fsub, $deps) = @_;
- my %fed;
-
- my @pkgs = keys(%$deps);
- for my $dname (grep { $fsub->() } @pkgs){
- my $dver = delete $deps->{$dname};
- $fed{$dname} = $dver if(defined $dver);
- }
-
- return \%fed;
-}
-
-#---HELPER FUNCTION---
-sub _yankcheckers
-{
- _filterdeps { /^perl-pod-coverage$|^perl-test-/ } $_[0]
-}
-
-#---HELPER FUNCTION---
-# Converts a decimal perl version (like $]) into the dotted decimal
-# form that the official ArchLinux perl package uses.
-sub _perldepver
-{
- my($perlver) = @_;
-
- # Fix perl-style vstrings which have a leading "v".
- return $perlver if($perlver =~ s/\Av//);
- return $perlver unless($perlver =~ /\A(\d+)[.](\d{3})(\d{1,3})\z/);
-
- # Re-apply the missing trailing zeroes.
- my $patch = $3;
- $patch .= q{0} x (3 - length $patch);
- return sprintf('%d.%d.%d', $1, $2, $patch);
-}
-
-#---PUBLIC FUNCNTION---
-# Translates CPAN module dependencies into ArchLinux package dependencies.
-sub _reqs2deps
-{
- my($prereqs) = @_;
- my(@mods, %pkgdeps);
-
- # Filter out deps on 'perl' and any core modules that we can.
- while(my ($name, $ver) = each(%$prereqs)) {
- DBG("requires $name $ver\n");
- my $cver = $Module::CoreList::version{$]}{$name};
-
- if($name eq 'perl') {
- $pkgdeps{'perl'} = _perldepver($ver);
- }elsif($cver){
- DBG("perl core has $name $cver\n");
- my $vobj = eval { version->parse($ver) };
- $cver = version->parse($cver);
- if($vobj > $cver){
- push @mods, $name;
- }
- }else{
- push @mods, $name;
- }
- }
-
- my %dists = _distsofmods(@mods);
- while(my ($mod, $dist) = each %dists) {
- DBG("$mod is provided by $dist\n");
- my $pkgname = dist_pkgname($dist);
- my $ver = $prereqs->{$mod};
-
- # If the module is not named after the distribution, ignore its
- # version which might not match the distribution.
- undef $ver unless(_ismainmod($mod, $dist));
-
- # If two module prereqs are in the same CPAN distribution then
- # the version required for the main module will override.
- # (because versions specified for other modules in the dist
- # are 0)
- $pkgdeps{$pkgname} ||= ($ver ? dist_pkgver($ver) : 0);
- DBG("depends on $pkgname>=$pkgdeps{$pkgname}\n");
- }
-
- return \%pkgdeps;
-}
-
-sub prereqs
-{
- my($pkgname, $prereqs) = @_;
-
- # maps perl names for different dependencies to ArchLinux's names
- my %namemap = ('configure' => 'makedepends',
- 'build' => 'makedepends',
- 'test' => 'checkdepends',
- 'runtime' => 'depends',
- );
-
- my %pkgdeps;
- while (my($perl, $arch) = each(%namemap)) {
- my $reqs = $prereqs->{$perl}{'requires'};
- my $deps; $deps = _reqs2deps($reqs) if($reqs);
-
- next unless(keys %$deps);
- if($pkgdeps{$arch}){
- _merge($pkgdeps{$arch}, $deps);
- }else{
- $pkgdeps{$arch} = $deps;
- }
- }
-
- # ArchLinux now has a separate array for dependencies that we only
- # need for checking (aka "testing"). Older perl METAs do not
- # have this separated. Force any test modules to be checkdepends.
- if(!$pkgdeps{'checkdepends'} && $pkgname !~ /\Aperl-test-/){
- my $checkdeps = {};
- for(qw/makedepends depends/){
- _merge($checkdeps, _yankcheckers($pkgdeps{$_}))
- }
- $pkgdeps{'checkdepends'} = $checkdeps;
- }
-
- # We at least require perl, if nothing else.
- unless(grep { scalar keys %$_ > 0 } values %pkgdeps){
- $pkgdeps{'depends'}{'perl'} = 0;
- }
-
- _mergedups(@pkgdeps{'makedepends', 'checkdepends'});
- _mergedups(@pkgdeps{'depends', 'makedepends'});
-
- # Convert all deps into arrays of strings.
- for my $deptype (keys(%pkgdeps)){
- $pkgdeps{$deptype} = _stringify($pkgdeps{$deptype});
- }
-
- return \%pkgdeps;
-}
-
-#---HELPER FUNCTION---
-sub _stringify
-{
- my($deps) = @_;
-
- my @depstrs;
- for my $pkg (sort keys %$deps){
- my $ver = $deps->{$pkg};
- my $str = ($ver eq '0' ? $pkg : "$pkg>=$ver");
- push @depstrs, $str;
- }
-
- return \@depstrs;
-}
-
-sub _distsofmods
-{
- my(@mods) = @_;
-
- return () if(@mods == 0);
- @mods = _nocore(@mods);
-
- my $var = _vardir();
- open my $fh, '<', "$var/cpanmods"
- or die "$PROG: failed to open $var/cpanmods: $!";
-
- my %mods = map { ($_ => 1) } @mods;
- my %dists;
- local $/ = '';
-
- RECLOOP:
- while(my $rec = <$fh>){
- last RECLOOP unless(keys %mods > 0);
-
- my($dist, @mvs) = split(/\n/, $rec);
- MODLOOP:
- for(@mvs){
- my($m) = split;
- my $fnd = delete($mods{$m}) or next;
- $dists{$m} = $dist;
- }
- }
-
- my @lost = keys %mods;
- return %dists unless(@lost);
-
- for my $m (@lost){
- print STDERR "$PROG: failed to find module $m\n";
- }
- exit 1;
-}
-
-sub _nocore
-{
- my(@mods) = @_;
-
- my $path = _vardir() . '/coremods';
- unless(-f $path){
- print STDERR "$PROG: error: $path is missing.
-******************************************************************************
- You must generate it with genpkg's metas/perl.d/scrapecore script. Run it
- against the source distribution of perl that is currently being packaged.
-******************************************************************************
-";
- exit 1;
- }
- open my $if, '<', $path or die "$PROG: open $path: $!";
-
- my %mods = map { ($_ => 1) } @mods;
- while(<$if>){
- my($m) = split;
- delete $mods{$m};
- }
-
- close $if;
- return keys %mods;
-}
-
-sub _vardir
-{
- return $ENV{'PKGVAR'}
- or die "$PROG: PKGVAR env variable is unset\n";
-}
-
-#-----------------------------------------------------------------------------
-
-package main;
-
-use File::Basename qw(basename dirname);
-use File::Spec::Functions qw(catfile catdir rel2abs);
-use File::Find qw(find);
-
-use JSON::XS qw(decode_json); # for META.json
-use YAML::XS (); # for META.yml
-use Pod::Select (); # search POD for description
-
-sub printdata
-{
- my($pbvars) = @_;
- print "options\n!emptydirs\n\n";
- printmeta($pbvars);
- return;
-}
-
-sub writepb
-{
- my($ddir) = @_;
- my $dtype = (-f "$ddir/Build.PL" ? "MB" : "MM");
- if(system $PBPROG => $dtype){
- return $? >> 8;
- }else{
- return 0;
- }
-}
-
-sub main
-{
- my $distpath = shift or die "Usage: $PROG [path to cpan dist file]\n";
- $distpath = rel2abs($distpath);
- my $dir = dirname($distpath);
- my $file = basename($distpath);
- my $info = distinfo($file);
-
- chsrcdir(catdir($dir, 'src'), $file);
- my $distdir = extractdist($file);
-
- my $meta = loadmeta($distdir);
- my $desc = $meta->{'abstract'};
- if(!$desc || $desc eq '~' || $desc eq 'unknown'){
- $meta->{'abstract'} = distdesc($distdir, $info->{'mod'});
- }
-
- my($name, $ver) = Convert::dist2pkg(@{$info}{'name', 'ver'});
- my $deps = Convert::prereqs($name, $meta->{'prereqs'});
-
- my %pbvars =
- ('pkgver' => $ver,
- 'pkgdesc' => $meta->{'abstract'},
- 'arch' => (xsdist($distdir) ? ['i686', 'x86_64'] : 'any'),
- 'distdir' => $distdir,
- %$deps,
- );
-
- chdir $dir or die "chdir: $!";
-
- my $ret = writepb($dir);
- if($ret){
- print STDERR "$PROG: failed to write PKGBUILD: error $ret\n";
- return 1;
- }
-
- printdata(\%pbvars);
- return 0;
-}
-
-# Create the src/ directory and tarball symlink. Then chdir into it.
-
-sub chsrcdir
-{
- my($srcdir, $distfile) = @_;
-
- if(-e $srcdir){
- system 'rm' => ('-fr', $srcdir);
- die "failed to rm $srcdir\n" unless($? == 0);
- }
- mkdir $srcdir or die "mkdir $srcdir: $!";
- chdir $srcdir or die "chdir $srcdir: $!";
- unless(-f $distfile) {
- symlink(catfile('..', $distfile), $distfile)
- or die "symlink $distfile: $!";
- }
-
- return $srcdir;
-}
-
-sub distinfo
-{
- my($distfile) = @_;
-
- my @c = split /-/, $distfile;
- my $ver = pop @c;
- my $name = join q{-}, @c;
- my $mod = $name;
- $mod =~ s/-/::/g;
- return { 'name' => $name, 'ver' => $ver, 'mod' => $mod };
-}
-
-sub extractdist
-{
- my($file) = @_;
-
- system 'bsdtar' => ('-xf', $file);
- die "$PROG: bsdtar failed to extract $file\n" unless($? == 0);
-
- opendir my $srcdir, '.' or die "opendir: $!";
- my @dirs = grep { -d $_ && !/\A[.]/ } readdir $srcdir;
- closedir $srcdir;
-
- die "$PROG: many dirs (@dirs) inside the tarball $file\n" if(@dirs > 1);
- die "$PROG: no dirs found in tarball $file\n" if(@dirs == 0);
- return $dirs[0];
-}
-
-sub printmeta
-{
- my($pbvars) = @_;
- while(my($name, $val) = each %$pbvars) {
- if(!defined $val || $val eq q{}) {
- warn "$PROG: warning: $name is undefined\n";
- $val = q{};
- }
- print $name, "\n";
- print "$_\n" for (ref $val ? @$val : $val);
- print "\n";
- }
-
- # TODO: autodetect license type
- printf("license\n%s\n\n", join "\n", qw/PerlArtistic GPL/);
-}
-
-sub loadmeta
-{
- my($distdir) = @_;
-
- for my $metaext (qw/json yml/){
- my $path = "$distdir/META.$metaext";
- next unless(-f $path);
-
- open my $metafh, '<', $path or die "open: $!";
- my $meta = do { local $/; <$metafh> };
- close $metafh;
-
- $meta = ($metaext eq 'json' ? decode_json($meta) :
- $metaext eq 'yml' ? YAML::XS::Load($meta) :
- die "internal error: unknown \$metaext: $metaext");
-
- upgrademeta($meta);
- return $meta;
- }
-
- return undef;
-}
-
-sub upgrademeta
-{
- my($meta) = @_;
-
- return if(exists $meta->{'prereqs'});
-
- my $prereqs;
- $prereqs->{'configure'}{'requires'}
- = delete $meta->{'configure_requires'};
- $prereqs->{'build'}{'requires'} = delete($meta->{'build_requires'});
- $prereqs->{'runtime'}{'requires'} = delete($meta->{'requires'});
-
- $meta->{'prereqs'} = $prereqs;
- return;
-}
-
-sub xsdist
-{
- my($dir) = @_;
- my $isxs;
- find({ 'wanted' => sub { $isxs = 1 if(/[.]xs$/) }, 'no_chdir' => 1 },
- $dir);
- return $isxs;
-}
-
-#-----------------------------------------------------------------------------
-
-sub distdesc
-{
- my($dir, $modname) = @_;
- return _poddesc($dir, $modname) || _readmedesc($dir, $modname);
-}
-
-sub _poddesc
-{
- my($dir, $modname) = @_;
-
- my $podselect = Pod::Select->new;
- $podselect->select('NAME');
-
- my $modpath = $modname; $modpath =~ s{::}{/}g;
- my $moddir = dirname($modpath);
- my $modfile = basename($modpath);
-
- # First check under lib/ for a "properly" pathed module, with
- # nested directories. Then search desperately for a .pm file that
- # matches the module's last name component.
-
- my @possible = glob("$dir/{lib/,}{$moddir/,}$modfile.{pod,pm}");
-
- PODSEARCH:
- for my $podpath (@possible){
- next PODSEARCH unless(-f $podpath);
-
- # Read the NAME section of the POD into a scalar.
- my $namesect = q{};
- open my $podfile, '<', $podpath or next PODSEARCH;
- open my $podout, '>', \$namesect or die "open: $!";
-
- $podselect->parse_from_filehandle($podfile, $podout);
-
- close $podfile;
- close $podout or die "close: $!";
-
- next PODSEARCH unless($namesect);
-
- # Remove formatting codes.
- $namesect =~ s{ [IBCLEFSXZ] <(.*?)> }{$1}gxms;
- $namesect =~ s{ [IBCLEFSXZ] <<(.*?)>> }{$1}gxms;
-
- # The short desc is on a line beginning with 'Module::Name - '
- return $1 if($namesect =~ / ^ \s* $modname [ -]+ ([^\n]+) /xms);
- }
-
- return undef;
-}
-
-#---HELPER FUNCTION---
-sub _readmedesc
-{
- my($dir, $modname) = @_;
-
- my $path = catfile($dir, 'README');
- return undef unless(-f $path);
- open my $fh, '<', $path or die "open: $!";
-
- while(<$fh>){
- chomp;
- next unless((/\ANAME/ ... /\A[A-Z]+/)
- && / \A \s* ${modname} [\s\-]+ (.+) \z /x);
- return $1;
- }
-
- close $fh;
- return undef;
-}
-
-exit main(@ARGV);
diff --git a/metas/perl.d/perl-pkgbuild b/metas/perl.d/perl-pkgbuild
deleted file mode 100755
index 80a92e4..0000000
--- a/metas/perl.d/perl-pkgbuild
+++ /dev/null
@@ -1,120 +0,0 @@
-#!/usr/bin/env perl
-
-use warnings 'FATAL' => 'all';
-use strict;
-
-my $PROG = 'perl-pkgbuild';
-
-sub putpkgbuild
-{
- my($sect, $subsect, $text) = @_;
- open my $pipe, '|-', 'putpkgtree' => 'PKGBUILD', $sect, $subsect
- or die "open putpkgtree: $!";
- print $pipe $text;
- close $pipe or exit $? >> 8;
-}
-
-sub putfuncs
-{
- my($funcs) = @_;
- for my $f (keys %$funcs){
- my $sects = $funcs->{$f};
- while(my ($s, $txt) = each %$sects){
- putpkgbuild($f, $s, $txt);
- }
- }
-}
-
-sub startfunc
-{
- my($name) = @_;
- return <<"ENDTXT";
-${name}()
-(
- cd "\$_distdir"
-ENDTXT
-}
-
-sub functxt
-{
- my $fmt = shift;
- $fmt .= "\n" unless($fmt =~ /\n\z/);
- my $txt = sprintf $fmt, @_;
- $txt =~ s/^/ /gm;
- return $txt;
-}
-
-sub main
-{
- if(@_ == 0 || ($_[0] ne 'MM' && $_[0] ne 'MB')){
- print STDERR qq{usage: $PROG ["MM" or "MB"]\n};
- return 1;
- }
-
- my $type = shift;
- my($script, $make, $iargs);
- my @badenv = qw/PERL5LIB/;
- my @exports = qw/PERL_MM_USE_DEFAULT=1/;
- if($type eq 'MM'){
- $script = 'Makefile.PL';
- $make = 'make';
- $iargs = q{INSTALLDIRS=vendor DESTDIR="$pkgdir"};
- push @exports, 'PERL_AUTOINSTALL=--skipdeps';
- push @badenv, 'PERL_MM_OPT';
- }else{
- $script = 'Build.PL';
- $make = './Build';
- $iargs = q{installdirs=vendor destdir="$pkgdir"};
- push @badenv, 'PERL_MB_OPT', 'MODULEBUILDRC=/dev/null';
- }
-
- my %funcs;
- my @fnames = qw/build check package/;
- for my $f (@fnames){
- $funcs{$f}{'beg'} = startfunc($f);
- # Module::Build uses env vars for each stage of Build
- if($type eq 'MB'){
- $funcs{$f}{'beg'} = <<"ENDTXT";
-export @exports
-unset @badenv
-ENDTXT
- }
- }
-
- # ExtUtils::MakeMaker only uses env vars for Makefile.PL
- if($type eq 'MM'){
- $funcs{'build'}{'beg'} .= functxt(<<'ENDTXT', "@exports", "@badenv");
-export %s
-unset %s
-ENDTXT
- }
-
- $funcs{'build'}{'body'} = functxt(<<'ENDTXT', $script, $make);
-/usr/bin/perl %s
-%s
-ENDTXT
-
- $funcs{'check'}{'body'} = functxt("%s test", $make);
-
- $funcs{'package'}{'body'} = functxt(<<'ENDTXT', $make, $iargs);
-%s install %s
-find "$pkgdir" -name .packlist -o -name perllocal.pod -delete
-ENDTXT
-
- for my $f (@fnames){
- $funcs{$f}{'end'} = ")\n";
- }
- putfuncs(\%funcs);
-
- putpkgbuild('suffix', 'body', <<'ENDTXT');
-# Local Variables:
-# mode: shell-script
-# sh-basic-offset: 2
-# End:
-# vim:set ts=2 sw=2 et:
-ENDTXT
-
- return 0;
-}
-
-exit main(@ARGV);
diff --git a/metas/perl.d/scrapecore b/metas/perl.d/scrapecore
deleted file mode 100755
index 25f5c80..0000000
--- a/metas/perl.d/scrapecore
+++ /dev/null
@@ -1,241 +0,0 @@
-#!/usr/bin/env perl
-
-use warnings 'FATAL' => 'all';
-use strict;
-
-package Common;
-
-sub evalver
-{
- my($path, $mod) = @_;
-
- open(my $fh, '<', $path) or die("open $path: $!");
-
- my $m = ($mod
- ? qr/(?:\$${mod}::VERSION|\$VERSION)/
- : qr/\$VERSION/);
-
- while(<$fh>){
- next unless(/\s*$m\s*=\s*.+/);
- chomp;
- my $ver = do { no strict; eval };
- return $ver unless($@);
- warn(qq{$path:$. bad version string "$_"\n});
- }
-
- close($fh);
- return undef;
-}
-
-# ----------------------------------------
-
-package CoreDist;
-use File::Basename qw(basename);
-
-sub modname
-{
- my($dist) = @_;
- $dist =~ s/-+/::/g;
- return $dist;
-}
-
-sub maindistfile
-{
- my($dist, $dir) = @_;
-
- # libpath is the modern style, installing modules under lib/
- # with dirs matching the name components.
- my $libpath = join(q{/}, 'lib', split(/-/, "${dist}.pm"));
-
- # dumbpath is an old style where there's no subdirs and just
- # a .pm file.
- my $dumbpath = $dist;
- $dumbpath =~ s/\A.+-//;
- $dumbpath .= ".pm";
-
- my @paths = ($libpath, $dumbpath);
- # Some modules (with simple names like XSLoader, lib, etc) are
- # generated by Makefile.PL. Search through their generating code.
- push(@paths, "${dist}_pm.PL") if($dist =~ tr/-/-/ == 0);
-
- for my $path (map { "$dir/$_" } @paths){ return $path if(-f $path); }
- return undef;
-}
-
-sub module_ver
-{
- my($dist, $dir) = @_;
-
- my $path = maindistfile($dist, $dir) or return undef;
-
- my $mod = modname($dist);
- my $ver = Common::evalver($path, $mod);
- unless($ver){
- warn("failed to find version in module file $path\n");
- return undef;
- }
-
- return [ $mod, $ver ];
-}
-
-sub changelog_ver
-{
- my($dist, $dir) = @_;
-
- my $path;
- for my $tmp (glob "$dir/{Changes,ChangeLog}"){
- if(-f $tmp){ $path = $tmp; last; }
- }
- return undef unless($path);
-
- my $mod = modname($dist);
- open(my $fh, '<', $path) or die("open: $!");
- while(<$fh>){
- return [ $mod, $1 ] if(/\A\s*(?:$dist[ \t]*)?([0-9._]+)/);
- return [ $mod, $1 ] if(/\A\s*version\s+([0-9._]+)/i);
- }
- close($fh);
-
- return undef;
-}
-
-# for some reason podlators has a VERSION file with perl code in it
-sub verfile_ver
-{
- my ($dist, $dir) = @_;
- my $path = "$dir/VERSION";
- return undef unless(-f $path); # no warning, only podlaters has it
-
- my $v = Common::evalver($path);
- return ($v ? [ modname($dist), $v ] : undef);
-}
-
-# scans a directory full of nicely separated dist. directories.
-sub scan_distroot
-{
- my ($distroot) = @_;
- opendir(my $cpand, "$distroot") or die("failed to open $distroot");
- my @dists = grep { !/^\./ && -d "$distroot/$_" } readdir($cpand);
- closedir($cpand);
-
- my @found;
- for my $dist (@dists){
- my $distdir = "$distroot/$dist";
- my $mv = (module_ver($dist, $distdir)
- || changelog_ver($dist, $distdir)
- || verfile_ver($dist, $distdir));
-
- if($mv){ push @found, $mv; }
- else { warn "failed to find version for $dist\n"; }
- }
- return @found;
-}
-
-sub findmods
-{
- my ($srcdir) = @_;
- return map { scan_distroot($_) } glob "$srcdir/{cpan,dist,ext}";
-}
-
-# ----------------------------------------
-
-package CoreLib;
-
-use File::Find qw();
-use File::stat;
-
-*findfile = *File::Find::find;
-
-sub findmods
-{
- my ($srcdir) = @_;
- my $libdir = "$srcdir/lib/";
- die "failed to find $libdir directory" unless(-d $libdir);
-
- # Find only the module files that have not changed since perl
- # was extracted. We don't want the files perl just recently
- # installed into lib/. We processed those already.
- my @modfiles;
- my $finder = sub {
- return unless(/[.]pm\z/);
- push @modfiles, $_;
- };
- findfile({ 'no_chdir' => 1, 'wanted' => $finder }, $libdir);
-
- # First we have to find what the oldest ctime actually is.
- my $oldest = time;
- @modfiles = map {
- my $modfile = $_;
- my $ctime = (stat $modfile)->ctime;
- $oldest = $ctime if($ctime < $oldest);
- [ $modfile, $ctime ]; # save ctime for later
- } @modfiles;
-
- # Then we filter out any file that was created more than a
- # few seconds after that. Process the rest.
- my @mods;
- for my $modfile (@modfiles){
- my ($mod, $ctime) = @$modfile;
- next if $ctime - $oldest > 5; # ignore newer files
-
- my $path = $mod;
- $mod =~ s{[.]pm\z}{};
- $mod =~ s{\A$libdir}{};
- $mod =~ s{/}{::}g;
-
- my $ver = Common::evalver($path, $mod) || q{};
- push @mods, [ $mod, $ver ];
- }
- return @mods;
-}
-
-# ----------------------------------------
-
-package main;
-
-sub _delmatch
-{
- my ($mvs, $findus) = @_;
- for (@$mvs){
- my ($m) = split;
- delete($findus->{$m});
- }
- return;
-}
-
-sub coreonly
-{
- my %mods = map { @$_ } @_;
- my $var = $ENV{'PKGVAR'} || "$ENV{'HOME'}/.genpkg/var";
- my $path = "$var/cpanmods";
- open(my $if, '<', $path) or die("open $path failed: $!");
-
- my @dists;
- local $/ = qq{\n\n};
- while(<$if>){
- last unless(%mods);
- my ($dist, @dms) = split(/\n/);
- next if(defined delete $mods{$dist});
- _delmatch(\@dms, \%mods);
- }
-
- close($if);
- my @core;
- for my $k (keys %mods) {
- push(@core, [ $k, $mods{$k} ]);
- }
- return sort { $a->[0] cmp $b->[0] } @core;
-}
-
-my $perldir = shift or die("Usage: $0 [path to perl source directory]\n");
-die("$perldir is not a valid directory.\n") unless(-d $perldir);
-
-my @mods =
- (CoreDist::findmods($perldir),
- CoreLib::findmods($perldir));
-
-## Embedded modules without any files...
-push @mods, [qw/ Config 1/];
-
-@mods = coreonly(@mods);
-for my $mv (@mods){ print "@$mv\n"; }