package inc::Installer; BEGIN { use strict; use Cwd; use Config (); my $PATH = Cwd::abs_path( __FILE__ ); $PATH =~ s/Installer\.pm$/..\//; $PATH = Cwd::realpath( $PATH ); $ENV{'PERL5LIB'} = $PATH; if ( $Config::Config{osname} eq 'MSWin32' ) { $ENV{'PERL5OPT'} = "-I$PATH -Minc::Config"; } else { $ENV{'PERL5OPT'} = "-I$PATH\\ -Minc::Config"; } push @INC, $PATH; use inc::Config; } use Config (); use Carp (); use ExtUtils::MakeMaker (); use inc::Installer::EnvChecker; use inc::Installer::MakeMaker; use inc::Installer::BuildTools; use inc::Installer::TargetHandler; use inc::Installer::ConfigFileWriter; use inc::Installer::OptionsGetter; use inc::Installer::OutPaths; use inc::Installer::CPAN; use inc::Installer::Logger; use inc::Installer::Prerequisite; our $SysConfig = tied %Config::Config; our $Interactive; our $InstallPrereq; our $VERSION = '0.01'; our @EXPORT = qw( GetOptions CheckEnv InstallPrereqs WriteMakefile WriteConfigFiles ); sub import { print "Starting config, please wait...\n"; my ( $class, $args ) = @_; if ( $args and UNIVERSAL::isa( $args, 'HASH' ) ) { if ( exists $args->{'configfiles'} ) { inc::Installer::ConfigFileWriter->new( %{ $args->{'configfiles'} } ); } if ( exists $args->{'buildtools'} ) { inc::Installer::BuildTools->new( @{ $args->{'buildtools'} } ); } if ( exists $args->{'loglevel'} ) { $inc::Installer::Logger::LogLevel = $args->{'loglevel'}; } } my ( $callpack, $callfile, $callline ) = caller; my $def = __PACKAGE__; no strict 'refs'; for my $export ( @EXPORT ) { *{"${callpack}::$export"} = \&{"$def\:\:$export"}; } } sub FixSlashes { my ( $self, $path ) = @_; if ( $path ) { $path =~ tr/\\/\//; $path =~ s/\/+/\//g; return $path; } else { return ''; } } sub throw { my ( $self, $class, $msg ) = @_; Carp::croak( $msg ); } sub prompt { my ( $self, $msg, $default ) = @_; return $Interactive ? ExtUtils::MakeMaker::prompt( $msg, $default ) : $default; } sub InstallPrereqs { inc::Installer::Logger->info("Checking for prerequisites to install"); my %custom_args = @_; my $cpan = inc::Installer::CPAN->new; my $envChecker = inc::Installer::EnvChecker->new; my $prereq = 'inc::Installer::Prerequisite'; $cpan->InstallPrereqs( $prereq->GetById( $_ ) ) for $envChecker->GetMissing; inc::Installer::Logger->info("Done"); } sub GetOptions { inc::Installer::Logger->info("Getting command line options"); my %custom_args = @_; my $optionsGetter = inc::Installer::OptionsGetter->new; $optionsGetter->GetOptions( %custom_args ); } sub CheckEnv { &GetOptions(); inc::Installer::Logger->info("Checking environment"); my %custom_args = @_; my $envChecker = inc::Installer::EnvChecker->new; $envChecker->CheckEnv( %custom_args ); } sub WriteConfigFiles { &CheckEnv(); inc::Installer::Logger->info("Writing config files"); my %custom_args = @_; my $fileWriter = inc::Installer::ConfigFileWriter->new; $fileWriter->WriteRequestedFiles( %custom_args ); } sub WriteMakefile { &WriteConfigFiles(); inc::Installer::Logger->info("Writing Makefile"); my %custom_args = @_; my $makeMaker = inc::Installer::MakeMaker->new; $makeMaker->WriteMakefile( %custom_args ); } 1;