Alien-YARA

 view release on metacpan or  search on metacpan

lib/Alien/YARA.pm  view on Meta::CPAN

package Alien::YARA;

use strict;
use warnings;
use version;

our $VERSION   = qv('v0.0.6');
our $AUTHORITY = 'cpan:MANWAR';

use parent 'Alien::Base';

=encoding utf-8

=head1 NAME

Alien::YARA - Find or download and install the YARA malware analysis library

=head1 VERSION

Version v0.0.6

=head1 SYNOPSIS

In your C<Makefile.PL> or C<Build.PL>:

 use Alien::Build::MM;
 my $abmm = Alien::Build::MM->new;

 WriteMakefile($abmm->mm_args(
     ...
     PREREQ_PM => {
         'Alien::YARA' => '0.01',
     },
 ));

In your Perl module code:

 use Alien::YARA;
 use FFI::Platypus;

 my $ffi = FFI::Platypus->new( api => 2 );
 $ffi->lib( Alien::YARA->dynamic_libs );

 # Now attach your C functions
 $ffi->attach( 'yr_initialize' => [] => 'int' );

=head1 DESCRIPTION

This module acts as an encapsulation layer for the YARA C library (C<libyara>).
It checks your host system to see if YARA is already installed via native package
management (like C<apt>, C<homebrew>, or C<pkgconf>). If it cannot find a suitable
global version, it automatically downloads the official YARA source code,
compiles it, and isolates the binaries locally within your Perl library tree.

This makes bundling dependencies for FFI-based modules like L<YaraFFI> perfectly
cross-platform across Linux, macOS, and Windows.

=head1 METHODS

This class inherits all methods from L<Alien::Base>. The most critical ones for FFI usage are:

=head2 dist_dir

 my $dir = Alien::YARA->dist_dir;

Returns the local installation directory if a C<share> install was performed.

=head2 dynamic_libs

 my @libs = Alien::YARA->dynamic_libs;
 my $lib  = $libs[0];

Returns a list of paths to the shared objects or dynamic libraries (C<.so>, C<.dylib>, C<.dll>).
Pass this directly into your L<FFI::Platypus> instantiation.

=head2 cflags

 my $cflags = Alien::YARA->cflags;

Returns the compiler flags needed to compile an XS module against C<libyara>.

=head2 libs

 my $libs = Alien::YARA->libs;

Returns the linker flags needed to link an XS module against C<libyara>.

=head1 SEE ALSO

=over 4

=item * L<YaraFFI> - The primary FFI interface built on top of this module.

=item * L<Alien::Base> - The base framework powering this installer wrapper.

=item * L<Alien::Build> - The underlying tools used to configure, download, and build YARA.

=item * L<https://github.com/VirusTotal/yara> - The official YARA open-source repository.

=back

=head1 AUTHOR

Mohammad Sajid Anwar, C<< <mohammad.anwar at yahoo.com> >>



( run in 3.047 seconds using v1.01-cache-2.11-cpan-e1769b4cff6 )