Make run_build more perlish
authorHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>
Thu, 20 Sep 2018 22:04:01 +0000 (00:04 +0200)
committerHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>
Thu, 20 Sep 2018 22:04:01 +0000 (00:04 +0200)
run_build

index 2d2b1ef30de02f2a7286e2e9268af8dc4a9cead4..6290e0c9c5e2141c010ffb5e12db7addc25b78bf 100755 (executable)
--- a/run_build
+++ b/run_build
@@ -1041,20 +1041,22 @@ sub make_test
     $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`;
@@ -1511,4 +1513,3 @@ sub spawn
     }
     return $pid;
 }
-