Archive-Libarchive

 view release on metacpan or  search on metacpan

lib/Archive/Libarchive.pm  view on Meta::CPAN

package Archive::Libarchive;

use strict;
use warnings;
use 5.020;
use experimental qw( signatures );
use Archive::Libarchive::Lib;
use Archive::Libarchive::ArchiveRead;
use Archive::Libarchive::ArchiveWrite;
use Archive::Libarchive::Match;
use Archive::Libarchive::DiskRead;
use Archive::Libarchive::DiskWrite;
use Archive::Libarchive::Entry;
use Archive::Libarchive::EntryLinkResolver;
use parent qw( Exporter );

# ABSTRACT: Modern Perl bindings to libarchive
our $VERSION = '0.10'; # VERSION


my $ffi = Archive::Libarchive::Lib->ffi;

$ffi->mangler(undef);

$ffi->attach( archive_bzlib_version =>   [] => 'string' );
$ffi->attach( archive_liblz4_version =>  [] => 'string' );
$ffi->attach( archive_liblzma_version => [] => 'string' );
$ffi->attach( archive_version_details => [] => 'string' );
$ffi->attach( archive_version_number =>  [] => 'int'    );
$ffi->attach( archive_version_string =>  [] => 'string' );
$ffi->attach( archive_zlib_version =>    [] => 'string' );
$ffi->ignore_not_found(1);
$ffi->attach( archive_cng_version => [] => 'string' );
$ffi->attach( archive_commoncrypto_version => [] => 'string' );
$ffi->attach( archive_libacl_version => [] => 'string' );
$ffi->attach( archive_libattr_version => [] => 'string' );
$ffi->attach( archive_libbsdxml_version => [] => 'string' );
$ffi->attach( archive_libexpat_version => [] => 'string' );
$ffi->attach( archive_libiconv_version => [] => 'string' );
$ffi->attach( archive_liblzo2_version => [] => 'string' );
$ffi->attach( archive_libmd_version => [] => 'string' );
$ffi->attach( archive_libpcre2_version => [] => 'string' );
$ffi->attach( archive_libpcre_version => [] => 'string' );
$ffi->attach( archive_librichacl_version => [] => 'string' );
$ffi->attach( archive_libxml2_version => [] => 'string' );
$ffi->attach( archive_mbedtls_version => [] => 'string' );
$ffi->attach( archive_nettle_version => [] => 'string' );
$ffi->attach( archive_openssl_version => [] => 'string' );
$ffi->attach( archive_libzstd_version => [] => 'string' );
$ffi->attach( archive_wincrypt_version => [] => 'string' );
$ffi->ignore_not_found(0);


sub versions ($class)
{
  my %v = (
    perl => $],
  );

  foreach my $symbol (keys %Archive::Libarchive::)
  {
    next if $symbol eq 'archive_version_number';
    if($symbol =~ /^archive_(.*)_version\z/)
    {
      my $name = $1;
      my $version = __PACKAGE__->$symbol;
      $v{$name} = $version // 'undef';
    }
  }

  foreach my $mod (qw( FFI::Platypus Archive::Libarchive FFI::CheckLib Alien::Libarchive3 ))
  {
    my $version = $mod->VERSION;
    $v{$mod} = $version if defined $version;
  }

  %v;
}


require Archive::Libarchive::Lib::Constants unless $Archive::Libarchive::no_gen;

our @EXPORT_OK = grep /^(archive|ARCHIVE|AE)_/, keys %Archive::Libarchive::;
our %EXPORT_TAGS = (
  all   => \@EXPORT_OK,
  const => [grep /^(ARCHIVE|AE)_/, @EXPORT_OK],
  func  => [grep /^archive_/, @EXPORT_OK],
);

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Archive::Libarchive - Modern Perl bindings to libarchive

=head1 VERSION

version 0.10

=head1 SYNOPSIS

 use 5.020;
 use Archive::Libarchive qw( :const );
 
 my $r = Archive::Libarchive::ArchiveRead->new;



( run in 2.052 seconds using v1.01-cache-2.11-cpan-302cb4679cc )