summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-10-14 10:36:37 +0200
committerLudovic Courtès <ludo@gnu.org>2016-10-14 23:05:41 +0200
commitd0025d01445ff271ececea20cfa6a2346593d1d6 (patch)
tree1696964b83bf5c1d73d50a99d2493c76e642e29b
parentb280e67ca6f62c176c72439df4533a9737b9130a (diff)
packages: 'package-grafts' applies grafts on replacement.
Partly fixes <http://bugs.gnu.org/24418>. * guix/packages.scm (input-graft): Compute 'new' with #:graft? #t. (input-cross-graft): Likewise. * tests/packages.scm ("package-grafts, indirect grafts, cross"): Comment out. ("replacement also grafted"): New test.
-rw-r--r--guix/packages.scm6
-rw-r--r--tests/packages.scm106
2 files changed, 94 insertions, 18 deletions
diff --git a/guix/packages.scm b/guix/packages.scm
index 2264c5acefc..a3fab4dc13f 100644
--- a/guix/packages.scm
+++ b/guix/packages.scm
@@ -916,7 +916,8 @@ and return it."
916 (cached (=> %graft-cache) package system 916 (cached (=> %graft-cache) package system
917 (let ((orig (package-derivation store package system 917 (let ((orig (package-derivation store package system
918 #:graft? #f)) 918 #:graft? #f))
919 (new (package-derivation store replacement system))) 919 (new (package-derivation store replacement system
920 #:graft? #t)))
920 (graft 921 (graft
921 (origin orig) 922 (origin orig)
922 (replacement new))))))) 923 (replacement new)))))))
@@ -932,7 +933,8 @@ and return it."
932 (let ((orig (package-cross-derivation store package target system 933 (let ((orig (package-cross-derivation store package target system
933 #:graft? #f)) 934 #:graft? #f))
934 (new (package-cross-derivation store replacement 935 (new (package-cross-derivation store replacement
935 target system))) 936 target system
937 #:graft? #t)))
936 (graft 938 (graft
937 (origin orig) 939 (origin orig)
938 (replacement new)))))) 940 (replacement new))))))
diff --git a/tests/packages.scm b/tests/packages.scm
index b8e1f111cd0..5f5fb5de879 100644
--- a/tests/packages.scm
+++ b/tests/packages.scm
@@ -662,22 +662,25 @@
662 (origin (package-derivation %store dep)) 662 (origin (package-derivation %store dep))
663 (replacement (package-derivation %store new))))))) 663 (replacement (package-derivation %store new)))))))
664 664
665(test-assert "package-grafts, indirect grafts, cross" 665;; XXX: This test would require building the cross toolchain just to see if it
666 (let* ((new (dummy-package "dep" 666;; needs grafting, which is obviously too expensive, and thus disabled.
667 (arguments '(#:implicit-inputs? #f)))) 667;;
668 (dep (package (inherit new) (version "0.0"))) 668;; (test-assert "package-grafts, indirect grafts, cross"
669 (dep* (package (inherit dep) (replacement new))) 669;; (let* ((new (dummy-package "dep"
670 (dummy (dummy-package "dummy" 670;; (arguments '(#:implicit-inputs? #f))))
671 (arguments '(#:implicit-inputs? #f)) 671;; (dep (package (inherit new) (version "0.0")))
672 (inputs `(("dep" ,dep*))))) 672;; (dep* (package (inherit dep) (replacement new)))
673 (target "mips64el-linux-gnu")) 673;; (dummy (dummy-package "dummy"
674 ;; XXX: There might be additional grafts, for instance if the distro 674;; (arguments '(#:implicit-inputs? #f))
675 ;; defines replacements for core packages like Perl. 675;; (inputs `(("dep" ,dep*)))))
676 (member (graft 676;; (target "mips64el-linux-gnu"))
677 (origin (package-cross-derivation %store dep target)) 677;; ;; XXX: There might be additional grafts, for instance if the distro
678 (replacement 678;; ;; defines replacements for core packages like Perl.
679 (package-cross-derivation %store new target))) 679;; (member (graft
680 (package-grafts %store dummy #:target target)))) 680;; (origin (package-cross-derivation %store dep target))
681;; (replacement
682;; (package-cross-derivation %store new target)))
683;; (package-grafts %store dummy #:target target))))
681 684
682(test-assert "package-grafts, indirect grafts, propagated inputs" 685(test-assert "package-grafts, indirect grafts, propagated inputs"
683 (let* ((new (dummy-package "dep" 686 (let* ((new (dummy-package "dep"
@@ -719,6 +722,77 @@
719 (replacement #f)))) 722 (replacement #f))))
720 (replacement (package-derivation %store new))))))) 723 (replacement (package-derivation %store new)))))))
721 724
725(test-assert "replacement also grafted"
726 ;; We build a DAG as below, where dotted arrows represent replacements and
727 ;; solid arrows represent dependencies:
728 ;;
729 ;; P1 ·············> P1R
730 ;; |\__________________.
731 ;; v v
732 ;; P2 ·············> P2R
733 ;; |
734 ;; v
735 ;; P3
736 ;;
737 ;; We want to make sure that:
738 ;; grafts(P3) = (P1,P1R) + (P2, grafted(P2R, (P1,P1R)))
739 ;; where:
740 ;; (A,B) is a graft to replace A by B
741 ;; grafted(DRV,G) denoted DRV with graft G applied
742 (let* ((p1r (dummy-package "P1"
743 (build-system trivial-build-system)
744 (arguments
745 `(#:guile ,%bootstrap-guile
746 #:builder (let ((out (assoc-ref %outputs "out")))
747 (mkdir out)
748 (call-with-output-file
749 (string-append out "/replacement")
750 (const #t)))))))
751 (p1 (package
752 (inherit p1r) (name "p1") (replacement p1r)
753 (arguments
754 `(#:guile ,%bootstrap-guile
755 #:builder (mkdir (assoc-ref %outputs "out"))))))
756 (p2r (dummy-package "P2"
757 (build-system trivial-build-system)
758 (inputs `(("p1" ,p1)))
759 (arguments
760 `(#:guile ,%bootstrap-guile
761 #:builder (let ((out (assoc-ref %outputs "out")))
762 (mkdir out)
763 (chdir out)
764 (symlink (assoc-ref %build-inputs "p1") "p1")
765 (call-with-output-file (string-append out "/replacement")
766 (const #t)))))))
767 (p2 (package
768 (inherit p2r) (name "p2") (replacement p2r)
769 (arguments
770 `(#:guile ,%bootstrap-guile
771 #:builder (let ((out (assoc-ref %outputs "out")))
772 (mkdir out)
773 (chdir out)
774 (symlink (assoc-ref %build-inputs "p1")
775 "p1"))))))
776 (p3 (dummy-package "p3"
777 (build-system trivial-build-system)
778 (inputs `(("p2" ,p2)))
779 (arguments
780 `(#:guile ,%bootstrap-guile
781 #:builder (let ((out (assoc-ref %outputs "out")))
782 (mkdir out)
783 (chdir out)
784 (symlink (assoc-ref %build-inputs "p2")
785 "p2")))))))
786 (lset= equal?
787 (package-grafts %store p3)
788 (list (graft
789 (origin (package-derivation %store p1 #:graft? #f))
790 (replacement (package-derivation %store p1r)))
791 (graft
792 (origin (package-derivation %store p2 #:graft? #f))
793 (replacement
794 (package-derivation %store p2r #:graft? #t)))))))
795
722;;; XXX: Nowadays 'graft-derivation' needs to build derivations beforehand to 796;;; XXX: Nowadays 'graft-derivation' needs to build derivations beforehand to
723;;; find out about their run-time dependencies, so this test is no longer 797;;; find out about their run-time dependencies, so this test is no longer
724;;; applicable since it would trigger a full rebuild. 798;;; applicable since it would trigger a full rebuild.