From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark H Weaver Subject: Re: [PATCH] profiles: Generate GHC's package database cache. Date: Sun, 05 Apr 2015 01:21:59 -0400 Message-ID: <87pp7j40aw.fsf@netris.org> References: Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:55550) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yed0H-00037w-Fg for guix-devel@gnu.org; Sun, 05 Apr 2015 01:21:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Yed0C-0006ho-WE for guix-devel@gnu.org; Sun, 05 Apr 2015 01:21:49 -0400 Received: from world.peace.net ([50.252.239.5]:54589) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Yed0C-0006hk-T6 for guix-devel@gnu.org; Sun, 05 Apr 2015 01:21:44 -0400 In-Reply-To: (Federico Beffa's message of "Sat, 4 Apr 2015 23:10:57 +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-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: Federico Beffa Cc: Guix-devel Federico Beffa writes: > From dfe3b875267731006512b8a9803aaa56f07db12e Mon Sep 17 00:00:00 2001 > From: Federico Beffa > Date: Sat, 4 Apr 2015 22:51:13 +0200 > Subject: [PATCH] profiles: Generate GHC's package database cache. [...] > +(define (ghc-package-cache-file manifest) > + "Return a derivation that builds the GHC 'package.cache' file for all the > +entries of MANIFEST." > + (define ghc ;lazy reference > + (module-ref (resolve-interface '(gnu packages haskell)) 'ghc)) > + > + (define build > + #~(begin > + (use-modules (guix build utils) > + (srfi srfi-1) (srfi srfi-26) > + (ice-9 ftw)) > + > + (define ghc-name-version > + (let* ((base (basename #+ghc))) > + (string-drop base > + (+ 1 (string-index base #\-))))) > + > + (define db-subdir > + (string-append "lib/" ghc-name-version "/package.conf.d")) > + > + (define db-dir > + (string-append #$output "/" db-subdir)) > + > + (define (conf-files top) > + (find-files (string-append top "/" db-subdir) "\\.conf$")) > + > + (define (copy-conf-file conf) > + (let ((base (basename conf))) > + (copy-file conf (string-append db-dir "/" base)))) > + > + (system* (string-append #+ghc "/bin/ghc-pkg") "init" db-dir) > + (for-each copy-conf-file > + (append-map conf-files > + '#$(manifest-inputs manifest))) > + (let ((success > + (zero? > + (system* (string-append #+ghc "/bin/ghc-pkg") "recache" > + (string-append "--package-db=" db-dir))))) > + (for-each delete-file (find-files db-dir "\\.conf$")) > + success))) > + > + ;; Don't depend on GHC when there's nothing to do. > + (if (null? (manifest-entries manifest)) > + (gexp->derivation "ghc-package-cache" #~(mkdir #$output)) > + (gexp->derivation "ghc-package-cache" build > + #:modules '((guix build utils)) > + #:local-build? #t))) I believe this will require GHC to build *any* non-empty profile. Since GHC is only available on Intel platforms, this will break profile building on MIPS and ARM. Even on Intel platforms, I don't want to have to install GHC to build profiles that don't contain any Haskell packages, especially since it involves trusting the upstream binaries from GHC. What if I want to use Hugs instead, or some other Haskell implementation that is capable of being bootstrapped from source code. Is GHC the only tool that can do this job? Mark