distro: glibc: Add a statically-linked Bash to $out/bin.

* distro/packages/base.scm (glibc): Pass `ac_cv_path_BASH_SHELL' in the
  configure flags.  During the `pre-configure' phase, copy the
  "static-bash" input to $out/bin, and change `system' and `popen' to
  use it instead of /bin/sh.  Add the "static-bash" input.
  Suggested by Shea Levy <shea@shealevy.com> and
  Lluís Batlle i Rossell <viric@viric.name>.
This commit is contained in:
Ludovic Courtès 2012-12-20 00:49:06 +01:00
parent d6f80f187c
commit 6e32f6c019

View file

@ -499,12 +499,19 @@ (define-public glibc
"--enable-kernel=2.6.30"
;; XXX: Work around "undefined reference to `__stack_chk_guard'".
"libc_cv_ssp=no")
"libc_cv_ssp=no"
;; Use our Bash instead of /bin/sh.
(string-append "ac_cv_path_BASH_SHELL="
(assoc-ref %build-inputs "bash")
"/bin/bash"))
#:tests? #f ; XXX
#:phases (alist-cons-before
'configure 'pre-configure
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (assoc-ref outputs "out")))
(lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
(bin (string-append out "/bin")))
;; Use `pwd', not `/bin/pwd'.
(substitute* "configure"
(("/bin/pwd") "pwd"))
@ -522,10 +529,28 @@ (define-public glibc
;; <http://www.linuxfromscratch.org/lfs/view/stable/chapter05/glibc.html>,
;; linking against libgcc_s is not needed with GCC
;; 4.7.1.
((" -lgcc_s") ""))))
((" -lgcc_s") ""))
;; Copy a statically-linked Bash in the output.
(mkdir-p bin)
(copy-file (assoc-ref inputs "static-bash")
(string-append bin "/bash"))
(chmod (string-append bin "/bash") #o555)
;; Have `system' use that Bash.
(substitute* "sysdeps/posix/system.c"
(("#define[[:blank:]]+SHELL_PATH.*$")
(format #f "#define SHELL_PATH \"~a/bin/bash\"\n"
out)))
;; Same for `popen'.
(substitute* "libio/iopopen.c"
(("/bin/sh")
(string-append out "/bin/bash")))))
%standard-phases)))
(inputs `(("patch/ld.so.cache"
,(search-patch "glibc-no-ld-so-cache.patch"))))
,(search-patch "glibc-no-ld-so-cache.patch"))
("static-bash" ,(cut search-bootstrap-binary "bash" <>))))
(synopsis "The GNU C Library")
(description
"Any Unix-like operating system needs a C library: the library which