Alien-Chipmunk
view release on metacpan or search on metacpan
use strict;
use warnings;
use lib 'inc';
use My::ModuleBuild;
use Config;
my $cflags = '';
my $libs
= join( ' ', '-lchipmunk', grep( /^-lm$/, split /\s+/, $Config{libs} ) );
if ( $ENV{ALIEN_CHIPMUNK_PREFIX} ) {
$cflags = "-I$ENV{ALIEN_CHIPMUNK_PREFIX}/include/chipmunk";
$libs = "-L$ENV{ALIEN_CHIPMUNK_PREFIX}/lib $libs";
}
else {
foreach
my $dir ( map {"$_/chipmunk"} qw( /usr/include /usr/local/include ) )
{
if ( -r "$dir/chipmunk.h" ) {
$cflags = "-I$dir";
}
}
}
my $builder = My::ModuleBuild->new(
module_name => 'Alien::Chipmunk',
dist_abstract => 'Build and install the Chipmunk Physics library',
dist_author => 'Jeffrey T. Palmer <jtpalmer@cpan.org>',
license => 'mit',
configure_requires => {
add_to_cleanup => [ 't/src/test.o', 't/src/test' ],
meta_merge => {
resources => {
homepage => 'https://github.com/jtpalmer/Alien-Chipmunk',
repository => 'https://github.com/jtpalmer/Alien-Chipmunk.git',
bugtracker => 'https://github.com/jtpalmer/Alien-Chipmunk/issues',
},
},
alien_name => 'chipmunk',
alien_isolate_dynamic => 1,
alien_provides_cflags => $cflags,
alien_provides_libs => $libs,
alien_repository => {
protocol => 'http',
host => 'chipmunk-physics.net',
location => '/release/Chipmunk-6.x',
pattern => qr/Chipmunk-([\d\.]+)\.tgz$/,
},
alien_build_commands =>
[ 'cmake -DBUILD_DEMOS=OFF -DCMAKE_INSTALL_PREFIX=%s', 'make', ],
alien_install_commands => ['make install'],
module_name => 'Some::Library::Chipmunk',
# ...
configure_requires => {
'Alien::Chipmunk' => 0,
# ...
},
build_requires => {
'Alien::Chipmunk' => 0
# ...
},
extra_compiler_flags => $alien->cflags,
extra_linker_flags => $alien->libs,
);
$builder->create_build_script();
DESCRIPTION
Alien::Chipmunk installs and downloads the Chipmunk Physics library.
SEE ALSO
* Alien
inc/My/ModuleBuild.pm view on Meta::CPAN
use Config;
sub alien_check_installed_version {
my ($self) = @_;
my $b = $self->cbuilder;
my $obj = eval {
$b->compile(
source => File::Spec->catfile(qw( inc My test.c )),
extra_compiler_flags => $self->alien_provides_cflags,
);
};
return unless defined $obj;
$self->add_to_cleanup($obj);
my ( $exe, @rest ) = eval {
$b->link_executable(
objects => [$obj],
extra_linker_flags => $self->alien_provides_libs,
);
};
unlink $obj;
return unless defined $exe;
$self->add_to_cleanup( $exe, @rest );
if ( `$exe` =~ /version=([0-9\.]+)/ ) {
lib/Alien/Chipmunk.pm view on Meta::CPAN
module_name => 'Some::Library::Chipmunk',
# ...
configure_requires => {
'Alien::Chipmunk' => 0,
# ...
},
build_requires => {
'Alien::Chipmunk' => 0
# ...
},
extra_compiler_flags => $alien->cflags,
extra_linker_flags => $alien->libs,
);
$builder->create_build_script();
=head1 DESCRIPTION
L<Alien::Chipmunk> installs and downloads the Chipmunk Physics library.
=head1 SEE ALSO
t/01-config.t view on Meta::CPAN
use strict;
use warnings;
use Test::More;
use Alien::Chipmunk;
diag( 'NAME=' . Alien::Chipmunk->config('name') );
diag( 'VERSION=' . Alien::Chipmunk->config('version') );
my $alien = Alien::Chipmunk->new;
diag( 'CFLAGS=' . $alien->cflags );
diag( 'LIBS=' . $alien->libs );
SKIP: {
skip "system libs may not need -I or -L", 2
if $alien->install_type('system');
like( $alien->cflags, qr/-I/ );
like( $alien->libs, qr/-L/ );
}
done_testing();
t/02-compile.t view on Meta::CPAN
use Config;
eval "use ExtUtils::CBuilder 0.2703";
plan skip_all => "ExtUtils::CBuilder 0.2703 required for this test" if $@;
my $alien = Alien::Chipmunk->new();
my $cb = ExtUtils::CBuilder->new( quiet => 0 );
my $obj = $cb->compile(
source => 't/src/test.c',
extra_compiler_flags => $alien->cflags,
);
is( defined $obj, 1, "Compiling test.c" );
my $exe = $cb->link_executable(
objects => [$obj],
extra_linker_flags => $alien->libs,
);
is( defined $exe, 1, "Linking test.c" );
my $rv = system($exe);
is( $rv, 0, "Executing test" );
done_testing();
( run in 2.500 seconds using v1.01-cache-2.11-cpan-94b05bcf43c )