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 )