Alien-Box2D
view release on metacpan or search on metacpan
module_name => 'Any::Box2D::Module',
# + other params
build_requires => {
'Alien::Box2D' => 0,
# + others modules
},
configure_requires => {
'Alien::Box2D' => 0,
# + others modules
},
extra_compiler_flags => Alien::Box2D->config('cflags'),
extra_linker_flags => Alien::Box2D->config('libs'),
)->create_build_script;
NOTE: Alien::Box2D is required only for building not for using
'Any::Box2D::Module'.
DESCRIPTION
Alien::Box2D during its installation downloads Box2D library source
codes, builds *Box2D* binaries from source codes and installs necessary
dev files (headers: *.h, static library: *.a) into *share* directory of
Alien::Box2D distribution.
METHODS
config()
This function is the main public interface to this module:
Alien::Box2D->config('prefix');
Alien::Box2D->config('version');
Alien::Box2D->config('libs');
Alien::Box2D->config('cflags');
BUGS
Please post issues and bugs at
<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Alien-Box2D>
AUTHOR
FROGGS, <froggs at cpan.org>
KMX, <kmx at cpan.org>
inc/My/Builder.pm view on Meta::CPAN
# try to find Box2D root dir
my $prefix = rel2abs($build_out);
$self->config_data('share_subdir', $self->{properties}->{dist_version});
# set defaults
my $cfg = {
# defaults (used on MS Windows build)
version => $self->notes('build_box2d_version'),
prefix => '@PrEfIx@',
libs => '-L' . $self->quote_literal('@PrEfIx@/lib') . ' -lBox2D',
cflags => '-I' . $self->quote_literal('@PrEfIx@/include'),
shared_libs => [ ],
};
if($^O =~ /(bsd|linux)/) {
$cfg->{libs} = '-L' . $self->quote_literal('@PrEfIx@/lib') . ' -Wl,-rpath,' . $self->quote_literal('@PrEfIx@/lib') . ' -lBox2D -lm',
}
# write config
$self->config_data('config', $cfg);
}
inc/My/Builder.pm view on Meta::CPAN
print "BUILDING '" . $bp->{dirname} . "'...\n";
my $srcdir = catfile($build_src, $bp->{dirname});
my $prefixdir = rel2abs($build_out);
$self->config_data('build_prefix', $prefixdir); # save it for future Alien::Box2D::ConfigData
# some platform specific stuff
my $makefile = rel2abs('patches/Makefile.unix');
$makefile = rel2abs('patches/Makefile.mingw') if $^O eq 'MSWin32' && $Config{cc} =~ /gcc/;
$makefile = rel2abs('patches/Makefile.nmake') if $^O eq 'MSWin32' && $Config{cc} =~ /cl/;
my $cxxflags = '-O3';
$cxxflags .= " $1" if $Config{cccdlflags} =~ /((-[df]PIC\s+)?-[df]PIC)/i;
# MacOSX related flags
# 'as' for 'arch' can be in /usr/libexec/gcc/darwin/<arch_type>/as or in /usr/local/libexec/gcc/darwin/<arch_type>/as
foreach my $arch (qw(x86_64 i386 ppc)) {
if($Config{ccflags} =~ /-arch \Q$arch\E/
&& (-e "/usr/libexec/gcc/darwin/$arch/as"
|| -e "/usr/local/libexec/gcc/darwin/$arch/as")) {
$cxxflags .= " -arch $arch";
}
}
my $cxx = $self->search_env_path(qw/c++ g++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC/); #search PATH for c++ compiler
my $ar = $self->search_env_path('ar');
my $ranlib = $self->search_env_path('ranlib');
### workaround for http://www.cpantesters.org/cpan/report/16e1fb62-8bc3-11e0-a7f7-6524785ebe45
#On solaris, some tools like 'ar' are not in the default PATH, but in /usr/???/bin
if ($^O eq 'solaris') {
for (qw[/usr/ccs/bin /usr/xpg4/bin /usr/sfw/bin /usr/xpg6/bin /usr/gnu/bin /opt/gnu/bin /usr/bin]) {
inc/My/Builder.pm view on Meta::CPAN
my @raw=<DAT>;
close(DAT);
my ($version) = grep(/version\s?=\s?\{[\d\s,]+\}/, @raw);
if ($version =~ /version\s?=\s?\{(\d+)[^\d]+(\d+)[^\d]+(\d+)\}/) {
print STDERR "Got version=$1.$2.$3\n";
$self->notes('build_box2d_version', "$1.$2.$3");
}
chdir $srcdir;
my @cmd = ($self->_get_make, '-f', $makefile, "PREFIX=$prefixdir", 'install');
push @cmd, "CXXFLAGS=$cxxflags" if $cxxflags;
push @cmd, "AR=$ar" if $ar;
push @cmd, "RANLIB=$ranlib" if $ranlib;
push @cmd, "CXX=$cxx" if $cxx;
printf("(cmd: %s)\n", join(' ', @cmd));
$self->config_data('make_command', \@cmd);
$self->do_system(@cmd) or die "###ERROR### [$?] during make ... ";
chdir $self->base_dir();
return 1;
}
lib/Alien/Box2D.pm view on Meta::CPAN
module_name => 'Any::Box2D::Module',
# + other params
build_requires => {
'Alien::Box2D' => 0,
# + others modules
},
configure_requires => {
'Alien::Box2D' => 0,
# + others modules
},
extra_compiler_flags => Alien::Box2D->config('cflags'),
extra_linker_flags => Alien::Box2D->config('libs'),
)->create_build_script;
NOTE: Alien::Box2D is required only for building not for using 'Any::Box2D::Module'.
=head1 DESCRIPTION
Alien::Box2D during its installation downloads Box2D library source codes,
builds I<Box2D> binaries from source codes and installs necessary dev files
(headers: *.h, static library: *.a) into I<share> directory of Alien::Box2D
distribution.
=head1 METHODS
=head2 config()
This function is the main public interface to this module:
Alien::Box2D->config('prefix');
Alien::Box2D->config('version');
Alien::Box2D->config('libs');
Alien::Box2D->config('cflags');
=head1 BUGS
Please post issues and bugs at L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Alien-Box2D>
=head1 AUTHOR
FROGGS, E<lt>froggs at cpan.orgE<gt>
KMX, E<lt>kmx at cpan.orgE<gt>
t/002_config.t view on Meta::CPAN
### test some config strings
like( Alien::Box2D->config('version'), qr/([0-9]+\.)*[0-9]+/, "Testing config('version')" );
like( Alien::Box2D->config('prefix'), qr/.+/, "Testing config('prefix')" );
### check if prefix is a real directory
my $p = Alien::Box2D->config('prefix');
is( (-d Alien::Box2D->config('prefix')), 1, "Testing existence of 'prefix' directory" );
diag( "VERSION=" . Alien::Box2D->config('version') );
diag( "PREFIX=" . Alien::Box2D->config('prefix') );
diag( "CFLAGS=" . Alien::Box2D->config('cflags') );
diag( "LIBS=" . Alien::Box2D->config('libs') );
my $m = join ' ', @{Alien::Box2D::ConfigData->config('make_command')};
diag( "make_command=$m" );
t/003_compile.t view on Meta::CPAN
# t/002_config.t - test config() functionality
use Test::More;
use Alien::Box2D;
use ExtUtils::CppGuess;
use ExtUtils::Liblist;
use Config;
my $cppguess = ExtUtils::CppGuess->new;
my %cppflags = $cppguess->module_build_options;
# Ugly MSVC compiler hack
my $libs = Alien::Box2D->config('libs');
$libs = ExtUtils::Liblist->ext($libs) if $Config{cc} =~ /\bcl\b/;
my $cflags = Alien::Box2D->config('cflags') . ' ' . $cppflags{extra_compiler_flags} . ' ' . $Config{ccflags};
my $lflags = $libs . ' ' . $cppflags{extra_linker_flags} . ' ' . $Config{ldflags};
eval "use ExtUtils::CBuilder 0.2703";
plan skip_all => "ExtUtils::CBuilder 0.2703 required for this test" if $@;
plan tests => 3;
my $cb = ExtUtils::CBuilder->new(quiet => 0);
my $obj = $cb->compile( source => 't/test1.c', 'C++' => 1, extra_compiler_flags => $cflags );
is( defined $obj, 1, "Compiling test1.c" );
my $exe = $cb->link_executable( objects => [ $obj ], extra_linker_flags => $lflags );
is( defined $exe, 1, "Linking test1.c" );
my $rv = system($exe);
is( $rv, 0, "Executing test1" );
( run in 2.364 seconds using v1.01-cache-2.11-cpan-94b05bcf43c )