}
}
-use Test::More;
-BEGIN {
- if (!eval {require Capture::Tiny}) {
- plan skip_all => 'Capture::Tiny required to test bootstrapping';
- }
+sub check_version {
+ my ($perl, $module) = @_;
+ my $version = `$perl $0 --check-version $module`;
+ chomp $version;
+ length $version ? $version : undef;
}
+
+use Test::More;
+use IPC::Open3;
use File::Temp;
use File::Spec;
use local::lib ();
-delete $ENV{PERL5LIB};
-delete $ENV{PERL_LOCAL_LIB_ROOT};
-delete $ENV{PERL_MM_OPT};
-delete $ENV{PERL_MB_OPT};
-
-#my @ll_path = File::Spec->splitpath($INC{'local/lib.pm'});
-#my @ll_dir = File::Spec->splitdir($ll_path[1]);
-#my $ll_dir = File::Spec->catpath($ll_path[0], File::Spec->catdir(@ll_dir[0 .. $#_-1]), '');
-
-sub check_version {
- my $module = shift;
- my $version = `$^X $0 --check-version $module`;
- chomp $version;
- length $version ? $version : undef;
+my @perl;
+while (@ARGV) {
+ my $arg = shift @ARGV;
+ if ($arg =~ /^--perl(?:=(.*))$/) {
+ push @perl, ($1 || shift @ARGV);
+ }
+ else {
+ warn "unrecognized option: $arg\n";
+ }
}
+@perl = $^X
+ unless @perl;
my @modules = (
[ 'ExtUtils::MakeMaker' => 6.74 ],
[ 'Module::Build' => 0.36 ],
[ 'CPAN' => 1.82 ],
);
-plan tests => 1+@modules;
-for my $module (@modules) {
- my $version = check_version($module->[0]);
- if ($version && $version >= $module->[1]) {
- diag "Can't test bootstrap of $module->[0], version $version already meets requirement of $module->[1]";
+plan tests => @perl * (1+@modules);
+
+for my $perl (@perl) {
+ local @INC = @INC;
+ local $ENV{PERL5LIB};
+ local $ENV{PERL_LOCAL_LIB_ROOT};
+ local $ENV{PERL_MM_OPT};
+ local $ENV{PERL_MB_OPT};
+ delete $ENV{PERL5LIB};
+ delete $ENV{PERL_LOCAL_LIB_ROOT};
+ delete $ENV{PERL_MM_OPT};
+ delete $ENV{PERL_MB_OPT};
+
+ diag "testing bootstrap with $perl";
+ for my $module (@modules) {
+ my $version = check_version($perl, $module->[0]);
+ if ($version && $version >= $module->[1]) {
+ diag "Can't test bootstrap of $module->[0], version $version already meets requirement of $module->[1]";
+ }
}
-}
-$ENV{HOME} = my $home = File::Temp::tempdir( CLEANUP => 1 );
-mkdir my $ll = File::Spec->catdir($home, 'perl5');
-local::lib->import($ll);
+ $ENV{HOME} = my $home = File::Temp::tempdir( CLEANUP => 1 );
+ my $ll = File::Spec->catdir($home, 'local-lib');
-my $result;
-my $out = Capture::Tiny::capture_merged {
- $result = system($^X, 'Makefile.PL', '--bootstrap');
-};
-is $result, 0, 'Makefile.PL ran successfully'
- or diag $out;
+ open my $null_in, '<', File::Spec->devnull;
+ my $pid = open3 $null_in, my $out, undef, $perl, 'Makefile.PL', '--bootstrap='.$ll;
+ while (my $line = <$out>) {
+ note $line;
+ }
+ waitpid $pid, 0;
+
+ is $?, 0, 'Makefile.PL ran successfully'
+ or diag $out;
+
+ local::lib->setup_env_hash_for($ll);
-for my $module (@modules) {
- my $version = check_version($module->[0]);
- cmp_ok $version, '>=', $module->[1], "bootstrap installed new enough $module->[0]";
+ for my $module (@modules) {
+ my $version = check_version($perl, $module->[0]);
+ cmp_ok $version, '>=', $module->[1], "bootstrap installed new enough $module->[0]"
+ or diag "PERL5LIB: $ENV{PERL5LIB}";
+
+ }
}