~ruther/guix-local

8c35bfb68c63077cbc40214b87c2ac678a1443ba — Ludovic Courtès 12 years ago 8779d34
system: Rewrite 'union' using gexps.

* gnu/system.scm (union): Rewrite using 'gexp->derivation'.
1 files changed, 14 insertions(+), 29 deletions(-)

M gnu/system.scm
M gnu/system.scm => gnu/system.scm +14 -29
@@ 120,38 120,23 @@
  "Return a derivation that builds the union of INPUTS.  INPUTS is a list of
input tuples."
  (define builder
    '(begin
       (use-modules (guix build union))
    #~(begin
        (use-modules (guix build union))

        (define inputs '#$inputs)

       (setvbuf (current-output-port) _IOLBF)
       (setvbuf (current-error-port) _IOLBF)
        (setvbuf (current-output-port) _IOLBF)
        (setvbuf (current-error-port) _IOLBF)

       (let ((output (assoc-ref %outputs "out"))
             (inputs (map cdr %build-inputs)))
         (format #t "building union `~a' with ~a packages...~%"
                 output (length inputs))
         (union-build output inputs))))
        (format #t "building union `~a' with ~a packages...~%"
                #$output (length inputs))
        (union-build #$output inputs)))

  (mlet %store-monad
      ((inputs (sequence %store-monad
                         (map (match-lambda
                               ((or ((? package? p)) (? package? p))
                                (mlet %store-monad
                                    ((drv (package->derivation p system)))
                                  (return `(,name ,drv))))
                               (((? package? p) output)
                                (mlet %store-monad
                                    ((drv (package->derivation p system)))
                                  (return `(,name ,drv ,output))))
                               (x
                                (return x)))
                              inputs))))
    (derivation-expression name builder
                           #:system system
                           #:inputs inputs
                           #:modules '((guix build union))
                           #:guile-for-build guile
                           #:local-build? #t)))
  (gexp->derivation name builder
                    #:system system
                    #:modules '((guix build union))
                    #:guile-for-build guile
                    #:local-build? #t))

(define* (file-union name files)
  "Return a derivation that builds a directory containing all of FILES.  Each