Alien-Libarchive-Installer

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

     use Alien::Libarchive::Installer;
     use Module::Build;
     
     my %build_args;
     
     my $installer = eval { Alien::Libarchive::Installer->system_install };
     if($installer)
     {
       $build_args{extra_compiler_flags} = $installer->cflags,
       $build_args{extra_linker_flags}   = $installer->libs,
     }
     
     my $build = Module::Build->new(%build_args);
     $build->create_build_script;

    Build.PL

     # require 3.0
     use Alien::Libarchive::Installer;
     use Module::Build;
     
     my $installer = eval {
       my $system_installer = Alien::Libarchive::Installer->system_install;
       die "we require 3.0.x or better"
         if $system_installer->version !~ /^([0-9]+)\./ && $1 >= 3;
       $system_installer;
          # reasonably assumes that build_install will never download
          # a version older that 3.0
     } || Alien::Libarchive::Installer->build_install("dir");
     
     my $build = Module::Build->new(
       extra_compiler_flags => $installer->cflags,
       extra_linker_flags   => $installer->libs,
     );
     $build->create_build_script;

    FFI::Raw

     # as an optional dep
     use Alien::Libarchive::Installer;
     use FFI::Raw;
     
     eval {
       my($dll) = Alien::Libarchive::Installer->system_install->dlls;
       FFI::Raw->new($dll, 'archive_read_new', FFI::Raw::ptr);
     };
     if($@)
     {
       # handle it if libarchive is not available
     }

DESCRIPTION

    This distribution contains the logic for finding existing libarchive
    installs, and building new ones. If you do not care much about the
    version of libarchive that you use, and libarchive is not an optional
    requirement, then you are probably more interested in using
    Alien::Libarchive.

    Where Alien::Libarchive::Installer is useful is when you have specific
    version requirements (say you require 3.0.x but 2.7.x will not do), but
    would still like to use the system libarchive if it is available.

CLASS METHODS

    Class methods can be executed without creating an instance of
    Alien::libarchive::Installer, and generally used to query status of
    libarchive availability (either via the system or the internet).
    Methods that discover a system libarchive or build a one from source
    code on the Internet will generally return an instance of
    Alien::Libarchive::Installer which can be queried to retrieve the
    settings needed to interact with libarchive via XS or FFI::Raw.

 versions_available

     my @versions = Alien::Libarchive::Installer->versions_available;
     my $latest_version = $versions[-1];

    Return the list of versions of libarchive available on the Internet.
    Will throw an exception if the libarchive.org website is unreachable.
    Versions will be sorted from oldest (smallest) to newest (largest).

 fetch

     my($location, $version) = Alien::Libarchive::Installer->fetch(%options);
     my $location = Alien::Libarchive::Installer->fetch(%options);

    NOTE: using this method may (and probably does) require modules
    returned by the build_requires method.

    Download libarchive source from the internet. By default it will
    download the latest version to a temporary directory which will be
    removed when Perl exits. Will throw an exception on failure. Options
    include:

    dir

      Directory to download to

    version

      Version to download

 build_requires

     my $prereqs = Alien::Libarchive::Installer->build_requires;
     while(my($module, $version) = each %$prereqs)
     {
       ...
     }

    Returns a hash reference of the build requirements. The keys are the
    module names and the values are the versions.

    The requirements may be different depending on your platform.

 system_requires

    This is like build_requires, except it is used when using the
    libarchive that comes with the operating system.



( run in 0.368 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )