profiles: Packages in a profile can be cross-compiled.
* guix/profiles.scm (profile-derivation): Add #:target parameter; pass it to 'gexp->derivation'. * tests/profiles.scm ("profile-derivation, cross-compilation"): New test.
This commit is contained in:
parent
48b444304e
commit
176febe377
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
|
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
|
||||||
;;; Copyright © 2014, 2016 Alex Kost <alezost@gmail.com>
|
;;; Copyright © 2014, 2016 Alex Kost <alezost@gmail.com>
|
||||||
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
|
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
|
||||||
|
@ -933,13 +933,16 @@ files for the truetype fonts of the @var{manifest} entries."
|
||||||
#:key
|
#:key
|
||||||
(hooks %default-profile-hooks)
|
(hooks %default-profile-hooks)
|
||||||
(locales? #t)
|
(locales? #t)
|
||||||
system)
|
system target)
|
||||||
"Return a derivation that builds a profile (aka. 'user environment') with
|
"Return a derivation that builds a profile (aka. 'user environment') with
|
||||||
the given MANIFEST. The profile includes additional derivations returned by
|
the given MANIFEST. The profile includes additional derivations returned by
|
||||||
the monadic procedures listed in HOOKS--such as an Info 'dir' file, etc.
|
the monadic procedures listed in HOOKS--such as an Info 'dir' file, etc.
|
||||||
|
|
||||||
When LOCALES? is true, the build is performed under a UTF-8 locale; this adds
|
When LOCALES? is true, the build is performed under a UTF-8 locale; this adds
|
||||||
a dependency on the 'glibc-utf8-locales' package."
|
a dependency on the 'glibc-utf8-locales' package.
|
||||||
|
|
||||||
|
When TARGET is true, it must be a GNU triplet, and the packages in MANIFEST
|
||||||
|
are cross-built for TARGET."
|
||||||
(mlet %store-monad ((system (if system
|
(mlet %store-monad ((system (if system
|
||||||
(return system)
|
(return system)
|
||||||
(current-system)))
|
(current-system)))
|
||||||
|
@ -1000,6 +1003,7 @@ a dependency on the 'glibc-utf8-locales' package."
|
||||||
|
|
||||||
(gexp->derivation "profile" builder
|
(gexp->derivation "profile" builder
|
||||||
#:system system
|
#:system system
|
||||||
|
#:target target
|
||||||
|
|
||||||
;; Not worth offloading.
|
;; Not worth offloading.
|
||||||
#:local-build? #t
|
#:local-build? #t
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2013, 2014, 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
|
;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
|
@ -212,6 +212,35 @@
|
||||||
#:locales? #f)))
|
#:locales? #f)))
|
||||||
(return (derivation-inputs drv))))
|
(return (derivation-inputs drv))))
|
||||||
|
|
||||||
|
(test-assertm "profile-derivation, cross-compilation"
|
||||||
|
(mlet* %store-monad
|
||||||
|
((manifest -> (packages->manifest (list packages:sed packages:grep)))
|
||||||
|
(target -> "arm-linux-gnueabihf")
|
||||||
|
(grep (package->cross-derivation packages:grep target))
|
||||||
|
(sed (package->cross-derivation packages:sed target))
|
||||||
|
(locales (package->derivation packages:glibc-utf8-locales))
|
||||||
|
(drv (profile-derivation manifest
|
||||||
|
#:hooks '()
|
||||||
|
#:locales? #t
|
||||||
|
#:target target)))
|
||||||
|
(define (find-input name)
|
||||||
|
(let ((name (string-append name ".drv")))
|
||||||
|
(any (lambda (input)
|
||||||
|
(let ((input (derivation-input-path input)))
|
||||||
|
(and (string-suffix? name input) input)))
|
||||||
|
(derivation-inputs drv))))
|
||||||
|
|
||||||
|
;; The inputs for grep and sed should be cross-build derivations, but that
|
||||||
|
;; for the glibc-utf8-locales should be a native build.
|
||||||
|
(return (and (string=? (derivation-system drv) (%current-system))
|
||||||
|
(string=? (find-input (package-full-name packages:grep))
|
||||||
|
(derivation-file-name grep))
|
||||||
|
(string=? (find-input (package-full-name packages:sed))
|
||||||
|
(derivation-file-name sed))
|
||||||
|
(string=? (find-input
|
||||||
|
(package-full-name packages:glibc-utf8-locales))
|
||||||
|
(derivation-file-name locales))))))
|
||||||
|
|
||||||
(test-assert "package->manifest-entry defaults to \"out\""
|
(test-assert "package->manifest-entry defaults to \"out\""
|
||||||
(let ((outputs (package-outputs packages:glibc)))
|
(let ((outputs (package-outputs packages:glibc)))
|
||||||
(equal? (manifest-entry-output
|
(equal? (manifest-entry-output
|
||||||
|
|
Loading…
Reference in New Issue