package inc::Installer::EnvChecker; use strict; use inc::Installer::TargetHandler; use inc::Installer::OutPaths; use inc::Installer::BuildTools; use inc::Installer::CPAN; use base qw(inc::Installer inc::Installer::Logger); { my $SINGLETON; sub new { my $class = shift; if ( not $SINGLETON ) { my $self = { '_EnvObservables' => [ inc::Installer::TargetHandler->new, inc::Installer::OutPaths->new, inc::Installer::BuildTools->new, inc::Installer::CPAN->new, ], '_Missing' => {}, }; bless $self, $class; $SINGLETON = $self; } return $SINGLETON; } } sub CheckEnv { $_[0]->debug("Checking environment"); my $self = shift; $self->{'_Missing'} = {}; for my $obs ( $self->GetEnvObservables ) { for my $key ( $obs->Keys ) { my $response = $obs->Check( $key ); die $obs if ref $response ne 'ARRAY'; $self->info( sprintf( "Checking for $key...%s", $response->[0] ? $response->[0] : $response->[1] ? 'NOT found (REQUIRED)' : 'not found (but optional anyway)' ) ); $self->{'_Missing'}->{$key} = 1 if not $response->[0]; } } return $self; } sub GetMissing { $_[0]->debug("Getting missing requirements"); my $self = shift; return keys %{ $self->{'_Missing'} }; } sub SetEnvObservables { my ( $self, @observables ) = @_; for my $obs ( @observables ) { if ( $obs->isa('inc::Installer::EnvObservableI') ) { $self->debug("Added environment observable: '$obs'"); push @{ $self->{'_EnvObservables'} }, $obs; } else { $self->throw( 'Bad::Object' => "'$obs' not an environment observable" ); } } } sub GetEnvObservables { my $self = shift; return @{ $self->{'_EnvObservables'} }; } 1;