diff --git a/guix/derivations.scm b/guix/derivations.scm index b1f54232bca4a97b7047e5e584905f0afe2275da..6fbce14da0d6ef011479cf92309991945ca35d73 100644 --- a/guix/derivations.scm +++ b/guix/derivations.scm @@ -364,6 +364,15 @@ (define* (derivation store name system builder args env-vars inputs store path and <derivation> object. When HASH, HASH-ALGO, and HASH-MODE are given, a fixed-output derivation is created---i.e., one whose result is known in advance, such as a file download." + (define direct-store-path? + (let ((len (+ 1 (string-length (%store-prefix))))) + (lambda (p) + ;; Return #t if P is a store path, and not a sub-directory of a + ;; store path. This predicate is needed because files *under* a + ;; store path are not valid inputs. + (and (store-path? p) + (not (string-index (substring p len) #\/)))))) + (define (add-output-paths drv) ;; Return DRV with an actual store path for each of its output and the ;; corresponding environment variable. @@ -411,9 +420,9 @@ (define (env-vars-with-empty-outputs) (make-derivation-output "" hash-algo hash))) outputs)) (inputs (map (match-lambda - (((? store-path? input)) + (((? direct-store-path? input)) (make-derivation-input input '("out"))) - (((? store-path? input) sub-drvs ...) + (((? direct-store-path? input) sub-drvs ...) (make-derivation-input input sub-drvs)) ((input . _) (let ((path (add-to-store store