App-BS
view release on metacpan or search on metacpan
script/pkgbase.pl view on Meta::CPAN
#!/usr/bin/env perl
use utf8;
use v5.40;
use lib 'lib';
use IPC::Run3;
use Const::Fast;
use Data::Dumper;
use List::Util 'uniq';
use BS::Common;
use BS::Ext::pacman;
use BS::Ext::expac;
our $DEBUG => $ENV{DEBUG} // 0;
our $SHORTCIRCUIT => $ENV{SHORTCIRCUIT} // 0;
const our $pkgnamebase_re => qr/[:a-zA-Z0-9\@_\+]{1}[a-zA-Z0-9\@_\+\.\+]+/;
# Prepends pkgname
const our $repo_re => qr/(?:([\/])\/)?/;
const our $type_re => qr/(?:(lib)\:)?/;
const our %sep_re => ( ver => qr/(\=|[\<\>]\=?)/, dssc => qr/(:\s*(.+))?/ );
const our $not_pkgver_rew => quotemeta(':/-') . '\s';
const our $fpath_re =>
qr/^(?:\/)?([a-zA-Z0-9\@_\+\.\+]+\/)?([a-zA-Z0-9\@_\+\.\+]+)$/;
# Apppends pkgname (cmpop, ver, description)
our @pkg = ();
our %outbuffers = ();
sub expac_parse_line ( $line, %opts ) {
$opts{on_parse_success}->( $line, %opts );
}
sub handle_run3_out ( $in, %opts ) {
chomp $in;
return undef unless $in;
push $opts{out}->@*, expac_parse_line( $in, %opts );
}
sub parse_pkgstr ( $pkgstr, %opts ) {
# These are newer/more general versions of constants above/in other
# modules (currently, at least)
const my $pkgstr_name_ptn => qr'[a-zA-Z0-9\@_\+]{1}[a-zA-Z0-9\@_\+\.\-]+';
const my $pkgstr_name_re =>
qr/^(lib\:)?($pkgstr_name_ptn(\.so(?:\.[0-9]+)?)|$pkgstr_name_ptn)/;
const my $pkgver_forbidden => quotemeta(':/-') . '\s';
#const my $pkgver_delim => qr'(?:(\=|[\<\>]\=?)';
const my @pkgstr_re_arr => (
$pkgstr_name_re, '(?:(\=|[\<\>]\=?)',
"([^$pkgver_forbidden]+))?", '|(?:(:)\s*(.+))?'
);
const my $pkgstr_re_str => join '', @pkgstr_re_arr;
const my $pkgstr_re => qr/@pkgstr_re_arr/; # Not working...
const my $_pkgstr_re => qr/$pkgstr_re_str/;
( run in 0.726 second using v1.01-cache-2.11-cpan-39bf76dae61 )