Alien-Libarchive

 view release on metacpan or  search on metacpan

inc/My/ModuleBuild.pm  view on Meta::CPAN

sub ACTION_build
{
  my $self = shift;
  
  if($self->config_data('install_type') eq 'share')
  {
    unless($self->config_data('already_built'))
    {
      my $prefix = _catdir($FindBin::Bin, 'share', 'libarchive019' );

      local $ENV{CONFIG_SITE} = _catfile($FindBin::Bin, '_alien', 'config.site');
      do {
        my $lib = _catdir($prefix, 'lib');
        my $inc = _catdir($prefix, 'include');
        my $dll = _catdir($prefix, 'dll');
      
        mkdir(_catdir($FindBin::Bin, '_alien'));
        open my $fh, '>', $ENV{CONFIG_SITE};
        print $fh "#!/bin/sh\n",
                  "if [ -n \"\$CPPFLAGS\" ] ; then\n",
                  "  CPPFLAGS=\"\$CPPFLAGS -I$inc\"\n",
                  "else\n",
                  "  CPPFLAGS=\"-I$inc\"\n",
                  "fi;\n",
                  "if [ -n \"\$LDFLAGS\" ] ; then\n",
                  "  LDFLAGS=\"\$LDFLAGS -L$lib -L$dll\"\n",
                  "else\n",
                  "  LDFLAGS=\"-L$lib -L$dll\"\n",
                  "fi;\n";
        close $fh;
      };

      if(eval { require Alien::LZO::Installer; })
      {
        my $build = eval { Alien::LZO::Installer->system_install };
        unless($build)
        {
          my $build_dir = _catdir($FindBin::Bin, '_alien_lzo');
          mkdir $build_dir unless -d $build_dir;
          $build = eval { Alien::LZO::Installer->build_install($prefix, dir => $build_dir) };
        }
      }

      if(eval { require Alien::bz2::Installer; })
      {
        my $build = eval { Alien::bz2::Installer->system_install };
        unless($build)
        {
          my $build_dir = _catdir($FindBin::Bin, '_alien_bz2');
          mkdir $build_dir unless -d $build_dir;
          $build = eval { Alien::bz2::Installer->build_install($prefix, dir => $build_dir) };

          if(defined $build)
          {
            if($^O eq 'MSWin32')
            {
              my $dir = _catdir($prefix, 'dll');
              mkdir $dir;
              my $la = _catfile($dir, 'libbz2.la');
              open my $fh, '>', $la;
              binmode $fh;
              print $fh _bz2_la_file($prefix);
              close $fh;
            }
          }
        }
        
      }
    
      my $build_dir = _catdir($FindBin::Bin, '_alien_libarchive');
      mkdir $build_dir unless -d $build_dir;
      mkdir $prefix unless -d $prefix;
      my $build = Alien::Libarchive::Installer->build_install( $prefix, dir => $build_dir );
      $self->config_data( cflags => [grep !/^-I/, @{ _list $build->cflags }] );
      $self->config_data( libs =>   [grep !/^-L/, @{ _list $build->libs }] );
      if($self->config_data('msvc'))
      {
        $self->config_data( libs =>   [grep !/^(\/|-)libpath/i, @{ _list $build->libs }] );
      }
      $self->config_data( version => $build->version );

      printf "cflags: %s\n", join ' ', @{ $self->config_data('cflags') };
      printf "libs:   %s\n", join ' ', @{ $self->config_data('libs') };
      printf "msvc:   %d\n", $self->config_data('msvc');
      
      do {
        opendir my $dh, _catdir($prefix, 'dll');
        my @list = grep { ! -l _catfile($prefix, 'dll', $_) }
                   grep { /\.so/ || /\.(dll|dylib)$/ }
                   grep !/^(libbz2|bzip2.dll|liblzo2)/,
                   grep !/^\./,
                   sort
                   readdir $dh;
        closedir $dh;
        print "dlls:\n";
        print "  - $_\n" for @list;
        $self->config_data( dlls => \@list );
      };
      
      $self->config_data( already_built => 1 );
    }
  }
  
  $self->SUPER::ACTION_build(@_);

  my $module = $self->module_name;
  my @parts = split /::/, $module;
  my $arch_dir = File::Spec->catdir($self->blib, 'arch', 'auto', @parts);
  File::Path::mkpath($arch_dir, 0, oct(777)) unless -d $arch_dir;
  open my $fh, '>', File::Spec->catfile($arch_dir, $parts[-1].".txt");
  close $fh;
}

my $bz2_la_template;
sub _bz2_la_file
{
  my($prefix) = @_;
  unless(defined $bz2_la_template)
  {
    $bz2_la_template = do { local $/; <DATA> };
  }



( run in 0.892 second using v1.01-cache-2.11-cpan-acebb50784d )