App-BS
view release on metacpan or search on metacpan
lib/BS/Package/Meta.pm view on Meta::CPAN
use Object::Pad ':experimental(:all)';
package BS::Package::Meta;
role BS::Package::Meta : does(BS::Common) : does(BS::alpm);
use utf8;
use v5.40;
use Carp;
use Const::Fast;
use Const::Fast::Exporter;
use List::Util qw(any);
use Data::Printer;
use Struct::Dumb;
use Syntax::Keyword::MultiSub;
const our $VALID_PKG_RE_CCLASS_START => "a-zA-Z0-9\@_\+";
const our $VALID_PKG_RE_NB => (
qr/[$VALID_PKG_RE_CCLASS_START]{1}[$VALID_PKG_RE_CCLASS_START\.\-]+(\.so)
|[$VALID_PKG_RE_CCLASS_START]{1}[$VALID_PKG_RE_CCLASS_START\.\-]+/
);
struct PkgDepends => [qw(make optional check depends)];
struct PkgChecksums => [qw(ck md5 sha1 sha256 sha512 b2)];
#field $pkgname : param(name);
#field $name = [ ref $pkgname eq 'ARRAY' ? $pkgname->@* : $pkgname ];
#field $name{ ref $pkgname eq 'ARRAY' ? $pkgname : [$pkgname] };
#field $base : param { $pkgname unless defined ref $pkgname };
field $depends : param = undef;
field $pkgver : param = undef;
field $pkgrel : param = undef;
field $pkgdesc : param = undef;
field $url : param = undef;
field $changelog : param = undef;
field @license;
field @source;
field @validpgpkeys;
field @noextract;
field @groups;
field @arch;
field @backup;
field @conflicts;
field @replaces;
field @provides;
field $options;
field $checksums;
#field $srcinfo : param;
field $srcinfo_path;
ADJUSTPARAMS($params) {
#$self->_srcinfo_unpack_into
}
method resolve_base : common ($line, %args) {
const my $PACINFO_SO_PREFIX => qr/(?:lib\:)?/;
const my $DEP_SO_RE => qr/\.so/;
const my $VALID_DEPIDEN_RE =>
qr/$PACINFO_SO_PREFIX($VALID_PKG_RE_NB)(?:$DEP_SO_RE)?/;
const my $DEP_ATTRSEP_RE => qr/(?:\=)|(?:[\<\>]\=?)|(?:(?:\:))|(?:\.)/;
const my $DEP_ATTR_RE =>
qr/^$VALID_DEPIDEN_RE(?:\s*($DEP_ATTRSEP_RE)\s*(.+))?\n?$/;
my ( $depname, $soext, $sep, $attr ) = $line =~ $DEP_ATTR_RE;
my %dep_pkgargs = ();
$dep_pkgargs{name} = $depname;
if ($sep) {
if ( $sep ne ':' ) {
$dep_pkgargs{version} = $attr;
$dep_pkgargs{cmp_op} = $sep;
$dep_pkgargs{file} = $depname if $soext;
}
elsif ( $sep eq ':' ) { # Optional dependency most likely
# Will have parsed that out elsewhere
$dep_pkgargs{description} = $attr;
$dep_pkgargs{name} = $depname;
}
}
if ($soext) {
$dep_pkgargs{file} //= $depname;
my $res = BS::Ext::pacman->file_query($depname);
my $match = $res->out->[-1];
chomp $match;
( $dep_pkgargs{repo}, $dep_pkgargs{name} ) = ( split /\//, $match );
}
if ( $args{resolve_base} // $ENV{RESOLVE_BASE} // 1 ) {
try {
$dep_pkgargs{base} //= BS::Ext::pacinfo->pkgbase(
$dep_pkgargs{name},
resolve_deps => 0,
no_dupes => 1
);
$dep_pkgargs{base} = $dep_pkgargs{base}->out if $dep_pkgargs{base};
( run in 0.740 second using v1.01-cache-2.11-cpan-d8267643d1d )