package inc::Installer::BuildTools; use strict; use base qw( inc::Installer inc::Installer::Logger inc::Installer::OptionsProviderI inc::Installer::EnvObservableI inc::Installer::EUMMArgProviderI ); { my @DEFAULTS = qw(perl make cc ld gzip); my $SINGLETON; sub new { my $class = shift; if ( $SINGLETON ) { $SINGLETON->{$_} = $Config::Config{$_} for (@_); } else { my %self = map { $_ => $Config::Config{$_} } @_, @DEFAULTS; bless \%self, $class; $SINGLETON = \%self; } return $SINGLETON; } } sub Check { my ( $self, $key ) = @_; return $self->LocateBin( $key ) ? [ $self->LocateBin( $key ), 1 ] : [ 0, 1 ]; } sub Keys { my $self = shift; return keys %$self; } sub Options { my $self = shift; my %options; for my $bin ( keys %$self ) { $options{"$bin-path=s"} = \$self->{$bin}; } return %options; } sub OptionsHelp { my $self = shift; my $help = " Build tools:\n"; $help .= " --$_-path=[PATH]\n Current setting: " . $self->LocateBin( $_ ) . "\n\n" for ( sort { $a cmp $b } keys %$self ); return $help; } sub TestBin { my ( $self, $bin ) = @_; $self->warning("Checking for '$bin'..."); -X $bin ? $self->warning("ok") : $self->warning("nok"); } sub LocateBin { my ( $self, $bin ) = @_; my $ext = $Config::Config{'exe_ext'}; return $self->{$bin} if $self->{$bin} and -X $self->{$bin}; $bin = $Config::Config{$bin} if $Config::Config{$bin}; PATH: for my $path ( split $Config::Config{'path_sep'}, $ENV{'PATH'} ) { if ( -X "$path/$bin$ext" ) { $self->{$bin} = $self->FixSlashes( "$path/$bin$ext" ); return $self->{$bin}; } elsif ( -X "$path/$bin" ) { $self->{$bin} = $self->FixSlashes( "$path/$bin" ); return $self->{$bin}; } else { next PATH; } } } sub GetEUMMArgs { return; } 1;