Alien-Box2D

 view release on metacpan or  search on metacpan

README  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'.

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 4.995 seconds using v1.01-cache-2.11-cpan-94b05bcf43c )