~ruther/guix-local

b19a49d015070f9109c157bc39b47574a8dad481 — Ludovic Courtès 8 years ago 6d833b1
locale: Demonadify the locale creation API.

* gnu/system/locale.scm (single-locale-directory): Use 'computed-file'
instead of 'gexp->derivation'.
(locale-directory): Adjust accordingly and do the same.
* gnu/system.scm (operating-system-directory-base-entries): Adjust
accordingly.
2 files changed, 23 insertions(+), 26 deletions(-)

M gnu/system.scm
M gnu/system/locale.scm
M gnu/system.scm => gnu/system.scm +12 -11
@@ 403,17 403,18 @@ OS."
(define* (operating-system-directory-base-entries os #:key container?)
  "Return the basic entries of the 'system' directory of OS for use as the
value of the SYSTEM-SERVICE-TYPE service."
  (mlet %store-monad ((locale (operating-system-locale-directory os)))
    (if container?
        (return `(("locale" ,locale)))
        (mlet %store-monad
            ((kernel  ->  (operating-system-kernel os))
             (initrd      (operating-system-initrd-file os))
             (params      (operating-system-boot-parameters-file os)))
          (return `(("kernel" ,kernel)
                    ("parameters" ,params)
                    ("initrd" ,initrd)
                    ("locale" ,locale)))))))      ;used by libc
  (let ((locale (operating-system-locale-directory os)))
    (with-monad %store-monad
      (if container?
          (return `(("locale" ,locale)))
          (mlet %store-monad
              ((kernel  ->  (operating-system-kernel os))
               (initrd      (operating-system-initrd-file os))
               (params      (operating-system-boot-parameters-file os)))
            (return `(("kernel" ,kernel)
                      ("parameters" ,params)
                      ("initrd" ,initrd)
                      ("locale" ,locale))))))))   ;used by libc

(define* (essential-services os #:key container?)
  "Return the list of essential services for OS.  These are special services

M gnu/system/locale.scm => gnu/system/locale.scm +11 -15
@@ 19,7 19,6 @@
(define-module (gnu system locale)
  #:use-module (guix gexp)
  #:use-module (guix store)
  #:use-module (guix monads)
  #:use-module (guix records)
  #:use-module (guix packages)
  #:use-module (gnu packages base)


@@ 118,8 117,7 @@ of LIBC."
         (and #$@(map (cut localedef-command <> #:libc libc)
                      locales)))))

  (gexp->derivation (string-append "locale-" version) build
                    #:local-build? #t))
  (computed-file (string-append "locale-" version) build))

(define* (locale-directory locales
                           #:key (libcs %default-locale-libcs))


@@ 133,18 131,16 @@ data format changes between libc versions."
    ((libc)
     (single-locale-directory locales #:libc libc))
    ((libcs ..1)
     (mlet %store-monad ((dirs (mapm %store-monad
                                     (lambda (libc)
                                       (single-locale-directory locales
                                                                #:libc libc))
                                     libcs)))
       (gexp->derivation "locale-multiple-versions"
                         (with-imported-modules '((guix build union))
                           #~(begin
                               (use-modules (guix build union))
                               (union-build #$output (list #$@dirs))))
                         #:local-build? #t
                         #:substitutable? #f)))))
     (let ((dirs (map (lambda (libc)
                        (single-locale-directory locales #:libc libc))
                      libcs)))
       (computed-file "locale-multiple-versions"
                      (with-imported-modules '((guix build union))
                        #~(begin
                            (use-modules (guix build union))
                            (union-build #$output (list #$@dirs))))
                      #:options '(#:local-build? #t
                                  #:substitutable? #f))))))

(define %default-locale-libcs
  ;; The libcs for which we build locales by default.