aboutsummaryrefslogtreecommitdiff
path: root/build-aux/compile-all.scm
blob: 9ffbce43ad1eaf746f4fecef076545663cd57bd9 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016 Taylan Ulrich Bayırlı/Kammer <taylanbayirli@gmail.com>
;;; Copyright © 2016, 2017, 2019, 2020, 2021 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(use-modules (ice-9 format)
             (ice-9 match)
             (ice-9 threads)
             (srfi srfi-1)
             (guix build compile)
             (guix build utils))

(define host (getenv "host"))
(define srcdir (getenv "srcdir"))

(define (relative-file file)
  (if (string-prefix? (string-append srcdir "/") file)
      (string-drop file (+ 1 (string-length srcdir)))
      file))

(define (file-mtime<? f1 f2)
  (< (stat:mtime (stat f1))
     (stat:mtime (stat f2))))

(define (scm->go file)
  (let* ((relative (relative-file file))
         (without-extension (string-drop-right relative 4)))
    (string-append without-extension ".go")))

(define (file-needs-compilation? file)
  (let ((go (scm->go file)))
    (or (not (file-exists? go))
        (file-mtime<? go file))))

(define* (parallel-job-count #:optional (flags (getenv "MAKEFLAGS")))
  "Return the number of parallel jobs as determined by FLAGS, the flags passed
to 'make'."
  (match flags
    (#f (current-processor-count))
    (flags
     (let ((initial-flags (string-tokenize flags)))
       (let loop ((flags initial-flags))
         (match flags
           (()
            ;; Note: GNU make prior to version 4.2 would hide "-j" flags from
            ;; $MAKEFLAGS.  Thus, check for a "--jobserver" flag here and
            ;; assume we're using all cores if specified.
            (if (any (lambda (flag)
                       (string-prefix? "--jobserver" flag))
                     initial-flags)
                (current-processor-count)         ;GNU make < 4.2
                1))                               ;sequential make
           (("-j" (= string->number count) _ ...)
            (if (integer? count)
                count
                (current-processor-count)))
           ((head tail ...)
            (if (string-prefix? "-j" head)
                (match (string-drop head 2)
                  (""
                   (current-processor-count))
                  ((= string->number count)
                   (if (integer? count)
                       count
                       (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)))))

;; Install a SIGINT handler to give unwind handlers in 'compile-file' an
;; opportunity to run upon SIGINT and to remove temporary output files.
(sigaction SIGINT
  (lambda args
    (exit 1)))

(match (command-line)
  ((_ "--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 ()
       (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
       ;; Try to report the error in an intelligible way.
       (let* ((stack   (make-stack #t))
              (frame   (if (> (stack-length stack) 1)
                           (stack-ref stack 1)    ;skip the 'throw' frame
                           (stack-ref stack 0)))
              (ui      (false-if-exception
                        (resolve-module '(guix ui))))
              (report  (and ui
                            (false-if-exception
                             (module-ref ui 'report-load-error)))))
         (if report
             (report (or (and=> (current-load-port) port-filename) "?.scm")
                     args frame)
             (begin
               (print-exception (current-error-port) frame
                                (car args) (cdr args))
               (display-backtrace stack (current-error-port)))))))))
8f2e17393c1166e08104cbca0b97e8ac'>gnu: guile-hall: Import the correct set of modules....* gnu/packages/guile-xyz.scm (guile-hall) [arguments] <modules>: Replace %default-gnu-imported-modules with %default-gnu-modules. Change-Id: Ifce9b013fbcff59031659bb727ec1c9cdd06ea40 Maxim Cournoyer 2024-08-31gnu: guile-di: Import the correct set of modules....* gnu/packages/guile-xyz.scm (guile-dbi) [arguments] <modules>: Replace %default-gnu-imported-modules with %default-gnu-modules. Change-Id: Ia7c27cc9c05e8818218e4e57b2e8c0c90210b109 Maxim Cournoyer 2024-08-31gnu: guile-dsv: Import the correct set of modules....* gnu/packages/guile-xyz.scm (guile-dsv) [arguments] <modules>: Replace %default-gnu-imported-modules with %default-gnu-modules. Change-Id: I216f8f05596fd9e836c5ab6b05d22593ce9d1b5c Maxim Cournoyer 2024-08-31gnu: guilescript: Import the correct set of modules....* gnu/packages/guile-xyz.scm (guilescript) [arguments] <modules>: Replace %default-gnu-imported-modules with %default-gnu-modules. Change-Id: I87d29358c50194d4f4564c7b18924a52c12d6020 Maxim Cournoyer 2024-08-31gnu: artanis: Import the correct set of modules....* gnu/packages/guile-xyz.scm (artanis) [arguments] <modules>: Replace %default-gnu-imported-modules with %default-gnu-modules. Change-Id: I477450215d69c84247c4d80612eb6ba9b4d7870b Maxim Cournoyer 2024-08-31build-systems: gnu: Export %default-gnu-imported-modules and %default-gnu-mod......Until now users would have to cargo cult or inspect the private %default-modules variable of (guix build-systems gnu) to discover which modules to include when extending the used modules via the #:modules argument. The renaming was automated via the command: $ git grep -l %gnu-build-system-modules | xargs sed 's/%gnu-build-system-modules/%default-gnu-imported-modules/' -i * guix/build-system/gnu.scm (%gnu-build-system-modules): Rename to... (%default-gnu-imported-modules): ... this. (%default-modules): Rename to... (%default-gnu-modules): ... this. Export. (dist-package, gnu-build, gnu-cross-build): Adjust accordingly. Change-Id: Idef307fff13cb76f3182d782b26e1cd3a5c757ee Maxim Cournoyer 2024-08-25gnu: Drop gobject-introspection 1.73.1....The actual gobject-introspection has been newer than its "next" variant for some while. * gnu/packages/glib.scm (gobject-introspection-next): Remove variable. * gnu/packages/gtk.scm (gtksourceview)[native-inputs]: Replace gobject-introspection-next with gobject-introspection. * gnu/packages/guile-xyz.scm (guile-g-golf)[native-inputs]: Likewise. Liliana Marie Prikler 2024-08-22gnu: Add guile-web-driver-ng....* gnu/packages/guile-xyz.scm (guile-web-driver-ng): New variable. Change-Id: I97f979ccbfe1d9f4e43b7f9a5730e092e36129a0 Signed-off-by: Andreas Enge <andreas@enge.fr> Artyom V. Poptsov 2024-08-21gnu: Add guile-qr-code....* gnu/packages/guile-xyz.scm (guile-qr-code): New variable. Change-Id: I8891a1ee442040a4f04183fca7bc1eca6a4fc951 Signed-off-by: Ludovic Courtès <ludo@gnu.org> Artyom V. Poptsov 2024-08-21gnu: guile-dsv: Update to 0.7.2....* gnu/packages/guile-xyz.scm (guile-dsv): Update to 0.7.2. Change-Id: Ifdcf224c5711956aa9b4d89218a1974ab3c23679 Signed-off-by: Ludovic Courtès <ludo@gnu.org> Artyom V. Poptsov 2024-08-19gnu: gitile: Replace outdated dependency....* gnu/packages/version-control.scm (gitile): Replace outdated dependency. * gnu/packages/guile-xyz.scm (guile-syntax-highlight-for-gitile): Remove. Change-Id: I24295a24d0dfef08d5161c206757996ccdd881fd Evgeny Pisemsky 2024-08-05Change email of Evgeny Pisemsky....* .mailmap: Add entry to Evgeny Pisemsky. * gnu/packages/emacs-xyz.scm, gnu/packages/engineering.scm, gnu/packages/guile-xyz.scm, gnu/packages/hardware.scm, gnu/packages/perl.scm, gnu/packages/python-xyz.scm, gnu/packages/sdl.scm, gnu/packages/web.scm: Adjust copyright line. Change-Id: I9a10be1ee7cc164f18d826b51348ee26eee2ca4b Signed-off-by: Efraim Flashner <efraim@flashner.co.il> Evgeny Pisemsky 2024-07-19Revert "gnu: guile: Update to 3.0.10."...This reverts commit e31299010f6b8ccb3ccd1cc34a0d03483387ea36 and 24163eea584663568b68e19f364256fc7396b61f. The upgrade causes build failures, as noticeably by running ‘guix pull’, that are being investigated at <https://issues.guix.gnu.org/72183>. Change-Id: I946b43d938666d9dcddf1e5d856b02462bd8e453 Ludovic Courtès 2024-07-19gnu: guile-hoot: Build against guile-3.0-latest....* gnu/packages/guile-xyz.scm (guile-hoot)[inputs]: Replace guile-next with guile-3.0-latest. Change-Id: I5f0d2e07893ee587cc8e88df40c6f3da1a7a17cc David Thompson 2024-07-10gnu: guile-ncurses: Fix configure flags for Unicode support....The flag "--with-ncursesw" doesn't seem to exist for guile-ncurses, and it seemed to cause the build to not include unicode support. Building without it produces the expected "with ncursesw" support. This can be checked within the guile REPL using: > ,use (ncurses curses) > %wide-ncurses > #t ; has unicode and wide char support * gnu/packages/guile-xyz.scm (guile-ncurses)[arguments]: Remove ‘--with-ncursesw’ from #:configure-flags. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Change-Id: I081ce7b21df49652040017f10de5d5f98fe076d5 Trevor Arjeski 2024-06-20gnu: update guile-wisp to 1.0.12...The next release of Guile will include wisp. Until it is released, this updates guile-wisp to version 1.0.12. It includes wisp2lisp operating on stdin to enable more convenient conversion of wisp code to regular Scheme. Best wishes, Arne Subject: [PATCH] gnu: update guile-wisp to 1.0.12 * gnu/packages/guile-xyz.scm (guile-wisp): Update to 1.0.12 Change-Id: Ib5c32169c0ebd3b548852b2c6090586f441dcd6c Signed-off-by: jgart <jgart@dismail.de> Dr. Arne Babenhauserheide 2024-06-03gnu: guile-gsl: Update to 0.0.1-2.d33de92....* gnu/packages/guile-xyz.scm (guile-gsl): Update to 0.0.1-2.d33de92. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Artyom Bologov 2024-05-27gnu: guile-ares-rs: Update to 0.9.5....* gnu/packages/guile-xyz.scm (guile-ares-rs): Update to 0.9.5. Change-Id: Ib64c111ffbdf83b385366512a18d0ab621448531 Andrew Tropin 2024-05-22gnu: schmutz: update to commit f8043e....* gnu/packages/guile-xyz.scm (schmutz): Update to commit f8043e. [inputs]: Switch guile-2.2 to guile-3.0. Change-Id: Ibd3e5a5074119e3d2a9affcd7c98f47cb9f1f677 Signed-off-by: Zheng Junjie <zhengjunjie@iscas.ac.cn> Andy Tai 2024-05-14gnu: guile-lib: Fix tests for Guile 2.2....* gnu/packages/guile-xyz.scm (guile-lib)[source]: Add a patch that fixes tests for Guile 2.2. * gnu/packages/patches/guile-lib-fix-tests-for-guile2.2.patch: New file. * gnu/local.mk (dist_patch_DATA): Add "guile-lib-fix-tests-for-guile2.2.patch". Change-Id: Ia340e1de57c56366f0ee9271687a89fb9e41bc2d Signed-off-by: Christopher Baines <mail@cbaines.net> Artyom V. Poptsov 2024-05-14gnu: guile-lib: Remove "strip" phase....* gnu/packages/guile-xyz.scm (guile-lib) [arguments]: Remove "strip" phase. Change-Id: I6158bdb58555be4e84a2571a2a6e59eb23d39abf Signed-off-by: Christopher Baines <mail@cbaines.net> Artyom V. Poptsov 2024-05-12gnu: guile-tap: Update to 0.5.1....* gnu/packages/guile-xyz.scm (guile-tap): Update to 0.5.1. [arguments]: Patch bin/tap-harness. Change-Id: Ia8a02400f1d559fcec7eb9861f24a7116928814b Signed-off-by: Christopher Baines <mail@cbaines.net> Frank Terbeck 2024-05-11gnu: Add guile-avatar....* gnu/packages/guile-xyz.scm (guile-avatar): New variable. Change-Id: Ib255842ff8b59b7743c8d7be728a7ca7370024fe Signed-off-by: Arun Isaac <arunisaac@systemreboot.net> Felix Lechner 2024-05-10gnu: guile-xapian: Update to 0.4.0....* gnu/packages/guile-xyz.scm (guile-xapian): Update to 0.4.0. [source]: Switch to url-fetch. [native-inputs]: Remove autoconf, autoconf-archive, automake and libtool. [home-page]: Update home page. Change-Id: I1e8a1e0126ec2edf94060ba2545be987e380e137 Arun Isaac