Build: run autoreconf jobs in parallel
authorThomas Miedema <thomasmiedema@gmail.com>
Thu, 4 Jun 2015 21:23:19 +0000 (23:23 +0200)
committerThomas Miedema <thomasmiedema@gmail.com>
Tue, 9 Jun 2015 11:25:45 +0000 (13:25 +0200)
Running ./boot takes ~20 seconds on my laptop with 2 cores. With this change,
that goes down to a little over 10 seconds. There are 8 configure.ac files in
total, so max 8 parallel jobs.

Differential Revision: https://phabricator.haskell.org/D962

boot

diff --git a/boot b/boot
index 8977eaf..af5ccc2 100755 (executable)
--- a/boot
+++ b/boot
@@ -155,16 +155,25 @@ sub boot_pkgs {
 # autoreconf everything that needs it.
 sub autoreconf {
     my $dir;
+    my $fail;
 
     foreach $dir (".", glob("libraries/*/")) {
         if (-f "$dir/configure.ac") {
+            next if (my $pid = fork);
+            die "fork failed: $!" if (! defined $pid);
             print "Booting $dir\n";
             chdir $dir or die "can't change to $dir: $!";
-            system("autoreconf") == 0
-                or die "Running autoreconf failed with exitcode $?";
-            chdir $curdir or die "can't change to $curdir: $!";
+            exec("autoreconf");
+            exit 1;
         }
     }
+
+    # Wait for all child processes to finish.
+    while (wait() != -1) {
+        $fail = 1 if $?;
+    }
+
+    die "Running autoreconf failed" if $fail;
 }
 
 sub checkBuildMk {