Alien-Role-Alt

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

     use Role::Tiny::With qw( with );
     
     with 'Alien::Role::Alt';
     
     1;

    Then you can use it:

     use Alien::Libfoo;
     
     my $cflags = Alien::Libfoo->alt('foo1')->cflags;
     my $libs   = Alien::Libfoo->alt('foo1')->libs;

DESCRIPTION

    NOTE: The capabilities that used to be provided by this role have been
    moved into Alien::Base's core class. This is an empty role provided for
    compatibility only. New code should not be using this class.

    Some packages come with multiple libraries, and multiple .pc files to
    use with them. This Role::Tiny role can be used with Alien::Base to

corpus/lib/auto/share/dist/Alien-libfoo1/_alien/alien.json  view on Meta::CPAN

   "libs" : "-lfoo ",
   "install_type" : "system",
   "version" : "1.2.3",
   "legacy" : {
      "finished_installing" : 1,
      "name" : "foo",
      "version" : "1.2.3",
      "original_prefix" : "/foo/bar/baz/auto/share/dist/Alien-libfoo1",
      "install_type" : "system"
   },
   "cflags_static" : "-DFOO=1 -DFOO_STATIC=1 ",
   "cflags" : "-DFOO=1 ",
   "libs_static" : "-lfoo -lbar -lbaz ",
   "prefix" : "/foo/bar/baz/auto/share/dist/Alien-libfoo1",
   "arbitrary" : "one"
}

corpus/lib/auto/share/dist/Alien-libfoo2/_alien/alien.json  view on Meta::CPAN

   "libs" : "-L/foo/bar/baz/auto/share/dist/Alien-libfoo1/lib -lfoo ",
   "install_type" : "share",
   "version" : "2.3.4",
   "legacy" : {
      "finished_installing" : 1,
      "name" : "foo",
      "version" : "2.3.4",
      "original_prefix" : "/foo/bar/baz/auto/share/dist/Alien-libfoo1",
      "install_type" : "share"
   },
   "cflags_static" : "-I/foo/bar/baz/auto/share/dist/Alien-libfoo1/include -DFOO=1 -DFOO_STATIC=1 ",
   "cflags" : "-I/foo/bar/baz/auto/share/dist/Alien-libfoo1/include -DFOO=1 ",
   "libs_static" : "-L/foo/bar/baz/auto/share/dist/Alien-libfoo1/lib -lfoo -lbar -lbaz ",
   "prefix" : "/foo/bar/baz/auto/share/dist/Alien-libfoo1",
   "arbitrary" : "two",
   "alt" : {
     "foo1" : {
       "libs" : "-L/foo/bar/baz/auto/share/dist/Alien-libfoo1/lib -lfoo ",
       "version" : "2.3.4",
       "cflags_static" : "-I/foo/bar/baz/auto/share/dist/Alien-libfoo1/include -DFOO=1 -DFOO_STATIC=1 ",
       "cflags" : "-I/foo/bar/baz/auto/share/dist/Alien-libfoo1/include -DFOO=1 ",
       "libs_static" : "-L/foo/bar/baz/auto/share/dist/Alien-libfoo1/lib -lfoo -lbar -lbaz "
     },
     "foo2" : {
       "libs" : "-L/foo/bar/baz/auto/share/dist/Alien-libfoo1/lib -lfoo1 ",
       "version" : "2.3.5",
       "cflags_static" : "-I/foo/bar/baz/auto/share/dist/Alien-libfoo1/include -DFOO=2 -DFOO_STATIC=2 ",
       "cflags" : "-I/foo/bar/baz/auto/share/dist/Alien-libfoo1/include -DFOO=2 ",
       "libs_static" : "-L/foo/bar/baz/auto/share/dist/Alien-libfoo1/lib -lfoo1 -lbar -lbaz ",
       "arbitrary" : "four"
     },
     "foo3" : {
       "arbitrary" : "five"
     }
   }
}

lib/Alien/Role/Alt.pm  view on Meta::CPAN

 use Role::Tiny::With qw( with );
 
 with 'Alien::Role::Alt';
 
 1;

Then you can use it:

 use Alien::Libfoo;
 
 my $cflags = Alien::Libfoo->alt('foo1')->cflags;
 my $libs   = Alien::Libfoo->alt('foo1')->libs;

=head1 DESCRIPTION

B<NOTE>: The capabilities that used to be provided by this role have been
moved into L<Alien::Base>'s core class.  This is an empty role provided
for compatibility only.  New code should not be using this class.

Some packages come with multiple libraries, and multiple C<.pc> files to
use with them.  This L<Role::Tiny> role can be used with L<Alien::Base>

t/alien_role_alt.t  view on Meta::CPAN

diag '* Please use Alien::Build instead.          *';
diag '*********************************************';
diag '';
diag '';

subtest 'test a share install' => sub {

  alien_ok 'Alien::libfoo2';

  subtest 'default' => sub {
    like( Alien::libfoo2->cflags,        qr{-I.*Alien-libfoo2/include -DFOO=1} );
    like( Alien::libfoo2->libs,          qr{-L.*Alien-libfoo2/lib -lfoo} );
    like( Alien::libfoo2->cflags_static, qr{-I.*Alien-libfoo2/include -DFOO=1 -DFOO_STATIC=1} );
    like( Alien::libfoo2->libs_static,   qr{-L.*Alien-libfoo2/lib -lfoo -lbar -lbaz} );
    is( Alien::libfoo2->version,         '2.3.4' );
    is( Alien::libfoo2->runtime_prop->{arbitrary}, 'two');
  };
  
  subtest 'foo1' => sub {
  
    my $alien = Alien::libfoo2->alt('foo1');
    
    isa_ok $alien, 'Alien::Base';
    isa_ok $alien, 'Alien::libfoo2';

    like( $alien->cflags,        qr{-I.*Alien-libfoo2/include -DFOO=1} );
    like( $alien->libs,          qr{-L.*Alien-libfoo2/lib -lfoo} );
    like( $alien->cflags_static, qr{-I.*Alien-libfoo2/include -DFOO=1 -DFOO_STATIC=1} );
    like( $alien->libs_static,   qr{-L.*Alien-libfoo2/lib -lfoo -lbar -lbaz} );
    is( $alien->version,         '2.3.4' );
    is( $alien->runtime_prop->{arbitrary}, 'two');
  
  };
  
  subtest 'foo2' => sub {

    my $alien = Alien::libfoo2->alt('foo2');
    
    isa_ok $alien, 'Alien::Base';
    isa_ok $alien, 'Alien::libfoo2';

    like( $alien->cflags,        qr{-I.*Alien-libfoo2/include -DFOO=2} );
    like( $alien->libs,          qr{-L.*Alien-libfoo2/lib -lfoo1} );
    like( $alien->cflags_static, qr{-I.*Alien-libfoo2/include -DFOO=2 -DFOO_STATIC=2} );
    like( $alien->libs_static,   qr{-L.*Alien-libfoo2/lib -lfoo1 -lbar -lbaz} );
    is( $alien->version,         '2.3.5' );
    is( $alien->runtime_prop->{arbitrary}, 'four');

  };
  
  subtest 'foo3' => sub {
  
    my $alien = Alien::libfoo2->alt('foo3');
    
    isa_ok $alien, 'Alien::Base';
    isa_ok $alien, 'Alien::libfoo2';

    like( $alien->cflags,        qr{-I.*Alien-libfoo2/include -DFOO=1} );
    like( $alien->libs,          qr{-L.*Alien-libfoo2/lib -lfoo} );
    like( $alien->cflags_static, qr{-I.*Alien-libfoo2/include -DFOO=1 -DFOO_STATIC=1} );
    like( $alien->libs_static,   qr{-L.*Alien-libfoo2/lib -lfoo -lbar -lbaz} );
    is( $alien->version,         '2.3.4' );
    is( $alien->runtime_prop->{arbitrary}, 'five');
  
  };
  
  subtest 'foo4' => sub {
  
    eval { Alien::libfoo2->alt('foo4') };
    like $@, qr/no such alt: foo4/;
  
  };
  
  subtest 'default -> foo2 -> foo1' => sub {
  
    my $alien = Alien::libfoo2->alt('foo2')->alt('foo1');
  
    isa_ok $alien, 'Alien::Base';
    isa_ok $alien, 'Alien::libfoo2';

    like( $alien->cflags,        qr{-I.*Alien-libfoo2/include -DFOO=1} );
    like( $alien->libs,          qr{-L.*Alien-libfoo2/lib -lfoo} );
    like( $alien->cflags_static, qr{-I.*Alien-libfoo2/include -DFOO=1 -DFOO_STATIC=1} );
    like( $alien->libs_static,   qr{-L.*Alien-libfoo2/lib -lfoo -lbar -lbaz} );
    is( $alien->version,         '2.3.4' );
    is( $alien->runtime_prop->{arbitrary}, 'two');

  };
  
};

done_testing



( run in 0.255 second using v1.01-cache-2.11-cpan-94b05bcf43c )