From mboxrd@z Thu Jan 1 00:00:00 1970 From: ludo@gnu.org (Ludovic =?utf-8?Q?Court=C3=A8s?=) Subject: Re: [PATCH] gnu: make-bootstrap: Produce the correct %glibc-bootstrap-tarball for Hurd systems. Date: Tue, 30 Jun 2015 21:56:59 +0200 Message-ID: <87egktynp0.fsf@gnu.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:52487) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZA1eX-0007aP-A2 for Guix-devel@gnu.org; Tue, 30 Jun 2015 15:57:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZA1eU-00083M-IP for Guix-devel@gnu.org; Tue, 30 Jun 2015 15:57:09 -0400 In-Reply-To: (Manolis Ragkousis's message of "Tue, 30 Jun 2015 13:14:58 +0300") 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: Manolis Ragkousis Cc: Guix-devel =CE=93=CE=B5=CE=B9=CE=AC =CF=83=CE=B1=CF=82! Manolis Ragkousis skribis: > I chose this approach in %glibc-stripped because later on, as more > things will be needed to be Hurd-specific, it's going to get messy > with conditional code. This way we can safely change/add things > without worrying it will break the other. WDYT? The problem is that this patch duplicates 54 lines that are mostly identical. I think it would be preferable to make it more concise. > From fa84fdeb8a479f3b59b38f762f551d744def2e5f Mon Sep 17 00:00:00 2001 > From: Manolis Ragkousis > Date: Tue, 30 Jun 2015 12:53:24 +0300 > Subject: [PATCH] gnu: make-bootstrap: Produce the correct > %glibc-bootstrap-tarball for Hurd systems. > > * gnu/packages/make-bootstrap.scm (%glibc-bootstrap-tarball): Make it a p= rocedure. > (%glibc-stripped): Make it a procedure that produces the correct %glibc= -stripped > depending on the target system. [...] > + (match target > + ("i586-pc-gnu" > + (let ((glibc (glibc-for-bootstrap))) > + (package (inherit glibc/hurd) > + (name "glibc-stripped") > + (build-system trivial-build-system) > + (arguments > + `(#:modules ((guix build utils)) > + #:builder > + (begin > + (use-modules (guix build utils)) > + > + (setvbuf (current-output-port) _IOLBF) > + (let* ((out (assoc-ref %outputs "out")) > + (libdir (string-append out "/lib")) > + (incdir (string-append out "/include")) > + (libc (assoc-ref %build-inputs "libc")) > + (mach (assoc-ref %build-inputs "gnumach-headers"))) > + (mkdir-p libdir) > + (for-each (lambda (file) > + (let ((target (string-append libdir "/" > + (basename file))= )) > + (copy-file file target) > + (remove-store-references target))) > + (find-files (string-append libc "/lib") > + "^(crt.*|ld.*|lib(c|m|dl|rt|pthread= |nsl|util).*\\.so(\\..*)?|libc_nonshared\\.a)$")) > + > + (copy-recursively (string-append libc "/include") incdir) > + > + (copy-recursively (string-append mach "/include/mach") > + (string-append incdir "/mach")) > + #t)))) What about introducing a (guix build make-bootstrap) module to hide all this plumbing? It could expose a procedure like: (define (make-stripped-libc output libc kernel-headers) "Copy to OUTPUT the subset of LIBC and KERNEL-HEADERS that is needed when producing a bootstrap libc." ;; ... (if (directory-exists? (string-append kernel-headers "/mach")) (copy-mach-headers output kernel-headers) (copy-linux-headers output kernel-headers))) ;; ... That way, the #:builder above would become: #:builder (begin (use-modules (guix build make-bootstrap)) (make-stripped-libc (assoc-ref %outputs "out") (assoc-ref %build-inputs "libc") (assoc-ref %build-inputs "kernel-headers"= ))) and so we=E2=80=99d be duplicating fewer lines. The =E2=80=98match=E2=80=99 itself could be moved to the =E2=80=98inputs=E2= =80=99 field, where we=E2=80=99d be selecting the right headers: (define (%glibc-stripped) (package (inherit (glibc-for-bootstrap)) ;; ... (inputs `(("kernel-headers" ,(if (or (and (%current-target-system) (hurd-triplet? (%current-target-system))) (string-suffix? "-hurd" (%current-system))) gnumach-headers linux-libre-headers)) ...)))) where: (define (hurd-triplet? triplet) (and (string-suffix? "-gnu" triplet) (not (string-contains triplet "linux")))) Note that (%current-target-system) is a GNU triplet whereas (%current-system) is ARCH-KERNEL. Does that make sense? Does that sound doable? Thank you! Ludo=E2=80=99.