Alien-Chipmunk

 view release on metacpan or  search on metacpan

Build.PL  view on Meta::CPAN

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 => {

Build.PL  view on Meta::CPAN

    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'],

README  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();

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 )