diff options
Diffstat (limited to 'guix-package.in')
-rw-r--r-- | guix-package.in | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/guix-package.in b/guix-package.in index 053f8fbf83..58164c6e46 100644 --- a/guix-package.in +++ b/guix-package.in @@ -402,6 +402,14 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) ;; sub-derivation name. (define request name) + (define (ensure-output p sub-drv) + (if (member sub-drv (package-outputs p)) + p + (leave (_ "~a: error: package `~a' lacks output `~a'~%") + (location->string (package-location p)) + (package-full-name p) + sub-drv))) + (let*-values (((name sub-drv) (match (string-rindex name #\:) (#f (values name "out")) @@ -411,7 +419,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) (package-name->name+version name))) (match (find-packages-by-name name version) ((p) - (list name (package-version p) sub-drv p)) + (list name (package-version p) sub-drv (ensure-output p sub-drv))) ((p p* ...) (format (current-error-port) (_ "warning: ambiguous package specification `~a'~%") @@ -420,7 +428,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n")) (_ "warning: choosing ~a from ~a~%") (package-full-name p) (location->string (package-location p))) - (list name (package-version p) sub-drv p)) + (list name (package-version p) sub-drv (ensure-output p sub-drv))) (() (leave (_ "~a: package not found~%") request))))) |