package inc::Installer::MakeMaker; use strict; use base qw(inc::Installer inc::Installer::Logger); use ExtUtils::MakeMaker (); use inc::Installer::TargetHandler; use inc::Installer::OutPaths; use inc::Installer::BuildTools; use inc::Installer::CPAN; use inc::Installer::ConfigFileWriter; { my $SINGLETON; sub new { my $class = shift; if ( not $SINGLETON ) { my $self = { '_EUMMArgProviders' => [ inc::Installer::TargetHandler->new, inc::Installer::OutPaths->new, inc::Installer::BuildTools->new, inc::Installer::CPAN->new, inc::Installer::ConfigFileWriter->new, ], }; bless $self, $class; $SINGLETON = $self; } return $SINGLETON; } } sub MY::postamble { my $hash = shift; my $postamble = $hash->{'postamble'}; my $source = $postamble->{'source'}; return " instprereq : \$(NOECHO) \$(ABSPERLRUN) -Minc::Installer -e InstallPrereqs "; } sub WriteMakefile { my $self = shift; my %custom_args; my ( $source, $target ) = ( 'source', 'target' ); for my $argprovider ( $self->GetEUMMArgProviders ) { my %tmp = $argprovider->GetEUMMArgs; $custom_args{$_} = $tmp{$_} for ( keys %tmp ); } my %tmp = @_; $custom_args{$_} = $tmp{$_} for ( keys %tmp ); $self->debug("Writing Makefile"); ExtUtils::MakeMaker::WriteMakefile( 'postamble' => { 'source' => $source, 'target' => $target }, %custom_args, ); } sub SetEUMMArgProviders { my ( $self, @provider ) = @_; for my $prov ( @provider ) { if ( $prov->isa('inc::Installer::EUMMArgProviderI') ) { $self->debug("Added environment observable: '$prov'"); push @{ $self->{'_EUMMArgProviders'} }, $prov; } else { $self->throw( 'Bad::Object' => "'$prov' not an EUMM arg provider" ); } } } sub GetEUMMArgProviders { my $self = shift; return @{ $self->{'_EUMMArgProviders'} }; } 1;