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.09'; # 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_libzstd_version => [] => 'string' );
$ffi->ignore_not_found(0);


sub versions ($class)
{
  my %v = (
    bzlib      => archive_bzlib_version()   // 'undef',
    liblz4     => archive_liblz4_version()  // 'undef',
    liblzma    => archive_liblzma_version() // 'undef',
    libarchive => archive_version_string()  // 'undef',
    zlib       => archive_zlib_version()    // 'undef',
    perl       => $],
  );

  if(__PACKAGE__->can('archive_libzstd_version'))
  {
    $v{libzstd} = archive_libzstd_version();
  }
  else
  {
    $v{libzstd} = 'undef';
  }

  foreach my $mod (qw( FFI::Platypus Archive::Libarchive FFI::CheckLib Alien::Libarchive3 Foo ))
  {
    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.09

=head1 SYNOPSIS

 use 5.020;



( run in 3.199 seconds using v1.01-cache-2.11-cpan-2398b32b56e )