Alien-Build
view release on metacpan or search on metacpan
example/bzip2.alienfile view on Meta::CPAN
# which we need to link into a Perl XS .so file.
# We also use CC=$Config{cc} to make sure that we use the
# same compiler as was used to build Perl.
build [
[ '%{make}', 'all', "CC=%{perl.config.cc}", "CFLAGS=%{perl.config.cccdlflags} %{perl.config.optimize}", ],
[ '%{make}', 'install', 'PREFIX=%{.install.prefix}', ],
# we can use a code ref here to determine the version number of
# bzip2 from the directory that is extracted from the tarball.
# Usually this is something like bzip2-1.0.6 and we just parse
# off the bit that looks like a version number.
sub {
my($build) = @_;
my($version) = path(".")->absolute->basename =~ /([0-9\.]+)$/;
$build->runtime_prop->{version} = $version;
},
];
# This package doesn't build a dynamic library by default, but if
# it did this would make sure that it wasn't used with XS.
# (See Alien::Build::Manual::AlienAuthor for details).
example/gmake.alienfile view on Meta::CPAN
# Because we use Capture::Tiny in
# the alienfile itself, we need to register it
# as a configure time require (that is it needs
# to be installed before we even attempt to load
# this alienfile).
requires 'Capture::Tiny';
};
# probe for GNU Make by trying the usual names for
# it. Because 'make' could be some other make, we
# try running it with --version and see if it looks
# like the GNU version.
plugin 'Probe::CommandLine' => (
command => $_,
args => ['--version'],
match => qr/GNU Make/,
) for qw( gmake make );
share {
# items in the share block relate to building the package
lib/Alien/Build/Interpolate/Default.pm view on Meta::CPAN
}
my $out = capture { system $perl_make, '--version' };
if( $out =~ /GNU make/i || $out =~ /Microsoft \(R\) Program Maintenance/ )
{
return $my_make = $perl_make;
}
}
# if we see something that looks like it might be gmake, use that.
foreach my $try (qw( gmake mingw32-make ))
{
return $my_make = $try if which $try;
}
if( which 'make' )
{
my $out = capture { system 'make', '--version' };
if( $out =~ /GNU make/i || $out =~ /Microsoft \(R\) Program Maintenance/ )
{
return $my_make = 'make';
}
}
# if we see something that looks like it might be nmake, use that.
foreach my $try (qw( nmake ))
{
return $my_make = $try if which $try;
}
$my_make = $perl_make;
});
}
else
{
lib/Alien/Build/Manual/AlienAuthor.pod view on Meta::CPAN
finished_installing: 1
install_type: share
original_prefix: /tmp/P22WEXj80r
version: 1.2.4
libs: '-L/tmp/P22WEXj80r/lib -lfoo '
libs_static: '-L/tmp/P22WEXj80r/lib -lfoo '
prefix: /tmp/P22WEXj80r
version: 1.2.4
You can also use the C<--before> and C<--after> options to take a peek
at what the build environment looks like at different stages as well,
which can sometimes be useful:
% af install --dry-run --type=share --before build bash
Alien::Build::Plugin::Core::Download> decoding html
Alien::Build::Plugin::Core::Download> candidate *https://www.libfoo.org/download/libfoo-1.2.4.tar.gz
Alien::Build::Plugin::Core::Download> candidate https://www.libfoo.org/download/libfoo-1.2.3.tar.gz
Alien::Build::Plugin::Core::Download> candidate https://www.libfoo.org/download/libfoo-1.2.2.tar.gz
Alien::Build::Plugin::Core::Download> candidate https://www.libfoo.org/download/libfoo-1.2.1.tar.gz
Alien::Build::Plugin::Core::Download> candidate https://www.libfoo.org/download/libfoo-1.2.0.tar.gz
Alien::Build::Plugin::Core::Download> candidate https://www.libfoo.org/download/libfoo-1.1.9.tar.gz
lib/Alien/Build/Manual/FAQ.pod view on Meta::CPAN
after 'gather' => sub {
my($build) = @_;
if($^O eq 'MSWin32') {
$build->runtime_prop->{libs} .= " -lpsapi";
}
};
};
=head2 "cannot open shared object file" trying to load XS
The error looks something like this:
t/acme_alien_dontpanic2.t ....... 1/?
# Failed test 'xs'
# at t/acme_alien_dontpanic2.t line 13.
# XSLoader failed
# Can't load '/home/cip/.cpanm/work/1581635869.456/Acme-Alien-DontPanic2-2.0401/_alien/tmp/test-alien-lyiQNX/auto/Test/Alien/XS/Mod0/Mod0.so' for module Test::Alien::XS::Mod0: libdontpanic.so.0: cannot open shared object file: No such file or di...
# at /home/cip/perl5/lib/perl5/Test/Alien.pm line 414.
# Compilation failed in require at /home/cip/perl5/lib/perl5/Test/Alien.pm line 414.
# BEGIN failed--compilation aborted at /home/cip/perl5/lib/perl5/Test/Alien.pm line 414.
t/acme_alien_dontpanic2.t ....... Dubious, test returned 1 (wstat 256, 0x100)
lib/Alien/Build/Plugin/Download/Negotiate.pm view on Meta::CPAN
}
else
{
Carp::croak "url is a required property unless you use the start_url directive";
}
}
if($self->url =~ /^http.*github.com.*releases$/)
{
Alien::Build->log('!! WARNING !! WARNING !!');
Alien::Build->log('!! WARNING !! It looks like this alien is using the regular download negotiator');
Alien::Build->log('plugin on a GitHub release page. This will typically not work due to changes');
Alien::Build->log('in the way GitHub release page works now. The Alien should instead be updated');
Alien::Build->log('to use the Download::GitHub plugin, which uses the GitHub API to find available');
Alien::Build->log('releases. See: https://metacpan.org/pod/Alien::Build::Plugin::Download::GitHub');
Alien::Build->log('!! WARNING !! WARNING !!');
}
$meta->add_requires('share' => 'Alien::Build::Plugin::Download::Negotiate' => '0.61')
if $self->passive;
lib/Test/Alien/Build.pm view on Meta::CPAN
}
my $alien_rc_root;
sub alien_rc
{
my($code) = @_;
croak "passed in undef rc" unless defined $code;
croak "looks like you have already defined a rc.pl file" if $ENV{ALIEN_BUILD_RC} ne '-';
my(undef, $filename, $line) = caller;
my $code2 = "use strict; use warnings;\n" .
'# line ' . $line . ' "' . path($filename)->absolute . "\n$code";
$alien_rc_root ||= Alien::Build::Temp->newdir;
my $rc = path($alien_rc_root)->child('rc.pl');
$rc->spew_utf8($code2);
$ENV{ALIEN_BUILD_RC} = "$rc";
t/alien_build_plugin_pkgconfig_commandline.t view on Meta::CPAN
return unless $type eq 'system';
note capture_merged { $build->build; () };
if($^O eq 'MSWin32')
{
if($build->runtime_prop->{cflags} =~ m/-I(.*)\/include\/foo/
&& $1 ne '/test')
{
$prefix = $1;
ok(-f "$prefix/lib/pkgconfig/foo.pc", "relocation looks okay");
note "prefix = $prefix\n";
note "-f $prefix/lib/pkgconfig/foo.pc";
}
}
is(
$build->runtime_prop,
hash {
#field cflags => match qr/-fPIC/;
field cflags => match qr/-I\Q$prefix\E\/include\/foo/;
( run in 0.507 second using v1.01-cache-2.11-cpan-64827b87656 )