Alien-Base
view release on metacpan or search on metacpan
lib/Alien/Base.pm view on Meta::CPAN
my $manual = delete $all{_manual};
if (keys %all) {
return values %all;
} else {
return $manual;
}
}
=head2 config
my $value = Alien::MyLibrary->config($key);
Returns the configuration data as determined during the install
of L<Alien::MyLibrary>. For the appropriate config keys, see
L<Alien::Base::ModuleBuild::API#CONFIG-DATA>.
This is not typically used by L<Alien::Base> and L<alienfile>,
but a compatible interface will be provided.
=cut
# helper method to call Alien::MyLib::ConfigData->config(@_)
sub config {
my $class = shift;
$class = blessed $class || $class;
if(my $ab_config = $class->runtime_prop)
{
my $key = shift;
return $ab_config->{legacy}->{$key};
}
my $config = $class . '::ConfigData';
eval "require $config";
warn $@ if $@;
return $config->config(@_);
}
# helper method to split flags based on the OS
sub split_flags {
my ($class, $line) = @_;
if( $^O eq 'MSWin32' ) {
$class->split_flags_windows($line);
} else {
# $os eq 'Unix'
$class->split_flags_unix($line);
}
}
sub split_flags_unix {
my ($class, $line) = @_;
shellwords($line);
}
sub split_flags_windows {
# NOTE a better approach would be to write a function that understands cmd.exe metacharacters.
my ($class, $line) = @_;
# Double the backslashes so that when they are unescaped by shellwords(),
# they become a single backslash. This should be fine on Windows since
# backslashes are not used to escape metacharacters in cmd.exe.
$line =~ s,\\,\\\\,g;
shellwords($line);
}
=head2 dynamic_libs
my @dlls = Alien::MyLibrary->dynamic_libs;
my($dll) = Alien::MyLibrary->dynamic_libs;
Returns a list of the dynamic library or shared object files for the
alien software.
=cut
sub dynamic_libs {
my ($class) = @_;
require FFI::CheckLib;
if($class->install_type('system')) {
my $name = $class->config('ffi_name');
unless(defined $name) {
$name = $class->config('name');
# strip leading lib from things like libarchive or libffi
$name =~ s/^lib//;
# strip trailing version numbers
$name =~ s/-[0-9\.]+$//;
}
return FFI::CheckLib::find_lib(lib => $name);
} else {
my $dir = $class->dist_dir;
my $dynamic = File::Spec->catfile($class->dist_dir, 'dynamic');
if(-d $dynamic)
{
return FFI::CheckLib::find_lib(
lib => '*',
libpath => $dynamic,
systempath => [],
);
}
return FFI::CheckLib::find_lib(
lib => '*',
libpath => $dir,
systempath => [],
recursive => 1,
);
}
}
=head2 bin_dir
my(@dir) = Alien::MyLibrary->bin_dir
Returns a list of directories with executables in them. For a C<system>
( run in 0.615 second using v1.01-cache-2.11-cpan-fa01517f264 )