From mboxrd@z Thu Jan 1 00:00:00 1970 From: iyzsong@member.fsf.org (=?utf-8?B?5a6L5paH5q2m?=) Subject: Re: [PATCH 2/2] profiles: Build GTK+ input module cache. Date: Sun, 25 Sep 2016 19:25:44 +0800 Message-ID: <87lgygusp3.fsf@member.fsf.org> References: <20160922202827.22039-1-rekado@elephly.net> <20160922202827.22039-2-rekado@elephly.net> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:44439) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bo7ZA-0005G4-Fv for guix-devel@gnu.org; Sun, 25 Sep 2016 07:25:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bo7Z4-0007NW-Kw for guix-devel@gnu.org; Sun, 25 Sep 2016 07:25:51 -0400 Received: from smtp14.openmailbox.org ([62.4.1.48]:33992) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bo7Z4-0007Mb-F9 for guix-devel@gnu.org; Sun, 25 Sep 2016 07:25:46 -0400 In-Reply-To: <20160922202827.22039-2-rekado@elephly.net> (Ricardo Wurmus's message of "Thu, 22 Sep 2016 22:28:27 +0200") List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: Ricardo Wurmus Cc: guix-devel@gnu.org Ricardo Wurmus writes: > * guix/profiles.scm (gtk-im-modules): New procedure. > (%default-profile-hooks): Add it. > --- > guix/profiles.scm | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 63 insertions(+) > > diff --git a/guix/profiles.scm b/guix/profiles.scm > index 78deeb7..1a522ae 100644 > --- a/guix/profiles.scm > +++ b/guix/profiles.scm > @@ -723,6 +723,68 @@ creates the GTK+ 'icon-theme.cache' file for each theme." > #:substitutable? #f) > (return #f)))) > > +(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))) > + (with-imported-modules '((guix build utils) > + (guix build union) > + (guix build profiles) > + (guix search-paths) > + (guix records)) > + #~(begin > + (use-modules (guix build utils) > + (guix build union) > + (guix build profiles) > + (ice-9 popen) > + (srfi srfi-26)) > + > + (let* ((prefix (string-append "/lib/gtk-" #$major ".0/" > + #$gtk-version)) > + (query (string-append #$gtk "/bin/gtk-query-immodules-" > + #$major ".0")) > + (destdir (string-append #$output prefix)) > + (moddirs (cons (string-append #$gtk prefix "/immodules") > + (filter file-exists? > + (map (cut string-append <> prefix "/immodules") > + '#$(manifest-inputs manifest)))))) > + > + ;; Union all the gtk immodules directories. > + (mkdir-p (string-append #$output "/lib/gtk-" #$major ".0")) > + (union-build destdir moddirs #:log-port > (%make-void-port "w")) I think there is no need to run `union-build'. Other hooks use it because they (eg: update-icon-cache, update-mime-databes) require input and output files in a single directory. > + > + ;; Generate a new 'immodules.cache' file. > + (let ((pipe (apply open-pipe* > + OPEN_READ query > + (map readlink (find-files > destdir "\\.so$")))) and use 'moddirs' here should work.