|
From: | Ludovic Courtès |
Subject: | Re: [PATCH 2/2] profiles: Build GTK+ input module cache. |
Date: | Mon, 26 Sep 2016 13:04:13 +0200 |
User-agent: | Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) |
Ricardo Wurmus <address@hidden> skribis: > * guix/profiles.scm (gtk-im-modules): New procedure. > (%default-profile-hooks): Add it. Very nice! > +(define (gtk-im-modules manifest) > + "Return a derivation that builds the cache files for input method modules > +for both major versions of GTK+." > + > + (mlet %store-monad ((gtk+ (manifest-lookup-package manifest "gtk+" "3")) > + (gtk+-2 (manifest-lookup-package manifest "gtk+" "2"))) > + > + (define (build gtk gtk-version) > + (let ((major (string-take gtk-version 1))) Rather: (version-prefix gtk-version 1). > + ;; Generate a new 'immodules.cache' file. > + (let ((pipe (apply open-pipe* > + OPEN_READ query > + (map readlink (find-files destdir > "\\.so$")))) > + (outfile (string-append #$output prefix > + "/immodules-gtk" #$major > ".cache"))) > + (dynamic-wind > + (const #t) > + (lambda () > + (call-with-output-file outfile > + (lambda (out) > + (while (not (eof-object? (peek-char pipe))) > + (write-char (read-char pipe) out)))) > + #t) > + (lambda () > + (close-pipe pipe))))))))) What about something along these lines instead: (define result (call-with-output-file "immodules.cache" (lambda (port) (close-fdes 1) (dup->fdes port 1) (system* query …)))) ;; Fail when gtk-immodules-query fails. (zero? result) > + ;; Don't run the hook when there's nothing to do. > + (let ((gexp #~(begin > + #$(if gtk+ (build gtk+ "3.0.0") #t) > + #$(if gtk+-2 (build gtk+-2 "2.10.0") #t)))) Simply: (let ((gexp (cond (gtk+ (build gtk+ "3.0.0")) (gtk+-2 (built gtk+-2 …)) (else #f)))) …) We should avoid the hardcoded version numbers though. Otherwise LGTM. Could you send an updated patch? Thank you! Ludo’.
[Prev in Thread] | Current Thread | [Next in Thread] |