diff options
Diffstat (limited to 'guix/build/make-bootstrap.scm')
-rw-r--r-- | guix/build/make-bootstrap.scm | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/guix/build/make-bootstrap.scm b/guix/build/make-bootstrap.scm index 0d29338ce3..287e4db2c7 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 <manolis837@gmail.com> -;;; Copyright © 2015, 2019 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2015, 2019, 2024 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org> ;;; ;;; This file is part of GNU Guix. @@ -84,21 +84,37 @@ bootstrap libc." 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) (copy-linux-headers output kernel-headers))) + ;; Include *.so, *.so.*, but also empty ar archives provided for backward + ;; compatibility as of libc 2.39: libdl.a and libutil.a. (define %libc-object-files-rx "^(crt.*|ld.*|lib(c|m|dl|rt|pthread|nsl|\ util).*\\.so(\\..*)?|lib(machuser|hurduser).so.*|(libc(rt|)|libpthread)\ -_nonshared\\.a)$") +_nonshared\\.a|lib(dl|util)\\.a)$") (setvbuf (current-output-port) 'line) (let* ((libdir (string-append output "/lib"))) |