~ruther/guix-local

66f217b43aca603326dab17d4dda1a398bf4fb8c — Ludovic Courtès 8 years ago 28faa40
pull: Build with an ABI-compatible Guile.

Fixes <https://bugs.gnu.org/29570>.
Reported by Vagrant Cascadian <vagrant@debian.org>.

* build-aux/build-self.scm (matching-guile-2.2): New procedure.
(guile-for-build): Use it.
1 files changed, 19 insertions(+), 2 deletions(-)

M build-aux/build-self.scm
M build-aux/build-self.scm => build-aux/build-self.scm +19 -2
@@ 120,13 120,30 @@ person's version identifier."
  ;; XXX: Replace with a Git commit id.
  (date->string (current-date 0) "~Y~m~d.~H"))

(define (matching-guile-2.2)
  "Return a Guile 2.2 with the same version as the current one or immediately
older than then current one.  This is so that we do not build ABI-incompatible
objects.  See <https://bugs.gnu.org/29570>."
  (let loop ((packages (find-packages-by-name "guile" "2.2"))
             (best     #f))
    (match packages
      (()
       best)
      ((head tail ...)
       (if (string=? (package-version head) (version))
           head
           (if best
               (if (version>? (package-version head) (version))
                   (loop tail best)
                   (loop tail head))
               (loop tail head)))))))

(define (guile-for-build)
  "Return a derivation for Guile 2.0 or 2.2, whichever matches the currently
running Guile."
  (package->derivation (cond-expand
                         (guile-2.2
                          (canonical-package
                           (specification->package "guile@2.2")))
                          (canonical-package (matching-guile-2.2)))
                         (else
                          (canonical-package
                           (specification->package "guile@2.0"))))))