M guix/scripts/build.scm => guix/scripts/build.scm +10 -9
@@ 592,15 592,16 @@ build."
(parameterize ((%graft? graft?))
(append-map (match-lambda
((? package? p)
- (match src
- (#f
- (list (package->derivation store p system)))
- (#t
- (let ((s (package-source p)))
- (list (package-source-derivation store s))))
- (proc
- (map (cut package-source-derivation store <>)
- (proc p)))))
+ (let ((p (or (and graft? (package-replacement p)) p)))
+ (match src
+ (#f
+ (list (package->derivation store p system)))
+ (#t
+ (let ((s (package-source p)))
+ (list (package-source-derivation store s))))
+ (proc
+ (map (cut package-source-derivation store <>)
+ (proc p))))))
((? derivation? drv)
(list drv))
((? procedure? proc)
M tests/guix-build.sh => tests/guix-build.sh +9 -0
@@ 43,6 43,7 @@ trap "rm -rf $module_dir" EXIT
cat > "$module_dir/foo.scm"<<EOF
(define-module (foo)
+ #:use-module (guix tests)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix build-system trivial))
@@ 88,6 89,10 @@ cat > "$module_dir/foo.scm"<<EOF
(synopsis "Dummy package")
(description "bar is a dummy package for testing.")
(license #f)))
+
+(define-public baz
+ (dummy-package "baz" (replacement foo)))
+
EOF
GUIX_PACKAGE_PATH="$module_dir"
@@ 97,6 102,10 @@ export GUIX_PACKAGE_PATH
guix build -d -S foo
guix build -d -S foo | grep -e 'foo\.tar\.gz'
+# 'baz' has a replacement so we should be getting the replacement's source.
+(unset GUIX_BUILD_OPTIONS;
+ test "`guix build -d -S baz`" = "`guix build -d -S foo`")
+
guix build -d --sources=package foo
guix build -d --sources=package foo | grep -e 'foo\.tar\.gz'