aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-04-22 15:43:43 +0200
committerLudovic Courtès <ludo@gnu.org>2020-04-26 22:49:48 +0200
commitef674a24c527eaf54801707d34dbf5d12ec139cb (patch)
treeacb9181b00419452d71e69df71c36f8537e95ca4
parent1408e2abeb6e521c6929fb79b37b7d880dc78975 (diff)
downloadpatches-ef674a24c527eaf54801707d34dbf5d12ec139cb.tar
patches-ef674a24c527eaf54801707d34dbf5d12ec139cb.tar.gz
profiles: Add lowerable <profile> record type.
* guix/profiles.scm (<profile>): New record type. * tests/profiles.scm ("<profile>"): New test.
-rw-r--r--guix/profiles.scm36
-rw-r--r--tests/profiles.scm13
2 files changed, 48 insertions, 1 deletions
diff --git a/guix/profiles.scm b/guix/profiles.scm
index 88606fa4ce..ab265cce62 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -125,6 +125,15 @@
profile-derivation
profile-search-paths
+ profile
+ profile?
+ profile-name
+ profile-content
+ profile-hooks
+ profile-locales?
+ profile-allow-collisions?
+ profile-relative-symlinks?
+
generation-number
generation-profile
generation-numbers
@@ -1656,6 +1665,33 @@ are cross-built for TARGET."
. ,(length
(manifest-entries manifest))))))))
+;; Declarative profile.
+(define-record-type* <profile> profile make-profile
+ profile?
+ (name profile-name (default "profile")) ;string
+ (content profile-content) ;<manifest>
+ (hooks profile-hooks ;list of procedures
+ (default %default-profile-hooks))
+ (locales? profile-locales? ;Boolean
+ (default #t))
+ (allow-collisions? profile-allow-collisions? ;Boolean
+ (default #f))
+ (relative-symlinks? profile-relative-symlinks? ;Boolean
+ (default #f)))
+
+(define-gexp-compiler (profile-compiler (profile <profile>) system target)
+ "Compile PROFILE to a derivation."
+ (match profile
+ (($ <profile> name manifest hooks
+ locales? allow-collisions? relative-symlinks?)
+ (profile-derivation manifest
+ #:name name
+ #:hooks hooks
+ #:locales? locales?
+ #:allow-collisions? allow-collisions?
+ #:relative-symlinks? relative-symlinks?
+ #:system system #:target target))))
+
(define* (profile-search-paths profile
#:optional (manifest (profile-manifest profile))
#:key (getenv (const #f)))
diff --git a/tests/profiles.scm b/tests/profiles.scm
index 21c912a532..055924ba3e 100644
--- a/tests/profiles.scm
+++ b/tests/profiles.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2014 Alex Kost <alezost@gmail.com>
;;;
;;; This file is part of GNU Guix.
@@ -223,6 +223,17 @@
(string=? (dirname (readlink bindir))
(derivation->output-path guile))))))
+(test-assertm "<profile>"
+ (mlet* %store-monad
+ ((entry -> (package->manifest-entry %bootstrap-guile))
+ (profile -> (profile (hooks '()) (locales? #f)
+ (content (manifest (list entry)))))
+ (drv (lower-object profile))
+ (profile -> (derivation->output-path drv))
+ (bindir -> (string-append profile "/bin"))
+ (_ (built-derivations (list drv))))
+ (return (file-exists? (string-append bindir "/guile")))))
+
(test-assertm "profile-derivation relative symlinks, one entry"
(mlet* %store-monad
((entry -> (package->manifest-entry %bootstrap-guile))