Alien-Build

 view release on metacpan or  search on metacpan

t/alien_base.t  view on Meta::CPAN


    ($dir) = [shellwords(Alien::libfoo2->libs_static)]->[0] =~ /^-L(.*)$/;

    is(
      -f path($dir)->child('libfoo.a'),
      T(),
      '-L directory points to libfoo.a location (static)',
    );

  };

  is( Alien::libfoo2->version, '2.3.4', 'version' );

  subtest 'install type' => sub {
    is( Alien::libfoo2->install_type, 'share' );
    is( Alien::libfoo2->install_type('system'), F() );
    is( Alien::libfoo2->install_type('share'), T() );
    is( Alien::libfoo2->is_system_install, F() );
    is( Alien::libfoo2->is_share_install, T() );
  };

  is( Alien::libfoo2->config('name'), 'foo', 'config.name' );
  is( Alien::libfoo2->config('finished_installing'), T(), 'config.finished_installing' );

  is(
    [Alien::libfoo2->dynamic_libs],
    array {
      item match qr/libfoo.so$/;
      item match qr/libfoo.so.2$/;
      end;
    },
    'dynamic_libs',
  );

  is(
    [Alien::libfoo2->bin_dir],
    array {
      item T();
      end;
    },
    'bin_dir',
  );

  is(
    [Alien::libfoo2->dynamic_dir],
    array {
      item match qr /\bdynamic$/;
      end;
    },
    'dynamic_dir',
  );

  is( -f path(Alien::libfoo2->bin_dir)->child('foo-config'), T(), 'has a foo-config');

  is( Alien::libfoo2->runtime_prop->{arbitrary}, 'two', 'runtime_prop' );

};

subtest 'build flags' => sub {

  my %unix_flags = (
    q{ -L/a/b/c -lz -L/a/b/c } => [ "-L/a/b/c", "-lz", "-L/a/b/c" ],
  );

  my %win_flags = (
    q{ -L/a/b/c -lz -L/a/b/c } => [ "-L/a/b/c", "-lz", "-L/a/b/c" ],
    q{ -LC:/a/b/c -lz -L"C:/a/b c/d" } => [ "-LC:/a/b/c", "-lz", "-LC:/a/b c/d" ],
    q{ -LC:\a\b\c -lz } => [ q{-LC:\a\b\c}, "-lz" ],
  );

  subtest 'unix' => sub {
    foreach my $flag (keys %unix_flags)
    {
      is( [ Alien::Base->split_flags_unix( $flag ) ], $unix_flags{$flag} );
    }
  };

  subtest 'windows' => sub
  {
    foreach my $flag (keys %win_flags)
    {
      is( [ Alien::Base->split_flags_windows( $flag ) ], $win_flags{$flag} );
    }
  };

};

subtest 'ffi_name' => sub {

  require Alien::libfoo1;

  my @args_find_lib;

  my $mock1 = mock 'FFI::CheckLib' => (
    override => [
      find_lib => sub {
        @args_find_lib = @_;
        ('foo.dll','foo2.dll');
      },
    ],
  );

  is( [Alien::libfoo1->dynamic_libs], ['foo.dll','foo2.dll'], 'call dynamic_libs' );
  is( \@args_find_lib, [ lib => 'foo', libpath => [] ] );

  my $mock2 = mock 'Alien::Base' => (
    around => [
      runtime_prop => sub {
        my($orig, @args) = @_;
        my $prop = $orig->(@args);
        { ffi_name => 'roger', %$prop };
      },
    ],
  );

  is( [Alien::libfoo1->dynamic_libs], ['foo.dll','foo2.dll'], 'call dynamic_libs' );
  is( \@args_find_lib, [ lib => 'roger' ] );

};

subtest 'test an alt install' => sub {

  require Alien::libfoo1;
  require Alien::libfoo2;
  require Alien::libfoo3;

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



( run in 0.588 second using v1.01-cache-2.11-cpan-df04353d9ac )