build: Bugfix for store.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 19 Jul 2017 17:11:26 +0000 (19:11 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 26 Jul 2017 09:36:07 +0000 (11:36 +0200)
* guile/guix/make.scm (store): Add each store file only once.

guile/guix/make.scm

index cac02a6a8a822a22d028bd8b7a1f41263ecf708e..b793aa43ee1c1c42e720dd79e475a730f9d2c1b8 100644 (file)
                                          (begin (set! %status 1) "FAIL"))))))))))
 
 (define (hash-target o)
+  (if (find (negate identity) (target-inputs o))
+      (format (current-error-port) "invalid inputs[~s]: ~s\n" (target-file-name o) (target-inputs o)))
   (let ((inputs (target-inputs o)))
     (if (null? inputs) (or (target-hash o) (target-hash (store #:add o)))
         (let ((input-shas (map hash-target inputs)))
                                 (hash-target add))))
                    (if (not key) (error "store: no hash for:" add))
                    (store #:add add #:key key)))
-            (add-file (and (file-exists? add-file)
-                           (store #:add (target (file-name add-file)))))
+            (add-file
+             (or (and=> (find (lambda (t) (equal? (target-file-name t) add-file)) (map cdr *store*))
+                        (compose (cut store #:get <>) target-hash))
+                 (and (file-exists? add-file)
+                      (store #:add (target (file-name add-file))))
+                 (error (format #f "store add-file: no such file: ~s\n" add-file))))
             ((and get key)
              (or (assoc-ref *store* key)
                  (let ((store-file (store-file-name key))