gnu: Add go-github-com-onsi-gomega.
[jackhill/guix/guix.git] / build-aux / compile-all.scm
index e9f3e95..9ffbce4 100644 (file)
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
-;;; Copyright © 2016, 2017, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2016, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -79,6 +79,14 @@ to 'make'."
                        (current-processor-count))))
                 (loop tail)))))))))
 
+(define (parallel-job-count*)
+  ;; XXX: Work around memory requirements not sustainable on i686 above '-j4'
+  ;; or so: <https://bugs.gnu.org/40522>.
+  (let ((count (parallel-job-count)))
+    (if (string-prefix? "i686" %host-type)
+        (min count 4)
+        count)))
+
 (define (% completed total)
   "Return the completion percentage of COMPLETED over TOTAL as an integer."
   (inexact->exact (round (* 100. (/ completed total)))))
@@ -90,26 +98,36 @@ to 'make'."
     (exit 1)))
 
 (match (command-line)
-  ((_ . files)
+  ((_ "--total" (= string->number grand-total)
+      "--completed" (= string->number processed)
+      . files)
+   ;; GRAND-TOTAL is the total number of .scm files in the project; PROCESSED
+   ;; is the total number of .scm files already compiled in previous
+   ;; invocations of this script.
    (catch #t
      (lambda ()
-       (compile-files srcdir (getcwd)
-                      (filter file-needs-compilation? files)
-                      #:workers (parallel-job-count)
-                      #:host host
-                      #:report-load (lambda (file total completed)
-                                      (when file
-                                        (format #t "[~3d%] LOAD     ~a~%"
-                                                (% (+ 1 completed) (* 2 total))
-                                                file)
-                                        (force-output)))
-                      #:report-compilation (lambda (file total completed)
-                                             (when file
-                                               (format #t "[~3d%] GUILEC   ~a~%"
-                                                       (% (+ total completed 1)
-                                                          (* 2 total))
-                                                       (scm->go file))
-                                               (force-output)))))
+       (let* ((to-build  (filter file-needs-compilation? files))
+              (processed (+ processed
+                            (- (length files) (length to-build)))))
+         (compile-files srcdir (getcwd) to-build
+                        #:workers (parallel-job-count*)
+                        #:host host
+                        #:report-load (lambda (file total completed)
+                                        (when file
+                                          (format #t "[~3d%] LOAD     ~a~%"
+                                                  (% (+ 1 completed
+                                                          (* 2 processed))
+                                                     (* 2 grand-total))
+                                                  file)
+                                          (force-output)))
+                        #:report-compilation (lambda (file total completed)
+                                               (when file
+                                                 (format #t "[~3d%] GUILEC   ~a~%"
+                                                         (% (+ total completed 1
+                                                                     (* 2 processed))
+                                                            (* 2 grand-total))
+                                                         (scm->go file))
+                                                 (force-output))))))
      (lambda _
        (primitive-exit 1))
      (lambda args
@@ -124,11 +142,8 @@ to 'make'."
                             (false-if-exception
                              (module-ref ui 'report-load-error)))))
          (if report
-             ;; In Guile <= 2.2.5, 'current-load-port' was not exported.
-             (let ((load-port ((module-ref (resolve-module '(ice-9 ports))
-                                           'current-load-port))))
-               (report (or (and=> load-port port-filename) "?.scm")
-                       args frame))
+             (report (or (and=> (current-load-port) port-filename) "?.scm")
+                     args frame)
              (begin
                (print-exception (current-error-port) frame
                                 (car args) (cdr args))