From 8b6f33a4d9514c1c7fb830829e7ab33472ea1f9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 14 Aug 2024 18:08:59 +0200 Subject: [PATCH] =?UTF-8?q?gnu:=20make-bootstrap:=20Adjust=20=E2=80=98%gli?= =?UTF-8?q?bc-stripped=E2=80=99=20for=20glibc@2.39=20on=20the=20Hurd.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously the second ‘copy-recursively’ call would fail with EEXIST since glibc@2.39 already provides $includedir/include/mach. * guix/build/make-bootstrap.scm (make-stripped-libc)[copy-mach-headers]: Pass #:select? to ‘copy-recursively’ to exclude files already present under INCDIR. Change-Id: I7e5a93e46eefa18299c231468c720072468fdb10 --- guix/build/make-bootstrap.scm | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/guix/build/make-bootstrap.scm b/guix/build/make-bootstrap.scm index 0d29338ce3..6cb5262f8e 100644 --- a/guix/build/make-bootstrap.scm +++ b/guix/build/make-bootstrap.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015, 2017 Manolis Fragkiskos Ragkousis -;;; Copyright © 2015, 2019 Ludovic Courtès +;;; Copyright © 2015, 2019, 2024 Ludovic Courtès ;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen ;;; ;;; This file is part of GNU Guix. @@ -84,13 +84,27 @@ (define (make-stripped-libc output libc kernel-headers) when producing a bootstrap libc." (define (copy-mach-headers output kernel-headers) - (let* ((incdir (string-append output "/include"))) + (let ((mach-headers (readlink + (string-append kernel-headers "/include/mach"))) + (incdir (string-append output "/include"))) (copy-recursively (string-append libc "/include") incdir) - (copy-recursively (string-append kernel-headers "/include/mach") - (string-append incdir "/mach")) - #t)) - + ;; As of glibc 2.39, essential Mach headers get installed by glibc + ;; itself in its own includedir, except for most of mach/machine/*.h. + ;; Copy anything that's missing from MACH-HEADERS. + (copy-recursively mach-headers + (string-append incdir "/mach") + #:select? + (let ((prefix (string-length mach-headers)) + (target (string-append incdir "/mach"))) + (lambda (file stat) + ;; Select everything but files and symlinks that + ;; already exist under TARGET. + (or (eq? 'directory (stat:type stat)) + (let ((suffix (string-drop file prefix))) + (not (file-exists? + (in-vicinity target suffix)))))))))) + (define (copy-libc+linux-headers output kernel-headers) (let* ((incdir (string-append output "/include"))) (copy-recursively (string-append libc "/include") incdir)