diff --git a/Makefile.PL b/Makefile.PL index 42090a6..28e1b35 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -13,13 +13,17 @@ my %WriteMakefileArgs = ( "CONFIGURE_REQUIRES" => { "Alien::Build" => "2.21", "Alien::Build::MM" => "2.21", - "ExtUtils::MakeMaker" => "6.52" + "ExtUtils::MakeMaker" => "6.52", + "Path::Tiny" => 0, + "Alien::Build::Plugin::Gather::Dino" => 0, }, "DISTNAME" => "Alien-GSL", "LICENSE" => "perl", "NAME" => "Alien::GSL", "PREREQ_PM" => { "Alien::Base" => "2.21", + "Role::Tiny" => 0, + "Alien::Role::Dino" => 0, }, "TEST_REQUIRES" => { "ExtUtils::MakeMaker" => "6.52", @@ -27,6 +31,10 @@ my %WriteMakefileArgs = ( "Test::Alien" => 0, "Test::Alien::Diag" => 0, }, + "BUILD_REQUIRES" => { + "Path::Tiny" => 0, + "Alien::Build::Plugin::Gather::Dino" => 0, + }, "VERSION_FROM" => "lib/Alien/GSL.pm", "test" => { "TESTS" => "t/*.t" diff --git a/alienfile b/alienfile index 4dbfbc6..406bea2 100644 --- a/alienfile +++ b/alienfile @@ -1,7 +1,12 @@ use alienfile; +use Path::Tiny qw( path ); plugin 'PkgConfig' => (pkg_name => 'gsl'); +configure { + requires 'Path::Tiny'; +}; + share { start_url 'https://ftp.gnu.org/gnu/gsl'; plugin Download => ( @@ -11,5 +16,20 @@ share { ); plugin Extract => 'tar.gz'; plugin 'Build::Autoconf'; + + build [ + '%{configure} --enable-shared --enable-static', + '%{make}', + '%{make} install', + ]; + plugin 'Gather::IsolateDynamic'; + plugin 'Gather::Dino'; + + after 'gather' => sub { + my($build) = @_; + my $pc = path("lib/pkgconfig/gsl.pc")->slurp; + $pc =~ s/\/lib/\/dynamic/g; + path("lib/pkgconfig/gsl-dynamic.pc")->spew($pc); + }; }; diff --git a/lib/Alien/GSL.pm b/lib/Alien/GSL.pm index eec4e03..e8e6596 100644 --- a/lib/Alien/GSL.pm +++ b/lib/Alien/GSL.pm @@ -8,6 +8,23 @@ our $VERSION = '1.07'; use base 'Alien::Base'; +sub alt +{ + my($self, $name) = @_; + + return $self if $self->install_type eq 'system'; + + my $new = $self->SUPER::alt($name); + + if($name eq 'gsl-dynamic') + { + require Role::Tiny; + Role::Tiny->apply_roles_to_object($new, 'Alien::Role::Dino'); + } + + $new; +} + 1; =head1 NAME