Installer

 view release on metacpan or  search on metacpan

lib/Installer/Target.pm  view on Meta::CPAN

sub installation {
  my ( $self ) = @_;
  $self->prepare_installation;
  $self->installer_code->($self);
  $self->finish_installation;
}

sub write_export {
  my ( $self ) = @_;
  my $export_filename = $self->target_file('export.sh');
  $self->log_print("Generating ".$export_filename." ...");
  my $export_sh = "#!/bin/sh\n#\n# Installer auto generated export.sh\n#\n".("#" x 60)."\n\n";
  $export_sh .= 'export CURRENT_INSTALLER_ENV='.$self->target_path->stringify."\n";
  if (defined $self->meta->{unset} && @{$self->meta->{unset}}) {
    $export_sh .= '# custom unsets'."\n";
    for (@{$self->meta->{unset}}) {
      $export_sh .= 'unset '.$_."\n";
    }
  }
  if (defined $self->meta->{PATH} && @{$self->meta->{PATH}}) {
    $export_sh .= 'export PATH="'.join(':',@{$self->meta->{PATH}}).'${PATH+:}$PATH"'."\n";
  }
  if (defined $self->meta->{LD_LIBRARY_PATH} && @{$self->meta->{LD_LIBRARY_PATH}}) {
    $export_sh .= 'export LD_LIBRARY_PATH="'.join(':',@{$self->meta->{LD_LIBRARY_PATH}}).'${LD_LIBRARY_PATH+:}$LD_LIBRARY_PATH"'."\n";
  }
  if (defined $self->meta->{C_INCLUDE_PATH} && @{$self->meta->{C_INCLUDE_PATH}}) {
    $export_sh .= 'export C_INCLUDE_PATH="'.join(':',@{$self->meta->{C_INCLUDE_PATH}}).'${C_INCLUDE_PATH+:}$C_INCLUDE_PATH"'."\n";
  }
  if (defined $self->meta->{MANPATH} && @{$self->meta->{MANPATH}}) {
    $export_sh .= 'export MANPATH="'.join(':',@{$self->meta->{MANPATH}}).'${MANPATH+:}$MANPATH"'."\n";
  }
  if (defined $self->meta->{PKG_CONFIG_PATH} && @{$self->meta->{PKG_CONFIG_PATH}}) {
    $export_sh .= 'export PKG_CONFIG_PATH="'.join(':',@{$self->meta->{PKG_CONFIG_PATH}}).'${PKG_CONFIG_PATH+:}$PKG_CONFIG_PATH"'."\n";
  }
  if (defined $self->meta->{ACLOCAL_PATH}) {
    $export_sh .= 'export ACLOCAL_PATH="'.$self->meta->{ACLOCAL_PATH}.'"'."\n";
  }
  if (defined $self->meta->{ACLOCAL}) {
    $export_sh .= 'export ACLOCAL="'.$self->meta->{ACLOCAL}.'"'."\n";
  }
  if (defined $self->meta->{export} && @{$self->meta->{export}}) {
    $export_sh .= '# custom exports'."\n";
    for (@{$self->meta->{export}}) {
      $export_sh .= 'export '.$_."\n";
    }
  }
  $export_sh .= "\n";
  for (@{$self->meta->{software_packages_done}}) {
    my $software = $self->software->{$_};
    if ($software->has_export_sh) {
      my @lines = $software->export_sh->($software);
      $export_sh .= "# export.sh addition by ".$software->alias."\n";
      $export_sh .= join("\n",@lines)."\n\n";
    }
  }
  $export_sh .= ("#" x 60)."\n";
  io($export_filename)->print($export_sh);
  chmod(0755,$export_filename);
}

sub update_env {
  my ( $self ) = @_;
  my %seen = defined $self->meta->{seen_dirs}
    ? %{$self->meta->{seen_dirs}}
    : ();
  if (!$seen{'bin'} and -e $self->target_path('bin')) {
    my @bindirs = defined $self->meta->{PATH}
      ? @{$self->meta->{PATH}}
      : ();
    my $bindir = $self->target_path('bin')->absolute->stringify;
    push @bindirs, $bindir;
    $self->meta->{PATH} = \@bindirs;
    $seen{'bin'} = 1;
  }
  for my $p (qw( lib share )) {
    my $path = $self->target_path($p,'pkgconfig');
    my $skey = $p.'pkgconfig';
    if (!$seen{$skey} and -e $path) {
      my @pcp = defined $self->meta->{PKG_CONFIG_PATH}
        ? @{$self->meta->{PKG_CONFIG_PATH}}
        : ();
      push @pcp, $path->absolute->stringify;
      $self->meta->{PKG_CONFIG_PATH} = \@pcp;
      $seen{$skey} = 1;
    }
  }
  if (!$seen{'man'} and -e $self->target_path('man')) {
    my @mandirs = defined $self->meta->{MANPATH}
      ? @{$self->meta->{MANPATH}}
      : ();
    my $mandir = $self->target_path('man')->absolute->stringify;
    push @mandirs, $mandir;
    $self->meta->{MANPATH} = \@mandirs;
    $seen{'man'} = 1;
  }
  if (!$seen{'aclocal'} and -e $self->target_path('share','aclocal')) {
    $self->meta->{ACLOCAL_PATH} = $self->target_path('share','aclocal')->stringify;
    $self->meta->{ACLOCAL} = 'aclocal -I '.$self->meta->{ACLOCAL_PATH};
    $seen{'aclocal'} = 1;
  }
  if (!$seen{'lib'} and -e $self->target_path('lib')) {
    my @libdirs = defined $self->meta->{LD_LIBRARY_PATH}
      ? @{$self->meta->{LD_LIBRARY_PATH}}
      : ();
    my $libdir = $self->target_path('lib')->absolute->stringify;
    push @libdirs, $libdir;
    $self->meta->{LD_LIBRARY_PATH} = \@libdirs;
    $seen{'lib'} = 1;
  }
  if (!$seen{'include'} and -e $self->target_path('include')) {
    my @libdirs = defined $self->meta->{C_INCLUDE_PATH}
      ? @{$self->meta->{C_INCLUDE_PATH}}
      : ();
    my $libdir = $self->target_path('include')->absolute->stringify;
    push @libdirs, $libdir;
    $self->meta->{C_INCLUDE_PATH} = \@libdirs;
    $seen{'include'} = 1;
  }
  $self->meta->{seen_dirs} = \%seen;
}



( run in 0.878 second using v1.01-cache-2.11-cpan-2398b32b56e )