profiles: Add lowerable <profile> record type.

* guix/profiles.scm (<profile>): New record type.
* tests/profiles.scm ("<profile>"): New test.
This commit is contained in:
Ludovic Courtès 2020-04-22 15:43:43 +02:00
parent 1408e2abeb
commit ef674a24c5
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 48 additions and 1 deletions

View file

@ -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)))