Skip to content
Snippets Groups Projects
Unverified Commit 176febe3 authored by Ludovic Courtès's avatar Ludovic Courtès
Browse files

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.
parent 48b44430
No related branches found
No related tags found
No related merge requests found
;;; 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 @@ (define* (profile-derivation manifest ...@@ -933,13 +933,16 @@ (define* (profile-derivation manifest
#: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 @@ (define search-paths ...@@ -1000,6 +1003,7 @@ (define search-paths
(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
......
;;; 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 @@ (define glibc ...@@ -212,6 +212,35 @@ (define glibc
#: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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment