$EximBuild::conf{test_configure_env} = {} unless exists $EximBuild::conf{test_configure_env};
$EximBuild::conf{test_configure_args} = [] unless exists $EximBuild::conf{test_configure_args};
- my @makeout;
- my %saved_env = %ENV;
- foreach my $k (keys %{$EximBuild::conf{test_configure_env}}) {
- $ENV{$k} = $EximBuild::conf{test_configure_env}{$k};
- }
- my $conf_args = '';
- foreach (@{$EximBuild::conf{test_configure_args}}) {
- s/'/'"'"'/g;
- $conf_args .= " '${_}'";
- }
- @makeout =`(cd $exim/test && ./configure $conf_args && $make )2>&1 `;
- %ENV = %saved_env;
+ my (@makeout, $status);
+ {
+ local %ENV = (%ENV, %{$EximBuild::conf{test_configure_env}});
+
+ open(my $make, '-|') or do { # Yeah, it *could* return undef, if we can't fork!
+ open(STDERR, '>&STDOUT') or die "$0: re-open STDERR to STDOUT: $!\n";
+ chdir "$exim/test" or die "$0: chdir to '$exim/test': $!\n";
+ 0 == system './configure', @{$EximBuild::conf{test_configure_args}} or die;
+ exec 'make';
+ die "$0: exec make: $!\n";
+ };
+ @makeout = <$make>;
+ close($make) or die "$0: close make: $!\n";
+ $status = $? >> 8;
+ };
- my $status = $? >>8;
unless($status)
{
my @tmp = `(cd $exim/test && ./runtest -CONTINUE $tests_range )2>&1`;
}
return $pid;
}
-