From f844a6254ebb90666be1cdb4f44bb57561f36faa Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Wed, 14 Mar 2018 00:09:03 +0100 Subject: [PATCH 2/2] gnu: Add replacement for static-bash-for-glibc. This is needed to replace the static bash used in glibc-final. * gnu/packages/commencement.scm (patched-glibc-final-with-bootstrap-bash, patched-static-bash-for-glibc): New variables. (static-bash-for-glibc)[replacement]: Use patched-static-bash-for-glibc as a replacement. --- gnu/packages/commencement.scm | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index fe9fbebcc..94847b019 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -556,6 +556,14 @@ the bootstrap environment." ;; because we don't want to depend on bootstrap tools. ("static-bash" ,@(assoc-ref %boot0-inputs "bash"))))))) +(define patched-glibc-final-with-bootstrap-bash + (package + (inherit glibc-final-with-bootstrap-bash) + (source (origin + (inherit (package-source glibc-final-with-bootstrap-bash)) + (patches (cons (search-patch "glibc-allow-kernel-2.6.32.patch") + (origin-patches (package-source glibc-final-with-bootstrap-bash)))))))) + (define (cross-gcc-wrapper gcc binutils glibc bash) "Return a wrapper for the pseudo-cross toolchain GCC/BINUTILS/GLIBC that makes it available under the native tool names." @@ -632,6 +640,40 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%" ("libc:static" ,glibc-final-with-bootstrap-bash "static") ,@(fold alist-delete %boot1-inputs '("gcc" "libc"))))) + (let ((p (package-with-bootstrap-guile + (package-with-explicit-inputs bash inputs + (current-source-location) + #:guile %bootstrap-guile)))) + (package (inherit p) + (replacement patched-static-bash-for-glibc))))) + +;; Same as static-bash-for-glibc, except that it uses a patched glibc for the +;; "gcc" and "bash" packages. +(define patched-static-bash-for-glibc + ;; A statically-linked Bash to be used by GLIBC-FINAL in system(3) & co. + (let* ((gcc (cross-gcc-wrapper gcc-boot0 binutils-boot0 + patched-glibc-final-with-bootstrap-bash + (car (assoc-ref %boot1-inputs "bash")))) + (bash (package + (inherit static-bash) + (arguments + (substitute-keyword-arguments + (package-arguments static-bash) + ((#:guile _ #f) + '%bootstrap-guile) + ((#:configure-flags flags '()) + ;; Add a '-L' flag so that the pseudo-cross-ld of + ;; BINUTILS-BOOT0 can find libc.a. + `(append ,flags + (list (string-append "LDFLAGS=-static -L" + (assoc-ref %build-inputs + "libc:static") + "/lib")))))))) + (inputs `(("gcc" ,gcc) + ("libc" ,patched-glibc-final-with-bootstrap-bash) + ("libc:static" ,patched-glibc-final-with-bootstrap-bash "static") + ,@(fold alist-delete %boot1-inputs + '("gcc" "libc"))))) (package-with-bootstrap-guile (package-with-explicit-inputs bash inputs (current-source-location) -- 2.16.2