summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-10-11 17:23:13 +0200
committerLudovic Courtès <ludo@gnu.org>2019-10-12 12:25:08 +0200
commit9a45a24f7f3172750d8ea8a877527f219b4ed94b (patch)
tree5f828354f8ab5f04cecb05ec2125d0a57812bd4f
parent5b811ddc671777780233f23a819054ef62dcbacb (diff)
downloadguix-9a45a24f7f3172750d8ea8a877527f219b4ed94b.tar.gz
gnu: Remove unnecessary uses of 'package-with-bootstrap-guile'.
This reduces the object graph returned by:

  guix graph -e '(@@ (gnu packages commencement) glibc-final-with-bootstrap-bash)

from 333 nodes (1542 edges) to 148 nodes (886 edges).

This improves 'package-derivation' memoization and, consequently, the
'add-data-to-store' cache shown by:

  GUIX_PROFILING=add-data-to-store-cache guix build coreutils -nd

goes from 10948 lookups to 8935 lookups.

* gnu/packages/commencement.scm (mes-boot): Remove call to
'package-with-bootstrap-guile'.  Call 'bootstrap-origin' on the source
of NYACC-0.86.
(tcc-boot0): Likewise.
(tcc-boot): Remove call to 'package-with-bootstrap-guile' and call
'bootstrap-origin' on its source.
(make-mesboot0): Remove call to 'package-with-bootstrap-guile'.
(diffutils-mesboot): Likewise.
(binutils-mesboot0): Likewise, and call 'bootstrap-origin' for its
source.
(gcc-core-mesboot): Likewise.
(mesboot-headers): Remove call to 'package-with-bootstrap-guile'.
(glibc-mesboot0): Likewise, and call 'bootstrap-origin' for its source.
(gcc-mesboot0): Remove call to 'package-with-bootstrap-guile'.
(binutils-mesboot): Likewise.
(make-mesboot): Likewise.
(gcc-mesboot1): Likewise, and call 'bootstrap-origin' for its source.
(gcc-mesboot1-wrapper): Remove call to 'package-with-bootstrap-guile'.
(glibc-headers-mesboot): Likewise, and call 'bootstrap-origin' for its
source.
(glibc-mesboot): Remove call to 'package-with-bootstrap-guile'.
(gcc-mesboot): Likewise, and call to 'bootstrap-origin' for its source.
(gcc-mesboot-wrapper): Remove call to 'package-with-bootstrap-guile'.
(m4-mesboot): Likewise.
(gnu-make-boot0): Likewise, and call 'bootstrap-origin' for its source.
-rw-r--r--gnu/packages/commencement.scm2377
1 files changed, 1185 insertions, 1192 deletions
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index fd98c80dc3..f5f610c67c 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -85,80 +85,80 @@
 ;;; Code:
 
 (define mes-boot
-  (package-with-bootstrap-guile
-   (package
-     (inherit mes)
-     (name "mes-boot")
-     (version "0.19")
-     (source (origin
-               (method url-fetch)
-               (uri (string-append "mirror://gnu/mes/"
-                                   "mes-" version ".tar.gz"))
-               (sha256
-                (base32
-                 "15h4yhaywdc0djpjlin2jz1kzahpqxfki0r0aav1qm9nxxmnp1l0"))))
-     (inputs '())
-     (propagated-inputs '())
-     (native-inputs
-      `(("mescc-tools" ,%bootstrap-mescc-tools)
-        ("nyacc-source" ,(package-source nyacc-0.86))
+  (package
+    (inherit mes)
+    (name "mes-boot")
+    (version "0.19")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/mes/"
+                                  "mes-" version ".tar.gz"))
+              (sha256
+               (base32
+                "15h4yhaywdc0djpjlin2jz1kzahpqxfki0r0aav1qm9nxxmnp1l0"))))
+    (inputs '())
+    (propagated-inputs '())
+    (native-inputs
+     `(("mescc-tools" ,%bootstrap-mescc-tools)
+       ("nyacc-source" ,(bootstrap-origin
+                         (package-source nyacc-0.86)))
 
-        ("coreutils" , %bootstrap-coreutils&co)
-        ("bootstrap-mes" ,%bootstrap-mes)))
-     (arguments
-      `(#:implicit-inputs? #f
-        #:guile ,%bootstrap-guile
-        #:strip-binaries? #f   ; binutil's strip b0rkes MesCC/M1/hex2 binaries
-        #:phases
-        (modify-phases %standard-phases
-          (add-after 'unpack 'unpack-seeds
-            (lambda _
-              (let ((nyacc-source (assoc-ref %build-inputs "nyacc-source"))
-                    (bootstrap-mes (assoc-ref %build-inputs "bootstrap-mes")))
-                (with-directory-excursion ".."
-                  (mkdir-p "nyacc-source")
-                  (invoke "tar" "--strip=1" "-C" "nyacc-source" "-xvf" nyacc-source)
-                  (symlink (string-append bootstrap-mes "/share/mes/lib") "mes-seed"))
-                #t)))
-          (replace 'configure
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let ((out (assoc-ref %outputs "out")))
-                (setenv "GUILE" "mes")
-                (setenv "GUILE_EFFECTIVE_VERSION" "2.2")
-                (setenv "GUILE_LOAD_PATH" "nyacc")
-                (symlink (string-append "../nyacc-source/module") "nyacc")
-                (invoke "bash" "configure.sh"
-                        (string-append "--prefix=" out)))))
-          (replace 'build
-            (lambda _
-              (let ((mes (assoc-ref %build-inputs "bootstrap-mes")))
-                (setenv "MES_PREFIX" (string-append mes "/share/mes"))
-                (setenv "MES_ARENA" "100000000")
-                (setenv "MES_MAX_ARENA" "100000000")
-                (setenv "MES_STACK" "10000000")
-                (invoke "sh" "bootstrap.sh"))))
-          (replace 'check
-            (lambda _
-              (setenv "DIFF" "sh scripts/diff.scm")
-              ;; fail fast tests
-              ;; (invoke "sh" "-x" "build-aux/test.sh" "scaffold/tests/t")
-              ;; (invoke "sh" "-x" "build-aux/test.sh" "scaffold/tests/63-struct-cell")
-              (invoke "sh" "check.sh")))
-          (replace 'install
-            (lambda _
-              (invoke "sh" "install.sh"))))))
-     (native-search-paths
-      ;; Use the language-specific variables rather than 'CPATH' because they
-      ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
-      ;; The intent is to allow headers that are in the search path to be
-      ;; treated as "system headers" (headers exempt from warnings) just like
-      ;; the typical /usr/include headers on an FHS system.
-      (list (search-path-specification
-             (variable "C_INCLUDE_PATH")
-             (files '("share/mes/include")))
-            (search-path-specification
-             (variable "LIBRARY_PATH")
-             (files '("share/mes/lib"))))))))
+       ("coreutils" , %bootstrap-coreutils&co)
+       ("bootstrap-mes" ,%bootstrap-mes)))
+    (arguments
+     `(#:implicit-inputs? #f
+       #:guile ,%bootstrap-guile
+       #:strip-binaries? #f    ; binutil's strip b0rkes MesCC/M1/hex2 binaries
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'unpack-seeds
+           (lambda _
+             (let ((nyacc-source (assoc-ref %build-inputs "nyacc-source"))
+                   (bootstrap-mes (assoc-ref %build-inputs "bootstrap-mes")))
+               (with-directory-excursion ".."
+                 (mkdir-p "nyacc-source")
+                 (invoke "tar" "--strip=1" "-C" "nyacc-source" "-xvf" nyacc-source)
+                 (symlink (string-append bootstrap-mes "/share/mes/lib") "mes-seed"))
+               #t)))
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref %outputs "out")))
+               (setenv "GUILE" "mes")
+               (setenv "GUILE_EFFECTIVE_VERSION" "2.2")
+               (setenv "GUILE_LOAD_PATH" "nyacc")
+               (symlink (string-append "../nyacc-source/module") "nyacc")
+               (invoke "bash" "configure.sh"
+                       (string-append "--prefix=" out)))))
+         (replace 'build
+           (lambda _
+             (let ((mes (assoc-ref %build-inputs "bootstrap-mes")))
+               (setenv "MES_PREFIX" (string-append mes "/share/mes"))
+               (setenv "MES_ARENA" "100000000")
+               (setenv "MES_MAX_ARENA" "100000000")
+               (setenv "MES_STACK" "10000000")
+               (invoke "sh" "bootstrap.sh"))))
+         (replace 'check
+           (lambda _
+             (setenv "DIFF" "sh scripts/diff.scm")
+             ;; fail fast tests
+             ;; (invoke "sh" "-x" "build-aux/test.sh" "scaffold/tests/t")
+             ;; (invoke "sh" "-x" "build-aux/test.sh" "scaffold/tests/63-struct-cell")
+             (invoke "sh" "check.sh")))
+         (replace 'install
+           (lambda _
+             (invoke "sh" "install.sh"))))))
+    (native-search-paths
+     ;; Use the language-specific variables rather than 'CPATH' because they
+     ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
+     ;; The intent is to allow headers that are in the search path to be
+     ;; treated as "system headers" (headers exempt from warnings) just like
+     ;; the typical /usr/include headers on an FHS system.
+     (list (search-path-specification
+            (variable "C_INCLUDE_PATH")
+            (files '("share/mes/include")))
+           (search-path-specification
+            (variable "LIBRARY_PATH")
+            (files '("share/mes/lib")))))))
 
 (define tcc-boot0
   ;; Pristine tcc cannot be built by MesCC, we are keeping a delta of 11
@@ -170,348 +170,349 @@
   (let ((version "0.9.26")
         (revision "6")
         (commit "c004e9a34fb026bb44d211ab98bb768e79900eef"))
-    (package-with-bootstrap-guile
-     (package
-       (inherit tcc)
-       (name "tcc-boot0")
-       (version (string-append version "-" revision "." (string-take commit 7)))
-       (source (origin
-                 (method url-fetch)
-                 (uri (string-append "https://gitlab.com/janneke/tinycc"
-                                     "/-/archive/" commit
-                                     "/tinycc-" commit ".tar.gz"))
-                 (sha256
-                  (base32
-                   "1hmzn1pq0x22ppd80hyrn5qzqq94mxd0ychzj6vrr2vnj2frjv5b"))))
-       (build-system gnu-build-system)
-       (supported-systems '("i686-linux" "x86_64-linux"))
-       (inputs '())
-       (propagated-inputs '())
-       (native-inputs
-        `(("mes" ,mes-boot)
-          ("mescc-tools" ,%bootstrap-mescc-tools)
-          ("nyacc-source" ,(package-source nyacc-0.86))
-
-          ("coreutils" , %bootstrap-coreutils&co)
-          ("bootstrap-mes" ,%bootstrap-mes)))
-       (arguments
-        `(#:implicit-inputs? #f
-          #:guile ,%bootstrap-guile
-          #:strip-binaries? #f ; binutil's strip b0rkes MesCC/M1/hex2 binaries
-          #:phases
-          (modify-phases %standard-phases
-            (add-after 'unpack 'unpack-seeds
-              (lambda* (#:key outputs #:allow-other-keys)
-                (let* ((coreutils (assoc-ref %build-inputs "coreutils"))
-                       (nyacc-source (assoc-ref %build-inputs "nyacc-source"))
-                       (bootstrap-mes (assoc-ref %build-inputs "bootstrap-mes")))
-                  (setenv "PATH" (string-append
-                                  coreutils "/bin"))
-                  (format (current-error-port) "PATH=~s\n" (getenv "PATH"))
-                  (with-directory-excursion ".."
-                    (mkdir-p "nyacc-source")
-                    (invoke "tar" "--strip=1" "-C" "nyacc-source"
-                            "-xvf" nyacc-source)
-                    (symlink (string-append bootstrap-mes "/share/mes/lib") "mes-seed"))
-                  #t)))
-            (replace 'configure
-              (lambda* (#:key outputs #:allow-other-keys)
-                (let* ((out (assoc-ref %outputs "out"))
-                       (dir (with-directory-excursion ".." (getcwd)))
-                       (coreutils (assoc-ref %build-inputs "coreutils"))
-                       (mes (assoc-ref %build-inputs "mes"))
-                       (mescc-tools (assoc-ref %build-inputs "mescc-tools"))
-                       (libc (assoc-ref %build-inputs "libc"))
-                       (interpreter (if libc
-                                        ;; also for x86_64-linux, we are still on i686-linux
-                                        (string-append libc ,(glibc-dynamic-linker "i686-linux"))
-                                        (string-append mes "/lib/mes-loader"))))
-                  (setenv "PATH" (string-append
-                                  coreutils "/bin"
-                                  ":" mes "/bin"
-                                  ":" mescc-tools "/bin"))
-                  (format (current-error-port) "PATH=~s\n" (getenv "PATH"))
-
-                  (setenv "PREFIX" out)
-                  (symlink (string-append mes "/share/mes") "mes")
-                  (symlink (string-append "../nyacc-source/module") "nyacc")
-                  (setenv "MES_PREFIX" "mes")
-                  (setenv "MES_ARENA" "100000000")
-                  (setenv "MES_MAX_ARENA" "100000000")
-                  (setenv "MES_STACK" "10000000")
-                  (setenv "MES" "mes")
-                  (setenv "GUILE_LOAD_PATH" "nyacc")
-                  (invoke "sh" "configure"
-                          "--prefix=$PREFIX"
-                          (string-append "--elfinterp=" interpreter)
-                          "--crtprefix=."
-                          "--tccdir=."))))
-            (replace 'build
-              (lambda _
-                (substitute* "bootstrap.sh"
-                  (("^    cmp") "#    cmp"))
-                (invoke "sh" "bootstrap.sh")))
-            (replace 'check
-              (lambda _
-                (setenv "DIFF" "diff.scm")
-                (setenv "OBJDUMP" "true")
-                ;; fail fast tests
-                ;; (invoke "sh" "test.sh" "mes/scaffold/tests/30-strlen")
-                ;; (invoke "sh" "-x" "test.sh" "mes/scaffold/tinycc/00_assignment")
-                (setenv "TCC" "./tcc")
-                (invoke "sh" "check.sh")))
-            (replace 'install
-              (lambda _
-                (invoke "sh" "install.sh"))))))
-       (native-search-paths
-        ;; Use the language-specific variables rather than 'CPATH' because they
-        ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
-        ;; The intent is to allow headers that are in the search path to be
-        ;; treated as "system headers" (headers exempt from warnings) just like
-        ;; the typical /usr/include headers on an FHS system.
-        (list (search-path-specification
-               (variable "C_INCLUDE_PATH")
-               (files '("include")))
-              (search-path-specification
-               (variable "LIBRARY_PATH")
-               (files '("lib")))))))))
+    (package
+      (inherit tcc)
+      (name "tcc-boot0")
+      (version (string-append version "-" revision "." (string-take commit 7)))
+      (source (origin
+                (method url-fetch)
+                (uri (string-append "https://gitlab.com/janneke/tinycc"
+                                    "/-/archive/" commit
+                                    "/tinycc-" commit ".tar.gz"))
+                (sha256
+                 (base32
+                  "1hmzn1pq0x22ppd80hyrn5qzqq94mxd0ychzj6vrr2vnj2frjv5b"))))
+      (build-system gnu-build-system)
+      (supported-systems '("i686-linux" "x86_64-linux"))
+      (inputs '())
+      (propagated-inputs '())
+      (native-inputs
+       `(("mes" ,mes-boot)
+         ("mescc-tools" ,%bootstrap-mescc-tools)
+         ("nyacc-source" ,(bootstrap-origin
+                           (package-source nyacc-0.86)))
+
+         ("coreutils" , %bootstrap-coreutils&co)
+         ("bootstrap-mes" ,%bootstrap-mes)))
+      (arguments
+       `(#:implicit-inputs? #f
+         #:guile ,%bootstrap-guile
+         #:strip-binaries? #f  ; binutil's strip b0rkes MesCC/M1/hex2 binaries
+         #:phases
+         (modify-phases %standard-phases
+           (add-after 'unpack 'unpack-seeds
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((coreutils (assoc-ref %build-inputs "coreutils"))
+                      (nyacc-source (assoc-ref %build-inputs "nyacc-source"))
+                      (bootstrap-mes (assoc-ref %build-inputs "bootstrap-mes")))
+                 (setenv "PATH" (string-append
+                                 coreutils "/bin"))
+                 (format (current-error-port) "PATH=~s\n" (getenv "PATH"))
+                 (with-directory-excursion ".."
+                   (mkdir-p "nyacc-source")
+                   (invoke "tar" "--strip=1" "-C" "nyacc-source"
+                           "-xvf" nyacc-source)
+                   (symlink (string-append bootstrap-mes "/share/mes/lib") "mes-seed"))
+                 #t)))
+           (replace 'configure
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref %outputs "out"))
+                      (dir (with-directory-excursion ".." (getcwd)))
+                      (coreutils (assoc-ref %build-inputs "coreutils"))
+                      (mes (assoc-ref %build-inputs "mes"))
+                      (mescc-tools (assoc-ref %build-inputs "mescc-tools"))
+                      (libc (assoc-ref %build-inputs "libc"))
+                      (interpreter (if libc
+                                       ;; also for x86_64-linux, we are still on i686-linux
+                                       (string-append libc ,(glibc-dynamic-linker "i686-linux"))
+                                       (string-append mes "/lib/mes-loader"))))
+                 (setenv "PATH" (string-append
+                                 coreutils "/bin"
+                                 ":" mes "/bin"
+                                 ":" mescc-tools "/bin"))
+                 (format (current-error-port) "PATH=~s\n" (getenv "PATH"))
+
+                 (setenv "PREFIX" out)
+                 (symlink (string-append mes "/share/mes") "mes")
+                 (symlink (string-append "../nyacc-source/module") "nyacc")
+                 (setenv "MES_PREFIX" "mes")
+                 (setenv "MES_ARENA" "100000000")
+                 (setenv "MES_MAX_ARENA" "100000000")
+                 (setenv "MES_STACK" "10000000")
+                 (setenv "MES" "mes")
+                 (setenv "GUILE_LOAD_PATH" "nyacc")
+                 (invoke "sh" "configure"
+                         "--prefix=$PREFIX"
+                         (string-append "--elfinterp=" interpreter)
+                         "--crtprefix=."
+                         "--tccdir=."))))
+           (replace 'build
+             (lambda _
+               (substitute* "bootstrap.sh"
+                 (("^    cmp") "#    cmp"))
+               (invoke "sh" "bootstrap.sh")))
+           (replace 'check
+             (lambda _
+               (setenv "DIFF" "diff.scm")
+               (setenv "OBJDUMP" "true")
+               ;; fail fast tests
+               ;; (invoke "sh" "test.sh" "mes/scaffold/tests/30-strlen")
+               ;; (invoke "sh" "-x" "test.sh" "mes/scaffold/tinycc/00_assignment")
+               (setenv "TCC" "./tcc")
+               (invoke "sh" "check.sh")))
+           (replace 'install
+             (lambda _
+               (invoke "sh" "install.sh"))))))
+      (native-search-paths
+       ;; Use the language-specific variables rather than 'CPATH' because they
+       ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
+       ;; The intent is to allow headers that are in the search path to be
+       ;; treated as "system headers" (headers exempt from warnings) just like
+       ;; the typical /usr/include headers on an FHS system.
+       (list (search-path-specification
+              (variable "C_INCLUDE_PATH")
+              (files '("include")))
+             (search-path-specification
+              (variable "LIBRARY_PATH")
+              (files '("lib"))))))))
 
 (define tcc-boot
-  (package-with-bootstrap-guile
-   (package
-     (inherit tcc-boot0)
-     (name "tcc-boot")
-     (version "0.9.27")
-     (source (origin
+  (package
+    (inherit tcc-boot0)
+    (name "tcc-boot")
+    (version "0.9.27")
+    (source (bootstrap-origin
+             (origin
                (inherit (package-source tcc))
-               (patches (search-patches "tcc-boot-0.9.27.patch"))))
-     (build-system gnu-build-system)
-     (inputs '())
-     (propagated-inputs '())
-     (native-inputs
-      `(("mes" ,mes-boot)
-        ("tcc" ,tcc-boot0)
+               (patches (search-patches "tcc-boot-0.9.27.patch")))))
+    (build-system gnu-build-system)
+    (inputs '())
+    (propagated-inputs '())
+    (native-inputs
+     `(("mes" ,mes-boot)
+       ("tcc" ,tcc-boot0)
 
-        ("coreutils" , %bootstrap-coreutils&co)))
-     (arguments
-      `(#:implicit-inputs? #f
-        #:guile ,%bootstrap-guile
-        #:strip-binaries? #f            ; binutil's strip b0rkes MesCC/M1/hex2
-                                        ; binaries, tcc-boot also comes with
-                                        ; MesCC/M1/hex2-built binaries
-        #:phases
-        (modify-phases %standard-phases
-          (replace 'configure
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((out (assoc-ref %outputs "out"))
-                     (coreutils (assoc-ref %build-inputs "coreutils"))
-                     (mes (assoc-ref %build-inputs "mes"))
-                     (tcc (assoc-ref %build-inputs "tcc"))
-                     (libc (assoc-ref %build-inputs "libc"))
-                     (interpreter (if libc
-                                      ;; also for x86_64-linux, we are still on i686-linux
-                                      (string-append libc ,(glibc-dynamic-linker "i686-linux"))
-                                      (string-append mes "/lib/mes-loader"))))
-                ;; unpack
-                (setenv "PATH" (string-append
-                                coreutils "/bin"
-                                ":" tcc "/bin"))
-                (format (current-error-port) "PATH=~s\n" (getenv "PATH"))
-                (invoke "sh" "configure"
-                        (string-append "--cc=tcc")
-                        (string-append "--cpu=i386")
-                        (string-append "--prefix=" out)
-                        (string-append "--elfinterp=" interpreter)
-                        (string-append "--crtprefix=" tcc "/lib")
-                        (string-append "--sysincludepaths=" tcc "/include")
-                        (string-append "--libpaths=" tcc "/lib")))))
-          (replace 'build
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((out (assoc-ref %outputs "out"))
-                     (mes (assoc-ref %build-inputs "mes"))
-                     (tcc (assoc-ref %build-inputs "tcc"))
-                     (libc (assoc-ref %build-inputs "libc"))
-                     (interpreter (if libc
-                                      ;; also for x86_64-linux, we are still on i686-linux
-                                      (string-append libc ,(glibc-dynamic-linker "i686-linux"))
-                                      (string-append mes "/lib/mes-loader"))))
-                (invoke "tcc"
-                        "-vvv"
-                        "-D" "BOOTSTRAP=1"
-                        "-D" "ONE_SOURCE=1"
-                        "-D" "TCC_TARGET_I386=1"
-                        "-D" "CONFIG_TCC_STATIC=1"
-                        "-D" "CONFIG_USE_LIBGCC=1"
-                        "-D" (string-append "CONFIG_TCCDIR=\"" out "/lib/tcc\"")
-                        "-D" (string-append "CONFIG_TCC_CRTPREFIX=\"" out "/lib:{B}/lib:.\"")
-                        "-D" (string-append "CONFIG_TCC_CRTPREFIX=\"" out "/lib:{B}/lib:.\"")
-                        "-D" (string-append "CONFIG_TCC_ELFINTERP=\"" interpreter "\"")
-                        "-D" (string-append "CONFIG_TCC_LIBPATHS=\"" tcc "/lib:{B}/lib:.\"")
-                        "-D" (string-append "CONFIG_TCC_SYSINCLUDEPATHS=\"" tcc "/include" ":/include:{B}/include\"")
-                        "-D" (string-append "TCC_LIBGCC=\"" tcc "/lib/libc.a\"")
-                        "-o" "tcc"
-                        "tcc.c"))))
-          (replace 'check
-            (lambda _
-              ;; FIXME: add sensible check target (without depending on make)
-              ;; ./check.sh ?
-              (= 1 (status:exit-val (system* "./tcc" "--help")))))
-          (replace 'install
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let ((out (assoc-ref %outputs "out"))
-                    (tcc (assoc-ref %build-inputs "tcc")))
-                (mkdir-p (string-append out "/bin"))
-                (copy-file "tcc" (string-append out "/bin/tcc"))
-                (mkdir-p (string-append out "/lib/tcc"))
-                (copy-recursively (string-append tcc "/include")
-                                  (string-append out "/include"))
-                (copy-recursively (string-append tcc "/lib")
-                                  (string-append out "/lib"))
-                (invoke "tcc" "-D" "TCC_TARGET_I386=1" "-c" "-o" "libtcc1.o" "lib/libtcc1.c")
-                (invoke "tcc" "-ar" "rc" "libtcc1.a" "libtcc1.o")
-                (copy-file "libtcc1.a" (string-append out "/lib/libtcc1.a"))
-                (delete-file (string-append out "/lib/tcc/libtcc1.a"))
-                (copy-file "libtcc1.a" (string-append out "/lib/tcc/libtcc1.a"))
-                #t)))))))))
+       ("coreutils" , %bootstrap-coreutils&co)))
+    (arguments
+     `(#:implicit-inputs? #f
+       #:guile ,%bootstrap-guile
+
+       ;; Binutils' 'strip' b0rkes MesCC/M1/hex2 binaries, tcc-boot also comes
+       ;; with MesCC/M1/hex2-built binaries.
+       #:strip-binaries? #f
+
+       #:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref %outputs "out"))
+                    (coreutils (assoc-ref %build-inputs "coreutils"))
+                    (mes (assoc-ref %build-inputs "mes"))
+                    (tcc (assoc-ref %build-inputs "tcc"))
+                    (libc (assoc-ref %build-inputs "libc"))
+                    (interpreter (if libc
+                                     ;; also for x86_64-linux, we are still on i686-linux
+                                     (string-append libc ,(glibc-dynamic-linker "i686-linux"))
+                                     (string-append mes "/lib/mes-loader"))))
+               ;; unpack
+               (setenv "PATH" (string-append
+                               coreutils "/bin"
+                               ":" tcc "/bin"))
+               (format (current-error-port) "PATH=~s\n" (getenv "PATH"))
+               (invoke "sh" "configure"
+                       (string-append "--cc=tcc")
+                       (string-append "--cpu=i386")
+                       (string-append "--prefix=" out)
+                       (string-append "--elfinterp=" interpreter)
+                       (string-append "--crtprefix=" tcc "/lib")
+                       (string-append "--sysincludepaths=" tcc "/include")
+                       (string-append "--libpaths=" tcc "/lib")))))
+         (replace 'build
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref %outputs "out"))
+                    (mes (assoc-ref %build-inputs "mes"))
+                    (tcc (assoc-ref %build-inputs "tcc"))
+                    (libc (assoc-ref %build-inputs "libc"))
+                    (interpreter (if libc
+                                     ;; also for x86_64-linux, we are still on i686-linux
+                                     (string-append libc ,(glibc-dynamic-linker "i686-linux"))
+                                     (string-append mes "/lib/mes-loader"))))
+               (invoke "tcc"
+                       "-vvv"
+                       "-D" "BOOTSTRAP=1"
+                       "-D" "ONE_SOURCE=1"
+                       "-D" "TCC_TARGET_I386=1"
+                       "-D" "CONFIG_TCC_STATIC=1"
+                       "-D" "CONFIG_USE_LIBGCC=1"
+                       "-D" (string-append "CONFIG_TCCDIR=\"" out "/lib/tcc\"")
+                       "-D" (string-append "CONFIG_TCC_CRTPREFIX=\"" out "/lib:{B}/lib:.\"")
+                       "-D" (string-append "CONFIG_TCC_CRTPREFIX=\"" out
+                                           "/lib:{B}/lib:.\"")
+                       "-D" (string-append "CONFIG_TCC_ELFINTERP=\"" interpreter "\"")
+                       "-D" (string-append "CONFIG_TCC_LIBPATHS=\"" tcc "/lib:{B}/lib:.\"")
+                       "-D" (string-append "CONFIG_TCC_SYSINCLUDEPATHS=\"" tcc "/include" ":/include:{B}/include\"")
+                       "-D" (string-append "TCC_LIBGCC=\"" tcc "/lib/libc.a\"")
+                       "-o" "tcc"
+                       "tcc.c"))))
+         (replace 'check
+           (lambda _
+             ;; FIXME: add sensible check target (without depending on make)
+             ;; ./check.sh ?
+             (= 1 (status:exit-val (system* "./tcc" "--help")))))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref %outputs "out"))
+                   (tcc (assoc-ref %build-inputs "tcc")))
+               (mkdir-p (string-append out "/bin"))
+               (copy-file "tcc" (string-append out "/bin/tcc"))
+               (mkdir-p (string-append out "/lib/tcc"))
+               (copy-recursively (string-append tcc "/include")
+                                 (string-append out "/include"))
+               (copy-recursively (string-append tcc "/lib")
+                                 (string-append out "/lib"))
+               (invoke "tcc" "-D" "TCC_TARGET_I386=1" "-c" "-o" "libtcc1.o" "lib/libtcc1.c")
+               (invoke "tcc" "-ar" "rc" "libtcc1.a" "libtcc1.o")
+               (copy-file "libtcc1.a" (string-append out "/lib/libtcc1.a"))
+               (delete-file (string-append out "/lib/tcc/libtcc1.a"))
+               (copy-file "libtcc1.a" (string-append out "/lib/tcc/libtcc1.a"))
+               #t))))))))
 
 (define make-mesboot0
-  (package-with-bootstrap-guile
-   (package
-     (inherit gnu-make)
-     (name "make-mesboot0")
-     (version "3.80")
-     (source (origin
-               (method url-fetch)
-               (uri (string-append "mirror://gnu/make/make-"
-                                   version ".tar.gz"))
-               (sha256
-                (base32
-                 "1pb7fb7fqf9wz9najm85qdma1xhxzf1rhj5gwrlzdsz2zm0hpcv4"))))
-     (supported-systems '("i686-linux" "x86_64-linux"))
-     (inputs '())
-     (propagated-inputs '())
-     (native-inputs `(("tcc" ,tcc-boot)
-
-                      ("bash" ,%bootstrap-coreutils&co)
-                      ("coreutils" ,%bootstrap-coreutils&co)))
-     (arguments
-      `(#:implicit-inputs? #f
-        #:tests? #f                     ; check depends on perl
-        #:guile ,%bootstrap-guile
-        #:configure-flags `("CC=tcc -DO_RDONLY=0"
-                            "LD=tcc"
-                            "--disable-nls")
-        #:phases
-        (modify-phases %standard-phases
-          (add-after 'configure 'configure-fixup
-            (lambda _
-              (substitute* "build.sh"
-                (("^REMOTE=.*") "REMOTE=stub\n")
-                (("^extras=.*") "extras=getloadavg.c\n"))
-              (substitute* "make.h"
-                (("^extern long int lseek.*" all) (string-append "// " all)))
-              #t))
-          (delete 'patch-generated-file-shebangs) ; no perl
-          (replace 'build
-            (lambda _
-              (invoke "sh" "./build.sh")))
-          (replace 'install
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((out (assoc-ref outputs "out"))
-                     (bin (string-append out "/bin")))
-                (install-file "make" bin)
-                #t)))))))))
+  (package
+    (inherit gnu-make)
+    (name "make-mesboot0")
+    (version "3.80")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/make/make-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1pb7fb7fqf9wz9najm85qdma1xhxzf1rhj5gwrlzdsz2zm0hpcv4"))))
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (inputs '())
+    (propagated-inputs '())
+    (native-inputs `(("tcc" ,tcc-boot)
+
+                     ("bash" ,%bootstrap-coreutils&co)
+                     ("coreutils" ,%bootstrap-coreutils&co)))
+    (arguments
+     `(#:implicit-inputs? #f
+       #:tests? #f                                ; check depends on perl
+       #:guile ,%bootstrap-guile
+       #:configure-flags `("CC=tcc -DO_RDONLY=0"
+                           "LD=tcc"
+                           "--disable-nls")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'configure 'configure-fixup
+           (lambda _
+             (substitute* "build.sh"
+               (("^REMOTE=.*") "REMOTE=stub\n")
+               (("^extras=.*") "extras=getloadavg.c\n"))
+             (substitute* "make.h"
+               (("^extern long int lseek.*" all) (string-append "// " all)))
+             #t))
+         (delete 'patch-generated-file-shebangs)  ; no perl
+         (replace 'build
+           (lambda _
+             (invoke "sh" "./build.sh")))
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin")))
+               (install-file "make" bin)
+               #t))))))))
 
 (define diffutils-mesboot
-  (package-with-bootstrap-guile
-   (package
-     (inherit diffutils)
-     (name "diffutils-mesboot")
-     (version "2.7")
-     (source (origin
-               (method url-fetch)
-               (uri (string-append "mirror://gnu/diffutils/diffutils-"
-                                   version ".tar.gz"))
-               (sha256
-                (base32
-                 "1mirn5i825bn5w7rh6mgn0r8aj9xqanav95dwcl1b8sn82f4iwnm"))))
-     (supported-systems '("i686-linux" "x86_64-linux"))
-     (inputs '())
-     (propagated-inputs '())
-     (native-inputs `(("mes" ,mes-boot)
-                      ("tcc" ,tcc-boot)
-
-                      ("bash" ,%bootstrap-coreutils&co)
-                      ("coreutils" ,%bootstrap-coreutils&co)
-                      ("make" ,make-mesboot0)))
-     (arguments
-      `(#:implicit-inputs? #f
-        #:guile ,%bootstrap-guile
-        #:parallel-build? #f
-        #:tests? #f           ; check is naive, also checks non-built PROGRAMS
-        #:strip-binaries? #f  ; no strip yet
-        #:phases
-        (modify-phases %standard-phases
-          ;; diffutils-2.7 needs more traditional configure
-          (replace 'configure
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let ((out (assoc-ref outputs "out"))
-                    (bash (assoc-ref %build-inputs "bash")))
-                (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
-                (setenv "CC" "tcc")
-                (setenv "LD" "tcc")
-                (invoke "./configure" (string-append "--prefix=" out)))))
-          (add-before 'configure 'remove-diff3-sdiff
-            (lambda* (#:key outputs #:allow-other-keys)
-              (substitute* "Makefile.in"
-                (("PROGRAMS = .*" all) "PROGRAMS = cmp diff"))
-              #t))))))))
+  (package
+    (inherit diffutils)
+    (name "diffutils-mesboot")
+    (version "2.7")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/diffutils/diffutils-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1mirn5i825bn5w7rh6mgn0r8aj9xqanav95dwcl1b8sn82f4iwnm"))))
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (inputs '())
+    (propagated-inputs '())
+    (native-inputs `(("mes" ,mes-boot)
+                     ("tcc" ,tcc-boot)
+
+                     ("bash" ,%bootstrap-coreutils&co)
+                     ("coreutils" ,%bootstrap-coreutils&co)
+                     ("make" ,make-mesboot0)))
+    (arguments
+     `(#:implicit-inputs? #f
+       #:guile ,%bootstrap-guile
+       #:parallel-build? #f
+       #:tests? #f            ; check is naive, also checks non-built PROGRAMS
+       #:strip-binaries? #f   ; no strip yet
+       #:phases
+       (modify-phases %standard-phases
+         ;; diffutils-2.7 needs more traditional configure
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (bash (assoc-ref %build-inputs "bash")))
+               (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+               (setenv "CC" "tcc")
+               (setenv "LD" "tcc")
+               (invoke "./configure" (string-append "--prefix=" out)))))
+         (add-before 'configure 'remove-diff3-sdiff
+           (lambda* (#:key outputs #:allow-other-keys)
+             (substitute* "Makefile.in"
+               (("PROGRAMS = .*" all) "PROGRAMS = cmp diff"))
+             #t)))))))
 
 (define binutils-mesboot0
-  (package-with-bootstrap-guile
-   (package
-     (inherit binutils)
-     (name "binutils-mesboot0")
-     (version "2.20.1a")
-     (source (origin
+  (package
+    (inherit binutils)
+    (name "binutils-mesboot0")
+    (version "2.20.1a")
+    (source (bootstrap-origin
+             (origin
                (method url-fetch)
                (uri (string-append "mirror://gnu/binutils/binutils-"
                                    version ".tar.bz2"))
                (patches (search-patches "binutils-boot-2.20.1a.patch"))
                (sha256
                 (base32
-                 "0r7dr0brfpchh5ic0z9r4yxqn4ybzmlh25sbp30cacqk8nb7rlvi"))))
-     (inputs '())
-     (propagated-inputs '())
-     (native-inputs `(("tcc" ,tcc-boot)
-
-                      ("bash" ,%bootstrap-coreutils&co)
-                      ("coreutils" ,%bootstrap-coreutils&co)
-                      ("diffutils" ,diffutils-mesboot)
-                      ("make" ,make-mesboot0)))
-     (supported-systems '("i686-linux" "x86_64-linux"))
-     (arguments
-      `(#:implicit-inputs? #f
-        #:guile ,%bootstrap-guile
-        #:tests? #f                     ; runtest: command not found
-        #:parallel-build? #f
-        #:strip-binaries? #f            ; no strip yet
-        #:configure-flags
-        (let ((cppflags (string-append " -D __GLIBC_MINOR__=6"
-                                       " -D MES_BOOTSTRAP=1"))
-              (bash (assoc-ref %build-inputs "bash")))
-          `(,(string-append "CONFIG_SHELL=" bash "/bin/sh")
-            ,(string-append "CPPFLAGS=" cppflags)
-            "AR=tcc -ar"
-            "CXX=false"
-            "RANLIB=true"
-            ,(string-append "CC=tcc" cppflags)
-            "--disable-nls"
-            "--disable-shared"
-            "--disable-werror"
-            "--build=i686-unknown-linux-gnu"
-            "--host=i686-unknown-linux-gnu"
-            "--with-sysroot=/")))))))
+                 "0r7dr0brfpchh5ic0z9r4yxqn4ybzmlh25sbp30cacqk8nb7rlvi")))))
+    (inputs '())
+    (propagated-inputs '())
+    (native-inputs `(("tcc" ,tcc-boot)
+
+                     ("bash" ,%bootstrap-coreutils&co)
+                     ("coreutils" ,%bootstrap-coreutils&co)
+                     ("diffutils" ,diffutils-mesboot)
+                     ("make" ,make-mesboot0)))
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (arguments
+     `(#:implicit-inputs? #f
+       #:guile ,%bootstrap-guile
+       #:tests? #f                                ; runtest: command not found
+       #:parallel-build? #f
+       #:strip-binaries? #f                       ; no strip yet
+       #:configure-flags
+       (let ((cppflags (string-append " -D __GLIBC_MINOR__=6"
+                                      " -D MES_BOOTSTRAP=1"))
+             (bash (assoc-ref %build-inputs "bash")))
+         `(,(string-append "CONFIG_SHELL=" bash "/bin/sh")
+           ,(string-append "CPPFLAGS=" cppflags)
+           "AR=tcc -ar"
+           "CXX=false"
+           "RANLIB=true"
+           ,(string-append "CC=tcc" cppflags)
+           "--disable-nls"
+           "--disable-shared"
+           "--disable-werror"
+           "--build=i686-unknown-linux-gnu"
+           "--host=i686-unknown-linux-gnu"
+           "--with-sysroot=/"))))))
 
 (define gcc-core-mesboot
   ;; Gcc-2.95.3 is the most recent GCC that is supported by what the Mes C
@@ -519,12 +520,12 @@
   ;; library, such as dir.h/struct DIR/readdir, locales, signals...  Also,
   ;; with gcc-2.95.3, binutils-boot-2.20.1a and glibc-2.2.5 we found a GNU
   ;; toolchain triplet "that works".
-  (package-with-bootstrap-guile
-   (package
-     (inherit gcc)
-     (name "gcc-core-mesboot")
-     (version "2.95.3")
-     (source (origin
+  (package
+    (inherit gcc)
+    (name "gcc-core-mesboot")
+    (version "2.95.3")
+    (source (bootstrap-origin
+             (origin
                (method url-fetch)
                (uri (string-append "mirror://gnu/gcc/gcc-2.95.3/gcc-core-"
                                    version
@@ -532,162 +533,161 @@
                (patches (search-patches "gcc-boot-2.95.3.patch"))
                (sha256
                 (base32
-                 "1xvfy4pqhrd5v2cv8lzf63iqg92k09g6z9n2ah6ndd4h17k1x0an"))))
-     (supported-systems '("i686-linux" "x86_64-linux"))
-     (inputs '())
-     (propagated-inputs '())
-     (native-inputs `(("binutils" ,binutils-mesboot0)
-                      ("tcc" ,tcc-boot)
-
-                      ("bash" ,%bootstrap-coreutils&co)
-                      ("coreutils" ,%bootstrap-coreutils&co)
-                      ("diffutils" ,diffutils-mesboot)
-                      ("make" ,make-mesboot0)))
-     (outputs '("out"))
-     (arguments
-      `(#:implicit-inputs? #f
-        #:guile ,%bootstrap-guile
-        #:tests? #f
-        #:parallel-build? #f
-        #:strip-binaries? #f
-        #:configure-flags
-        (let ((out (assoc-ref %outputs "out")))
-          `("--enable-static"
-            "--disable-shared"
-            "--disable-werror"
-            "--build=i686-unknown-linux-gnu"
-            "--host=i686-unknown-linux-gnu"
-            ,(string-append "--prefix=" out)))
-        #:make-flags (list
-                      "CC=tcc -static -D __GLIBC_MINOR__=6"
-                      "OLDCC=tcc -static -D __GLIBC_MINOR__=6"
-                      "CC_FOR_BUILD=tcc -static -D __GLIBC_MINOR__=6"
-                      "AR=ar"
-                      "RANLIB=ranlib"
-                      (string-append "LIBGCC2_INCLUDES=-I "
-                                     (assoc-ref %build-inputs "tcc")
-                                     "/include")
-                      "LANGUAGES=c"
-                      (string-append "BOOT_LDFLAGS="
-                                     " -B" (assoc-ref %build-inputs "tcc")
-                                     "/lib/"))
-        #:modules ((guix build gnu-build-system)
-                   (guix build utils)
-                   (srfi srfi-1))
-        #:phases
-        (modify-phases %standard-phases
-          ;; gcc-2.95.3 needs more traditional configure
-          (add-before 'configure 'setenv
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let ((out (assoc-ref outputs "out"))
-                    (bash (assoc-ref %build-inputs "bash"))
-                    (tcc (assoc-ref %build-inputs "tcc"))
-                    (cppflags " -D __GLIBC_MINOR__=6"))
-                (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
-                (setenv "CPPFLAGS" cppflags)
-                (setenv "CC" (string-append "tcc" cppflags))
-                (setenv "CC_FOR_BUILD" (string-append "tcc" cppflags))
-                (setenv "CPP" (string-append "tcc -E" cppflags))
-                (with-output-to-file "config.cache"
-                  (lambda _
-                    (display "
+                 "1xvfy4pqhrd5v2cv8lzf63iqg92k09g6z9n2ah6ndd4h17k1x0an")))))
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (inputs '())
+    (propagated-inputs '())
+    (native-inputs `(("binutils" ,binutils-mesboot0)
+                     ("tcc" ,tcc-boot)
+
+                     ("bash" ,%bootstrap-coreutils&co)
+                     ("coreutils" ,%bootstrap-coreutils&co)
+                     ("diffutils" ,diffutils-mesboot)
+                     ("make" ,make-mesboot0)))
+    (outputs '("out"))
+    (arguments
+     `(#:implicit-inputs? #f
+       #:guile ,%bootstrap-guile
+       #:tests? #f
+       #:parallel-build? #f
+       #:strip-binaries? #f
+       #:configure-flags
+       (let ((out (assoc-ref %outputs "out")))
+         `("--enable-static"
+           "--disable-shared"
+           "--disable-werror"
+           "--build=i686-unknown-linux-gnu"
+           "--host=i686-unknown-linux-gnu"
+           ,(string-append "--prefix=" out)))
+       #:make-flags (list
+                     "CC=tcc -static -D __GLIBC_MINOR__=6"
+                     "OLDCC=tcc -static -D __GLIBC_MINOR__=6"
+                     "CC_FOR_BUILD=tcc -static -D __GLIBC_MINOR__=6"
+                     "AR=ar"
+                     "RANLIB=ranlib"
+                     (string-append "LIBGCC2_INCLUDES=-I "
+                                    (assoc-ref %build-inputs "tcc")
+                                    "/include")
+                     "LANGUAGES=c"
+                     (string-append "BOOT_LDFLAGS="
+                                    " -B" (assoc-ref %build-inputs "tcc")
+                                    "/lib/"))
+       #:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
+       #:phases
+       (modify-phases %standard-phases
+         ;; gcc-2.95.3 needs more traditional configure
+         (add-before 'configure 'setenv
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out"))
+                   (bash (assoc-ref %build-inputs "bash"))
+                   (tcc (assoc-ref %build-inputs "tcc"))
+                   (cppflags " -D __GLIBC_MINOR__=6"))
+               (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+               (setenv "CPPFLAGS" cppflags)
+               (setenv "CC" (string-append "tcc" cppflags))
+               (setenv "CC_FOR_BUILD" (string-append "tcc" cppflags))
+               (setenv "CPP" (string-append "tcc -E" cppflags))
+               (with-output-to-file "config.cache"
+                 (lambda _
+                   (display "
 ac_cv_c_float_format='IEEE (little-endian)'
 ")))
-                #t)))
-          (replace 'configure
-            (lambda* (#:key configure-flags  #:allow-other-keys)
-              (format (current-error-port)
-                      "running ./configure ~a\n" (string-join configure-flags))
-              (apply invoke "./configure" configure-flags)))
-          (add-after 'configure 'remove-info
-            (lambda _
-              ;; no info at this stage
-              (delete-file-recursively "texinfo")
-              (invoke "touch" "gcc/cpp.info" "gcc/gcc.info")))
-          (add-after 'install 'install2
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((tcc (assoc-ref %build-inputs "tcc"))
-                     (tcc-lib (string-append tcc "/lib/x86-mes-gcc"))
-                     (out (assoc-ref outputs "out"))
-                     (gcc-dir (string-append
-                               out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3")))
-                (mkdir-p "tmp")
-                (zero? (system (string-append "set -x; cd tmp && ar x ../gcc/libgcc2.a")))
-                (zero? (system (string-append "set -x; cd tmp && ar r " gcc-dir "/libgcc.a *.o")))
-                (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a"))
-                (copy-file (string-append tcc "/lib/libtcc1.a")
-                           (string-append out "/lib/libtcc1.a"))
-                (invoke "ar" "r" (string-append gcc-dir "/libc.a")
-                        (string-append tcc-lib "/libc+gnu.o")
-                        (string-append tcc-lib "/libtcc1.o"))
-                (invoke "ar" "r" (string-append out "/lib/libc.a")
-                        (string-append tcc-lib "/libc+gnu.o")
-                        (string-append tcc-lib "/libtcc1.o"))
-                (invoke "ls" "-ltrF" gcc-dir)
-                (copy-recursively (string-append tcc "/include")
-                                  (string-append out "/include"))
-                #t))))))
-     (native-search-paths
-      ;; Use the language-specific variables rather than 'CPATH' because they
-      ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
-      ;; The intent is to allow headers that are in the search path to be
-      ;; treated as "system headers" (headers exempt from warnings) just like
-      ;; the typical /usr/include headers on an FHS system.
-      (list (search-path-specification
-             (variable "C_INCLUDE_PATH")
-             (files '("include" "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include")))
-            (search-path-specification
-             (variable "LIBRARY_PATH")
-             (files '("lib"))))))))
+               #t)))
+         (replace 'configure
+           (lambda* (#:key configure-flags  #:allow-other-keys)
+             (format (current-error-port)
+                     "running ./configure ~a\n" (string-join configure-flags))
+             (apply invoke "./configure" configure-flags)))
+         (add-after 'configure 'remove-info
+           (lambda _
+             ;; no info at this stage
+             (delete-file-recursively "texinfo")
+             (invoke "touch" "gcc/cpp.info" "gcc/gcc.info")))
+         (add-after 'install 'install2
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((tcc (assoc-ref %build-inputs "tcc"))
+                    (tcc-lib (string-append tcc "/lib/x86-mes-gcc"))
+                    (out (assoc-ref outputs "out"))
+                    (gcc-dir (string-append
+                              out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3")))
+               (mkdir-p "tmp")
+               (zero? (system (string-append "set -x; cd tmp && ar x ../gcc/libgcc2.a")))
+               (zero? (system (string-append "set -x; cd tmp && ar r " gcc-dir "/libgcc.a *.o")))
+               (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a"))
+               (copy-file (string-append tcc "/lib/libtcc1.a")
+                          (string-append out "/lib/libtcc1.a"))
+               (invoke "ar" "r" (string-append gcc-dir "/libc.a")
+                       (string-append tcc-lib "/libc+gnu.o")
+                       (string-append tcc-lib "/libtcc1.o"))
+               (invoke "ar" "r" (string-append out "/lib/libc.a")
+                       (string-append tcc-lib "/libc+gnu.o")
+                       (string-append tcc-lib "/libtcc1.o"))
+               (invoke "ls" "-ltrF" gcc-dir)
+               (copy-recursively (string-append tcc "/include")
+                                 (string-append out "/include"))
+               #t))))))
+    (native-search-paths
+     ;; Use the language-specific variables rather than 'CPATH' because they
+     ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
+     ;; The intent is to allow headers that are in the search path to be
+     ;; treated as "system headers" (headers exempt from warnings) just like
+     ;; the typical /usr/include headers on an FHS system.
+     (list (search-path-specification
+            (variable "C_INCLUDE_PATH")
+            (files '("include" "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include")))
+           (search-path-specification
+            (variable "LIBRARY_PATH")
+            (files '("lib")))))))
 
 (define mesboot-headers
-  (package-with-bootstrap-guile
-   (package
-     (inherit mes-boot)
-     (name "mesboot-headers")
-     (supported-systems '("i686-linux" "x86_64-linux"))
-     (inputs '())
-     (propagated-inputs '())
-     (native-inputs `(("coreutils" ,%bootstrap-coreutils&co)
-                      ("headers" ,%bootstrap-linux-libre-headers)))
-     (arguments
-      `(#:implicit-inputs? #f
-        #:guile ,%bootstrap-guile
-        #:tests? #f
-        #:strip-binaries? #f
-        #:phases
-        (modify-phases %standard-phases
-          (delete 'configure)
-          (delete 'build)
-          (replace 'install
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((out (assoc-ref outputs "out"))
-                     (include (string-append out "/include"))
-                     (headers (assoc-ref %build-inputs "headers" )))
-                (mkdir-p include)
-                (copy-recursively "include" out)
-                (copy-recursively headers out)
-                #t))))))
-     (native-search-paths
-      ;; Use the language-specific variables rather than 'CPATH' because they
-      ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
-      ;; The intent is to allow headers that are in the search path to be
-      ;; treated as "system headers" (headers exempt from warnings) just like
-      ;; the typical /usr/include headers on an FHS system.
-      (list (search-path-specification
-             (variable "C_INCLUDE_PATH")
-             (files '("include"))))))))
+  (package
+    (inherit mes-boot)
+    (name "mesboot-headers")
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (inputs '())
+    (propagated-inputs '())
+    (native-inputs `(("coreutils" ,%bootstrap-coreutils&co)
+                     ("headers" ,%bootstrap-linux-libre-headers)))
+    (arguments
+     `(#:implicit-inputs? #f
+       #:guile ,%bootstrap-guile
+       #:tests? #f
+       #:strip-binaries? #f
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'configure)
+         (delete 'build)
+         (replace 'install
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (include (string-append out "/include"))
+                    (headers (assoc-ref %build-inputs "headers" )))
+               (mkdir-p include)
+               (copy-recursively "include" out)
+               (copy-recursively headers out)
+               #t))))))
+    (native-search-paths
+     ;; Use the language-specific variables rather than 'CPATH' because they
+     ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
+     ;; The intent is to allow headers that are in the search path to be
+     ;; treated as "system headers" (headers exempt from warnings) just like
+     ;; the typical /usr/include headers on an FHS system.
+     (list (search-path-specification
+            (variable "C_INCLUDE_PATH")
+            (files '("include")))))))
 
 (define glibc-mesboot0
   ;; GNU C Library 2.2.5 is the most recent glibc that we managed to build
   ;; using gcc-2.95.3.  Newer versions (2.3.x, 2.6, 2.1x) seem to need a newer
   ;; gcc.
-  (package-with-bootstrap-guile
-   (package
-     (inherit glibc)
-     (name "glibc-mesboot0")
-     (version "2.2.5")
-     (source (origin
+  (package
+    (inherit glibc)
+    (name "glibc-mesboot0")
+    (version "2.2.5")
+    (source (bootstrap-origin
+             (origin
                (method url-fetch)
                (uri (string-append "mirror://gnu/glibc/glibc-"
                                    version
@@ -695,211 +695,208 @@ ac_cv_c_float_format='IEEE (little-endian)'
                (patches (search-patches "glibc-boot-2.2.5.patch"))
                (sha256
                 (base32
-                 "1vl48i16gx6h68whjyhgnn1s57vqq32f9ygfa2fls7pdkbsqvp2q"))))
-     (supported-systems '("i686-linux" "x86_64-linux"))
-     (inputs '())
-     (propagated-inputs '())
-     (native-inputs `(("binutils" ,binutils-mesboot0)
-                      ("gcc" ,gcc-core-mesboot)
-
-                      ("bash" ,%bootstrap-coreutils&co)
-                      ("coreutils" ,%bootstrap-coreutils&co)
-                      ("diffutils" ,diffutils-mesboot)
-                      ("headers" ,mesboot-headers)
-                      ("make" ,make-mesboot0)))
-     (outputs '("out"))
-     (arguments
-      `(#:implicit-inputs? #f
-        #:guile ,%bootstrap-guile
-        #:tests? #f
-        #:strip-binaries? #f
-        #:parallel-build? #f    ; gcc-2.95.3 ICEs on massively parallel builds
-        #:make-flags (list (string-append
-                            "SHELL="
-                            (assoc-ref %build-inputs "bash")
-                            "/bin/sh"))
-        #:configure-flags
-        (let ((out (assoc-ref %outputs "out"))
-              (headers (assoc-ref %build-inputs "headers")))
-          (list
-           "--disable-shared"
-           "--enable-static"
-           "--disable-sanity-checks"
-           "--build=i686-unknown-linux-gnu"
-           "--host=i686-unknown-linux-gnu"
-           (string-append "--with-headers=" headers "/include")
-           "--enable-static-nss"
-           "--without-__thread"
-           "--without-cvs"
-           "--without-gd"
-           "--without-tls"
-           (string-append "--prefix=" out)))
-        #:phases
-        (modify-phases %standard-phases
-          (add-before 'configure 'setenv
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((out (assoc-ref outputs "out"))
-                     (bash (assoc-ref %build-inputs "bash"))
-                     (gcc (assoc-ref %build-inputs "gcc"))
-                     (headers (assoc-ref %build-inputs "headers"))
-                     (cppflags (string-append
-                                ;;" -D __STDC__=1"
-                                " -D MES_BOOTSTRAP=1"
-                                " -D BOOTSTRAP_GLIBC=1"))
-                     (cflags (string-append " -L " (getcwd))))
-                (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
-                (setenv "SHELL" (getenv "CONFIG_SHELL"))
-                (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
-                (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags))
-                #t)))
-          ;; glibc-2.2.5 needs a more classic invocation of configure
-          ;; configure: warning: CONFIG_SHELL=/gnu/store/…-bash-minimal-4.4.12/bin/bash: invalid host type
-          (replace 'configure
-            (lambda* (#:key configure-flags #:allow-other-keys)
-              (format (current-error-port)
-                      "running ./configure ~a\n" (string-join configure-flags))
-              (apply invoke "./configure" configure-flags))))))
-     (native-search-paths
-      ;; Use the language-specific variables rather than 'CPATH' because they
-      ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
-      ;; The intent is to allow headers that are in the search path to be
-      ;; treated as "system headers" (headers exempt from warnings) just like
-      ;; the typical /usr/include headers on an FHS system.
-      (list (search-path-specification
-             (variable "C_INCLUDE_PATH")
-             (files '("include")))
-            (search-path-specification
-             (variable "CPLUS_INCLUDE_PATH")
-             (files '("include")))
-            (search-path-specification
-             (variable "LIBRARY_PATH")
-             (files '("lib"))))))))
+                 "1vl48i16gx6h68whjyhgnn1s57vqq32f9ygfa2fls7pdkbsqvp2q")))))
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (inputs '())
+    (propagated-inputs '())
+    (native-inputs `(("binutils" ,binutils-mesboot0)
+                     ("gcc" ,gcc-core-mesboot)
+
+                     ("bash" ,%bootstrap-coreutils&co)
+                     ("coreutils" ,%bootstrap-coreutils&co)
+                     ("diffutils" ,diffutils-mesboot)
+                     ("headers" ,mesboot-headers)
+                     ("make" ,make-mesboot0)))
+    (outputs '("out"))
+    (arguments
+     `(#:implicit-inputs? #f
+       #:guile ,%bootstrap-guile
+       #:tests? #f
+       #:strip-binaries? #f
+       #:parallel-build? #f     ; gcc-2.95.3 ICEs on massively parallel builds
+       #:make-flags (list (string-append
+                           "SHELL="
+                           (assoc-ref %build-inputs "bash")
+                           "/bin/sh"))
+       #:configure-flags
+       (let ((out (assoc-ref %outputs "out"))
+             (headers (assoc-ref %build-inputs "headers")))
+         (list
+          "--disable-shared"
+          "--enable-static"
+          "--disable-sanity-checks"
+          "--build=i686-unknown-linux-gnu"
+          "--host=i686-unknown-linux-gnu"
+          (string-append "--with-headers=" headers "/include")
+          "--enable-static-nss"
+          "--without-__thread"
+          "--without-cvs"
+          "--without-gd"
+          "--without-tls"
+          (string-append "--prefix=" out)))
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'configure 'setenv
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bash (assoc-ref %build-inputs "bash"))
+                    (gcc (assoc-ref %build-inputs "gcc"))
+                    (headers (assoc-ref %build-inputs "headers"))
+                    (cppflags (string-append
+                               ;;" -D __STDC__=1"
+                               " -D MES_BOOTSTRAP=1"
+                               " -D BOOTSTRAP_GLIBC=1"))
+                    (cflags (string-append " -L " (getcwd))))
+               (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+               (setenv "SHELL" (getenv "CONFIG_SHELL"))
+               (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
+               (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags))
+               #t)))
+         ;; glibc-2.2.5 needs a more classic invocation of configure
+         ;; configure: warning: CONFIG_SHELL=/gnu/store/…-bash-minimal-4.4.12/bin/bash: invalid host type
+         (replace 'configure
+           (lambda* (#:key configure-flags #:allow-other-keys)
+             (format (current-error-port)
+                     "running ./configure ~a\n" (string-join configure-flags))
+             (apply invoke "./configure" configure-flags))))))
+    (native-search-paths
+     ;; Use the language-specific variables rather than 'CPATH' because they
+     ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
+     ;; The intent is to allow headers that are in the search path to be
+     ;; treated as "system headers" (headers exempt from warnings) just like
+     ;; the typical /usr/include headers on an FHS system.
+     (list (search-path-specification
+            (variable "C_INCLUDE_PATH")
+            (files '("include")))
+           (search-path-specification
+            (variable "CPLUS_INCLUDE_PATH")
+            (files '("include")))
+           (search-path-specification
+            (variable "LIBRARY_PATH")
+            (files '("lib")))))))
 
 (define gcc-mesboot0
-  (package-with-bootstrap-guile
-   (package
-     (inherit gcc-core-mesboot)
-     (name "gcc-mesboot0")
-     (native-inputs `(("binutils" ,binutils-mesboot0)
-                      ("gcc" ,gcc-core-mesboot)
-                      ("libc" ,glibc-mesboot0)
-
-                      ("bash" ,%bootstrap-coreutils&co)
-                      ("coreutils" ,%bootstrap-coreutils&co)
-                      ("diffutils" ,diffutils-mesboot)
-                      ("kernel-headers" ,%bootstrap-linux-libre-headers)
-                      ("make" ,make-mesboot0)))
-     (arguments
-      (substitute-keyword-arguments (package-arguments gcc-core-mesboot)
-        ((#:phases phases)
-         `(modify-phases ,phases
-            (replace 'setenv
-              (lambda* (#:key outputs #:allow-other-keys)
-                (let ((out (assoc-ref outputs "out"))
-                      (bash (assoc-ref %build-inputs "bash"))
-                      (gcc (assoc-ref %build-inputs "gcc"))
-                      (glibc (assoc-ref %build-inputs "libc"))
-                      (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
-                  (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
-                  (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
-                  (setenv "C_INCLUDE_PATH" (string-append
-                                            gcc "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include"
-                                            ":" kernel-headers "/include"
-                                            ":" glibc "/include"))
-                  (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
-                  (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
-                  ;; FIXME: add glibc dirs to paths manually
-                  (setenv "LIBRARY_PATH" (string-join
-                                          (list (string-append glibc "/lib")
-                                                (getenv "LIBRARY_PATH"))
-                                          ":"))
-                  (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
-                  (with-output-to-file "config.cache"
-                    (lambda _
-                      (display "
+  (package
+    (inherit gcc-core-mesboot)
+    (name "gcc-mesboot0")
+    (native-inputs `(("binutils" ,binutils-mesboot0)
+                     ("gcc" ,gcc-core-mesboot)
+                     ("libc" ,glibc-mesboot0)
+
+                     ("bash" ,%bootstrap-coreutils&co)
+                     ("coreutils" ,%bootstrap-coreutils&co)
+                     ("diffutils" ,diffutils-mesboot)
+                     ("kernel-headers" ,%bootstrap-linux-libre-headers)
+                     ("make" ,make-mesboot0)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments gcc-core-mesboot)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (replace 'setenv
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let ((out (assoc-ref outputs "out"))
+                     (bash (assoc-ref %build-inputs "bash"))
+                     (gcc (assoc-ref %build-inputs "gcc"))
+                     (glibc (assoc-ref %build-inputs "libc"))
+                     (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
+                 (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+                 (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
+                 (setenv "C_INCLUDE_PATH" (string-append
+                                           gcc "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include"
+                                           ":" kernel-headers "/include"
+                                           ":" glibc "/include"))
+                 (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
+                 (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
+                 ;; FIXME: add glibc dirs to paths manually
+                 (setenv "LIBRARY_PATH" (string-join
+                                         (list (string-append glibc "/lib")
+                                               (getenv "LIBRARY_PATH"))
+                                         ":"))
+                 (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
+                 (with-output-to-file "config.cache"
+                   (lambda _
+                     (display "
 ac_cv_c_float_format='IEEE (little-endian)'
 ")))
-                  #t)))
-            (replace 'install2
-              (lambda* (#:key outputs #:allow-other-keys)
-                (let* ((out (assoc-ref outputs "out"))
-                       (gcc-dir (string-append
-                                 out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3")))
-                  (mkdir-p "tmp")
-                  (zero? (system (string-append "set -x; cd tmp && ar x ../gcc/libgcc2.a")))
-                  (zero? (system (string-append "set -x; cd tmp && ar r " gcc-dir "/libgcc.a *.o")))
-                  (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a"))
-                  #t)))))
-        ((#:configure-flags configure-flags)
-         `(let ((out (assoc-ref %outputs "out")))
-            `("--disable-shared"
-              "--disable-werror"
-              "--build=i686-unknown-linux-gnu"
-              "--host=i686-unknown-linux-gnu"
-              ,(string-append "--prefix=" out))))
-        ((#:make-flags make-flags)
-         `(let ((gcc (assoc-ref %build-inputs "gcc")))
-            `("RANLIB=true"
-              ,(string-append "LIBGCC2_INCLUDES=-I " gcc "/include")
-              "LANGUAGES=c"))))))))
+                 #t)))
+           (replace 'install2
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (gcc-dir (string-append
+                                out "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3")))
+                 (mkdir-p "tmp")
+                 (zero? (system (string-append "set -x; cd tmp && ar x ../gcc/libgcc2.a")))
+                 (zero? (system (string-append "set -x; cd tmp && ar r " gcc-dir "/libgcc.a *.o")))
+                 (copy-file "gcc/libgcc2.a" (string-append out "/lib/libgcc2.a"))
+                 #t)))))
+       ((#:configure-flags configure-flags)
+        `(let ((out (assoc-ref %outputs "out")))
+           `("--disable-shared"
+             "--disable-werror"
+             "--build=i686-unknown-linux-gnu"
+             "--host=i686-unknown-linux-gnu"
+             ,(string-append "--prefix=" out))))
+       ((#:make-flags make-flags)
+        `(let ((gcc (assoc-ref %build-inputs "gcc")))
+           `("RANLIB=true"
+             ,(string-append "LIBGCC2_INCLUDES=-I " gcc "/include")
+             "LANGUAGES=c")))))))
 
 (define binutils-mesboot
-  (package-with-bootstrap-guile
-   (package
-     (inherit binutils-mesboot0)
-     (name "binutils-mesboot")
-     (native-inputs `(("binutils" ,binutils-mesboot0)
-                      ("libc" ,glibc-mesboot0)
-                      ("gcc" ,gcc-mesboot0)
-
-                      ("bash" ,%bootstrap-coreutils&co)
-                      ("coreutils" ,%bootstrap-coreutils&co)
-                      ("diffutils" ,diffutils-mesboot)
-                      ("kernel-headers" ,%bootstrap-linux-libre-headers)
-                      ("make" ,make-mesboot0)))
-     (arguments
-      (substitute-keyword-arguments (package-arguments binutils-mesboot0)
-        ((#:configure-flags configure-flags)
-         '(list "--disable-nls"
-                "--disable-shared"
-                "--disable-werror"
-                "--build=i686-unknown-linux-gnu"
-                "--host=i686-unknown-linux-gnu"
-                "--with-sysroot=/")))))))
+  (package
+    (inherit binutils-mesboot0)
+    (name "binutils-mesboot")
+    (native-inputs `(("binutils" ,binutils-mesboot0)
+                     ("libc" ,glibc-mesboot0)
+                     ("gcc" ,gcc-mesboot0)
+
+                     ("bash" ,%bootstrap-coreutils&co)
+                     ("coreutils" ,%bootstrap-coreutils&co)
+                     ("diffutils" ,diffutils-mesboot)
+                     ("kernel-headers" ,%bootstrap-linux-libre-headers)
+                     ("make" ,make-mesboot0)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments binutils-mesboot0)
+       ((#:configure-flags configure-flags)
+        '(list "--disable-nls"
+               "--disable-shared"
+               "--disable-werror"
+               "--build=i686-unknown-linux-gnu"
+               "--host=i686-unknown-linux-gnu"
+               "--with-sysroot=/"))))))
 
 (define make-mesboot
-  (package-with-bootstrap-guile
-   (package
-     (inherit make-mesboot0)
-     (name "make-mesboot")
-     (version "3.82")
-     (source (origin
-               (method url-fetch)
-               (uri (string-append "mirror://gnu/make/make-"
-                                   version ".tar.gz"))
-               (sha256
-                (base32
-                 "1rs2f9hmvy3q6zkl15jnlmnpgffm0bhw5ax0h5c7q604wqrip69x"))))
-     (native-inputs `(("binutils" ,binutils-mesboot0)
-                      ("libc" ,glibc-mesboot0)
-                      ("gcc" ,gcc-mesboot0)
-                      ("make" ,make-mesboot0)
-
-                      ("bash" ,%bootstrap-coreutils&co)
-                      ("coreutils" ,%bootstrap-coreutils&co)
-                      ("kernel-headers" ,%bootstrap-linux-libre-headers)))
-     (arguments
-      (substitute-keyword-arguments (package-arguments make-mesboot0)
-        ((#:configure-flags configure-flags)
-         `(let ((out (assoc-ref %outputs "out")))
-            `(,(string-append "--prefix=" out))))
-        ((#:phases phases)
-         `(modify-phases ,phases
-            (delete 'configure-fixup)
-            (add-before 'configure 'setenv
-              (lambda _
-                (setenv "LIBS" "-lc -lnss_files -lnss_dns -lresolv")
-                #t)))))))))
+  (package
+    (inherit make-mesboot0)
+    (name "make-mesboot")
+    (version "3.82")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/make/make-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1rs2f9hmvy3q6zkl15jnlmnpgffm0bhw5ax0h5c7q604wqrip69x"))))
+    (native-inputs `(("binutils" ,binutils-mesboot0)
+                     ("libc" ,glibc-mesboot0)
+                     ("gcc" ,gcc-mesboot0)
+                     ("make" ,make-mesboot0)
+
+                     ("bash" ,%bootstrap-coreutils&co)
+                     ("coreutils" ,%bootstrap-coreutils&co)
+                     ("kernel-headers" ,%bootstrap-linux-libre-headers)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments make-mesboot0)
+       ((#:configure-flags configure-flags)
+        `(let ((out (assoc-ref %outputs "out")))
+           `(,(string-append "--prefix=" out))))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (delete 'configure-fixup)
+           (add-before 'configure 'setenv
+             (lambda _
+               (setenv "LIBS" "-lc -lnss_files -lnss_dns -lresolv")
+               #t))))))))
 
 (define gmp-boot
   (package
@@ -936,158 +933,157 @@ ac_cv_c_float_format='IEEE (little-endian)'
                 "1hzci2zrrd7v3g1jk35qindq05hbl0bhjcyyisq9z209xb3fqzb1"))))))
 
 (define gcc-mesboot1
-  (package-with-bootstrap-guile
-   (package
-     (inherit gcc-mesboot0)
-     (name "gcc-mesboot1")
-     (version "4.7.4")
-     (source (origin (inherit (package-source gcc-4.7))
-                     (patches (search-patches "gcc-boot-4.7.4.patch"))))
-     (inputs `(("gmp-source" ,(package-source gmp-boot))
-               ("mpfr-source" ,(package-source mpfr-boot))
-               ("mpc-source" ,(package-source mpc-boot))))
-     (native-inputs `(("binutils" ,binutils-mesboot)
-                      ("gcc" ,gcc-mesboot0)
-                      ("libc" ,glibc-mesboot0)
-
-                      ("bash" ,%bootstrap-coreutils&co)
-                      ("coreutils" ,%bootstrap-coreutils&co)
-                      ("diffutils" ,diffutils-mesboot)
-                      ("kernel-headers" ,%bootstrap-linux-libre-headers)
-                      ("make" ,make-mesboot)))
-     (arguments
-      (substitute-keyword-arguments (package-arguments gcc-core-mesboot)
-        ((#:make-flags make-flags)
-         `(let* ((libc (assoc-ref %build-inputs "libc"))
-                 (ldflags (string-append
-                           "-B" libc "/lib "
-                           "-Wl,-dynamic-linker "
-                           "-Wl," libc
-                           ,(glibc-dynamic-linker "i686-linux"))))
-            (list (string-append "LDFLAGS=" ldflags)
-                  (string-append "LDFLAGS_FOR_TARGET=" ldflags))))
-        ((#:phases phases)
-         `(modify-phases ,phases
-            ;; c&p from commencement.scm:gcc-boot0
-            (add-after 'unpack 'unpack-gmp&co
-              (lambda* (#:key inputs #:allow-other-keys)
-                (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
-                      (mpfr (assoc-ref %build-inputs "mpfr-source"))
-                      (mpc  (assoc-ref %build-inputs "mpc-source")))
-
-                  ;; To reduce the set of pre-built bootstrap inputs, build
-                  ;; GMP & co. from GCC.
-                  (for-each (lambda (source)
-                              (or (invoke "tar" "xvf" source)
-                                  (error "failed to unpack tarball"
-                                         source)))
-                            (list gmp mpfr mpc))
-
-                  ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
-                  ,@(map (lambda (lib)
-                           ;; Drop trailing letters, as gmp-6.0.0a unpacks
-                           ;; into gmp-6.0.0.
-                           `(symlink ,(string-trim-right
-                                       (package-full-name lib "-")
-                                       char-set:letter)
-                                     ,(package-name lib)))
-                         (list gmp-boot mpfr-boot mpc-boot))
-                  #t)))
-            (delete 'remove-info)
-            (replace 'setenv
-              (lambda* (#:key outputs #:allow-other-keys)
-                (let* ((out (assoc-ref outputs "out"))
-                       (binutils (assoc-ref %build-inputs "binutils"))
-                       (bash (assoc-ref %build-inputs "bash"))
-                       (gcc (assoc-ref %build-inputs "gcc"))
-                       (glibc (assoc-ref %build-inputs "libc"))
-                       (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
-                  (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
-                  (setenv "C_INCLUDE_PATH" (string-append
-                                            gcc "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include"
-                                            ":" kernel-headers "/include"
-                                            ":" glibc "/include"
-                                            ":" (getcwd) "/mpfr/src"))
-                  (setenv "LIBRARY_PATH" (string-append glibc "/lib"
-                                                        ":" gcc "/lib"))
-                  (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
-                  (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
-                  #t)))
-            (delete 'install2)))
-        ((#:configure-flags configure-flags)
-         `(let ((out (assoc-ref %outputs "out"))
-                (glibc (assoc-ref %build-inputs "libc")))
-            (list (string-append "--prefix=" out)
-                  "--build=i686-unknown-linux-gnu"
-                  "--host=i686-unknown-linux-gnu"
-
-                  (string-append "--with-native-system-header-dir=" glibc "/include")
-                  (string-append "--with-build-sysroot=" glibc "/include")
-
-                  "--disable-bootstrap"
-                  "--disable-decimal-float"
-                  "--disable-libatomic"
-                  "--disable-libcilkrts"
-                  "--disable-libgomp"
-                  "--disable-libitm"
-                  "--disable-libmudflap"
-                  "--disable-libquadmath"
-                  "--disable-libsanitizer"
-                  "--disable-libssp"
-                  "--disable-libvtv"
-                  "--disable-lto"
-                  "--disable-lto-plugin"
-                  "--disable-multilib"
-                  "--disable-plugin"
-                  "--disable-threads"
-                  "--enable-languages=c,c++"
-
-                  "--enable-static"
-                  ;; libstdc++.so: error: depends on 'libgcc_s.so.1', which cannot be found in RUNPATH ()
-                  "--disable-shared"
-                  "--enable-threads=single"
-
-                  ;; No pre-compiled libstdc++ headers, to save space.
-                  "--disable-libstdcxx-pch"
-
-                  ;; for libcpp ...
-                  "--disable-build-with-cxx"))))))))
+  (package
+    (inherit gcc-mesboot0)
+    (name "gcc-mesboot1")
+    (version "4.7.4")
+    (source (bootstrap-origin
+             (origin (inherit (package-source gcc-4.7))
+                     (patches (search-patches "gcc-boot-4.7.4.patch")))))
+    (inputs `(("gmp-source" ,(package-source gmp-boot))
+              ("mpfr-source" ,(package-source mpfr-boot))
+              ("mpc-source" ,(package-source mpc-boot))))
+    (native-inputs `(("binutils" ,binutils-mesboot)
+                     ("gcc" ,gcc-mesboot0)
+                     ("libc" ,glibc-mesboot0)
+
+                     ("bash" ,%bootstrap-coreutils&co)
+                     ("coreutils" ,%bootstrap-coreutils&co)
+                     ("diffutils" ,diffutils-mesboot)
+                     ("kernel-headers" ,%bootstrap-linux-libre-headers)
+                     ("make" ,make-mesboot)))
+    (arguments
+     (substitute-keyword-arguments (package-arguments gcc-core-mesboot)
+       ((#:make-flags make-flags)
+        `(let* ((libc (assoc-ref %build-inputs "libc"))
+                (ldflags (string-append
+                          "-B" libc "/lib "
+                          "-Wl,-dynamic-linker "
+                          "-Wl," libc
+                          ,(glibc-dynamic-linker "i686-linux"))))
+           (list (string-append "LDFLAGS=" ldflags)
+                 (string-append "LDFLAGS_FOR_TARGET=" ldflags))))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           ;; c&p from commencement.scm:gcc-boot0
+           (add-after 'unpack 'unpack-gmp&co
+             (lambda* (#:key inputs #:allow-other-keys)
+               (let ((gmp  (assoc-ref %build-inputs "gmp-source"))
+                     (mpfr (assoc-ref %build-inputs "mpfr-source"))
+                     (mpc  (assoc-ref %build-inputs "mpc-source")))
+
+                 ;; To reduce the set of pre-built bootstrap inputs, build
+                 ;; GMP & co. from GCC.
+                 (for-each (lambda (source)
+                             (or (invoke "tar" "xvf" source)
+                                 (error "failed to unpack tarball"
+                                        source)))
+                           (list gmp mpfr mpc))
+
+                 ;; Create symlinks like `gmp' -> `gmp-x.y.z'.
+                 ,@(map (lambda (lib)
+                          ;; Drop trailing letters, as gmp-6.0.0a unpacks
+                          ;; into gmp-6.0.0.
+                          `(symlink ,(string-trim-right
+                                      (package-full-name lib "-")
+                                      char-set:letter)
+                                    ,(package-name lib)))
+                        (list gmp-boot mpfr-boot mpc-boot))
+                 #t)))
+           (delete 'remove-info)
+           (replace 'setenv
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (binutils (assoc-ref %build-inputs "binutils"))
+                      (bash (assoc-ref %build-inputs "bash"))
+                      (gcc (assoc-ref %build-inputs "gcc"))
+                      (glibc (assoc-ref %build-inputs "libc"))
+                      (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
+                 (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+                 (setenv "C_INCLUDE_PATH" (string-append
+                                           gcc "/lib/gcc-lib/i686-unknown-linux-gnu/2.95.3/include"
+                                           ":" kernel-headers "/include"
+                                           ":" glibc "/include"
+                                           ":" (getcwd) "/mpfr/src"))
+                 (setenv "LIBRARY_PATH" (string-append glibc "/lib"
+                                                       ":" gcc "/lib"))
+                 (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
+                 (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
+                 #t)))
+           (delete 'install2)))
+       ((#:configure-flags configure-flags)
+        `(let ((out (assoc-ref %outputs "out"))
+               (glibc (assoc-ref %build-inputs "libc")))
+           (list (string-append "--prefix=" out)
+                 "--build=i686-unknown-linux-gnu"
+                 "--host=i686-unknown-linux-gnu"
+
+                 (string-append "--with-native-system-header-dir=" glibc "/include")
+                 (string-append "--with-build-sysroot=" glibc "/include")
+
+                 "--disable-bootstrap"
+                 "--disable-decimal-float"
+                 "--disable-libatomic"
+                 "--disable-libcilkrts"
+                 "--disable-libgomp"
+                 "--disable-libitm"
+                 "--disable-libmudflap"
+                 "--disable-libquadmath"
+                 "--disable-libsanitizer"
+                 "--disable-libssp"
+                 "--disable-libvtv"
+                 "--disable-lto"
+                 "--disable-lto-plugin"
+                 "--disable-multilib"
+                 "--disable-plugin"
+                 "--disable-threads"
+                 "--enable-languages=c,c++"
+
+                 "--enable-static"
+                 ;; libstdc++.so: error: depends on 'libgcc_s.so.1', which cannot be found in RUNPATH ()
+                 "--disable-shared"
+                 "--enable-threads=single"
+
+                 ;; No pre-compiled libstdc++ headers, to save space.
+                 "--disable-libstdcxx-pch"
+
+                 ;; for libcpp ...
+                 "--disable-build-with-cxx")))))))
 
 (define gcc-mesboot1-wrapper
   ;; We need this so gcc-mesboot1 can be used to create shared binaries that
   ;; have the correct interpreter, otherwise configuring gcc-mesboot using
   ;; --enable-shared will fail.
-  (package-with-bootstrap-guile
-   (package
-     (inherit gcc-mesboot1)
-     (name "gcc-mesboot1-wrapper")
-     (source #f)
-     (inputs '())
-     (native-inputs `(("bash" ,%bootstrap-coreutils&co)
-                      ("libc" ,glibc-mesboot)
-                      ("gcc" ,gcc-mesboot1)))
-     (arguments
-      `(#:implicit-inputs? #f
-        #:guile ,%bootstrap-guile
-        #:phases
-        (modify-phases %standard-phases
-          (delete 'unpack)
-          (delete 'configure)
-          (delete 'install)
-          (replace 'build
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((out (assoc-ref outputs "out"))
-                     (bash (assoc-ref %build-inputs "bash"))
-                     (libc (assoc-ref %build-inputs "libc"))
-                     (gcc (assoc-ref %build-inputs "gcc"))
-                     (bin (string-append out "/bin")))
-                (mkdir-p bin)
-                (for-each
-                 (lambda (program)
-                   (let ((wrapper (string-append bin "/" program)))
-                     (with-output-to-file wrapper
-                       (lambda _
-                         (display (string-append "#! " bash "/bin/bash
+  (package
+    (inherit gcc-mesboot1)
+    (name "gcc-mesboot1-wrapper")
+    (source #f)
+    (inputs '())
+    (native-inputs `(("bash" ,%bootstrap-coreutils&co)
+                     ("libc" ,glibc-mesboot)
+                     ("gcc" ,gcc-mesboot1)))
+    (arguments
+     `(#:implicit-inputs? #f
+       #:guile ,%bootstrap-guile
+       #:phases
+       (modify-phases %standard-phases
+         (delete 'unpack)
+         (delete 'configure)
+         (delete 'install)
+         (replace 'build
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bash (assoc-ref %build-inputs "bash"))
+                    (libc (assoc-ref %build-inputs "libc"))
+                    (gcc (assoc-ref %build-inputs "gcc"))
+                    (bin (string-append out "/bin")))
+               (mkdir-p bin)
+               (for-each
+                (lambda (program)
+                  (let ((wrapper (string-append bin "/" program)))
+                    (with-output-to-file wrapper
+                      (lambda _
+                        (display (string-append "#! " bash "/bin/bash
 exec " gcc "/bin/" program
 " -Wl,--dynamic-linker"
 ;; also for x86_64-linux, we are still on i686-linux
@@ -1096,28 +1092,28 @@ exec " gcc "/bin/" program
 " -Wl," libc "/lib"
 " \"$@\"
 "))
-                         (chmod wrapper #o555)))))
-                 '(
-                   "gcc"
-                   "g++"
-                   "i686-unknown-linux-gnu-gcc"
-                   "i686-unknown-linux-gnu-g++"
-                   ))
-                #t)))
-          (replace 'check
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let* ((out (assoc-ref outputs "out"))
-                     (bin (string-append out "/bin"))
-                     (program (string-append bin "/gcc")))
-                (invoke program "--help"))))))))))
+                        (chmod wrapper #o555)))))
+                '(
+                  "gcc"
+                  "g++"
+                  "i686-unknown-linux-gnu-gcc"
+                  "i686-unknown-linux-gnu-g++"
+                  ))
+               #t)))
+         (replace 'check
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (bin (string-append out "/bin"))
+                    (program (string-append bin "/gcc")))
+               (invoke program "--help")))))))))
 
 (define glibc-headers-mesboot
-  (package-with-bootstrap-guile
-   (package
-     (inherit glibc-mesboot0)
-     (name "glibc-headers-mesboot")
-     (version "2.16.0")
-     (source (origin
+  (package
+    (inherit glibc-mesboot0)
+    (name "glibc-headers-mesboot")
+    (version "2.16.0")
+    (source (bootstrap-origin
+             (origin
                (method url-fetch)
                (uri (string-append "mirror://gnu/glibc/glibc-"
                                    version
@@ -1126,273 +1122,269 @@ exec " gcc "/bin/" program
                                         "glibc-bootstrap-system-2.16.0.patch"))
                (sha256
                 (base32
-                 "0vlz4x6cgz7h54qq4528q526qlhnsjzbsvgc4iizn76cb0bfanx7"))))
-     (native-inputs `(("binutils" ,binutils-mesboot)
-                      ("libc" ,glibc-mesboot0)
-                      ("gcc" ,gcc-mesboot1)
-                      ("headers" ,mesboot-headers)
-
-                      ("bash" ,%bootstrap-coreutils&co)
-                      ("coreutils" ,%bootstrap-coreutils&co)
-                      ("diffutils" ,diffutils-mesboot)
-                      ("kernel-headers" ,%bootstrap-linux-libre-headers)
-                      ("make" ,make-mesboot)))
+                 "0vlz4x6cgz7h54qq4528q526qlhnsjzbsvgc4iizn76cb0bfanx7")))))
+    (native-inputs `(("binutils" ,binutils-mesboot)
+                     ("libc" ,glibc-mesboot0)
+                     ("gcc" ,gcc-mesboot1)
+                     ("headers" ,mesboot-headers)
+
+                     ("bash" ,%bootstrap-coreutils&co)
+                     ("coreutils" ,%bootstrap-coreutils&co)
+                     ("diffutils" ,diffutils-mesboot)
+                     ("kernel-headers" ,%bootstrap-linux-libre-headers)
+                     ("make" ,make-mesboot)))
 
-     (arguments
-      (substitute-keyword-arguments (package-arguments glibc-mesboot0)
-        ((#:configure-flags configure-flags)
-         `(let ((out (assoc-ref %outputs "out"))
-                (headers (assoc-ref %build-inputs "headers")))
-            (list
-             (string-append "--prefix=" out)
-             "--disable-obsolete-rpc"
-             "--host=i686-unknown-linux-gnu"
-             (string-append "--with-headers=" headers "/include")
-             "--enable-static-nss"
-             "--with-pthread"
-             "--without-cvs"
-             "--without-gd"
-             "--enable-add-ons=nptl")))
-        ((#:make-flags make-flags)
-         `(let ((bash (assoc-ref %build-inputs "bash")))
-            (list (string-append "SHELL=" bash "/bin/sh")
-                  "install-bootstrap-headers=yes" "install-headers")))
-        ((#:phases phases)
-         `(modify-phases ,phases
-            (replace 'setenv
-              (lambda* (#:key outputs #:allow-other-keys)
-                (let* ((out (assoc-ref outputs "out"))
-                       (headers (assoc-ref %build-inputs "headers"))
-                       (bash (assoc-ref %build-inputs "bash"))
-                       (coreutils (assoc-ref %build-inputs "coreutils"))
-                       (libc (assoc-ref %build-inputs "libc"))
-                       (gcc (assoc-ref %build-inputs "gcc"))
-                       (cppflags (string-append
-                                  " -I " (getcwd) "/nptl/sysdeps/pthread/bits"
-                                  " -D BOOTSTRAP_GLIBC=1"))
-                       (cflags (string-append " -L " (getcwd)
-                                              " -L " libc "/lib")))
-                  (setenv "libc_cv_friendly_stddef" "yes")
-                  (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
-                  (setenv "SHELL" (getenv "CONFIG_SHELL"))
-                  (format (current-error-port) "CONFIG_SHELL=~s\n" (getenv "CONFIG_SHELL"))
-
-                  (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
-                  (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags))
-
-                  ;; avoid -fstack-protector
-                  (setenv "libc_cv_ssp" "false")
-                  (substitute* "configure"
-                    (("/bin/pwd") (string-append coreutils "/bin/pwd")))
-                  (setenv "C_INCLUDE_PATH" (string-append libc "/include"
-                                                          headers "/include"))
-                  (setenv "LIBRARY_PATH" (string-append libc "/lib"))
-                  #t)))
-            (replace 'install
-              (lambda* (#:key outputs make-flags #:allow-other-keys)
-                (let ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
-                      (out (assoc-ref outputs "out")))
-                  (apply invoke "make" make-flags)
-                  (copy-recursively kernel-headers out)
-                  #t)))
-            (replace 'configure
-              (lambda* (#:key configure-flags #:allow-other-keys)
-                (format (current-error-port) "running ../configure ~a\n" (string-join configure-flags))
-                (mkdir-p "build")
-                (chdir "build")
-                (apply invoke "../configure" configure-flags)))
-            (add-after 'configure 'remove-sunrpc
-              (lambda _
-                (invoke "make" (string-append (getcwd) "/sysd-sorted" )
-                        (string-append "SHELL=" (getenv "CONFIG_SHELL")))
-                (substitute* "sysd-sorted"
-                  ((" sunrpc") " ")
-                  ((" nis") " "))
-                ;; 'rpcgen' needs native libc headers to be built.
-                (substitute* "../Makefile"
-                  (("^SHELL := /bin/sh") (string-append "SHELL := " (getenv "CONFIG_SHELL"))))
-                (substitute* "../Makeconfig"
-                  (("^SHELL := /bin/sh") (string-append "SHELL := " (getenv "CONFIG_SHELL"))))
-                (substitute* "../elf/Makefile"
-                  (("^SHELL := /bin/sh") (string-append "SHELL := " (getenv "CONFIG_SHELL")))))))))))))
+    (arguments
+     (substitute-keyword-arguments (package-arguments glibc-mesboot0)
+       ((#:configure-flags configure-flags)
+        `(let ((out (assoc-ref %outputs "out"))
+               (headers (assoc-ref %build-inputs "headers")))
+           (list
+            (string-append "--prefix=" out)
+            "--disable-obsolete-rpc"
+            "--host=i686-unknown-linux-gnu"
+            (string-append "--with-headers=" headers "/include")
+            "--enable-static-nss"
+            "--with-pthread"
+            "--without-cvs"
+            "--without-gd"
+            "--enable-add-ons=nptl")))
+       ((#:make-flags make-flags)
+        `(let ((bash (assoc-ref %build-inputs "bash")))
+           (list (string-append "SHELL=" bash "/bin/sh")
+                 "install-bootstrap-headers=yes" "install-headers")))
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (replace 'setenv
+             (lambda* (#:key outputs #:allow-other-keys)
+               (let* ((out (assoc-ref outputs "out"))
+                      (headers (assoc-ref %build-inputs "headers"))
+                      (bash (assoc-ref %build-inputs "bash"))
+                      (coreutils (assoc-ref %build-inputs "coreutils"))
+                      (libc (assoc-ref %build-inputs "libc"))
+                      (gcc (assoc-ref %build-inputs "gcc"))
+                      (cppflags (string-append
+                                 " -I " (getcwd) "/nptl/sysdeps/pthread/bits"
+                                 " -D BOOTSTRAP_GLIBC=1"))
+                      (cflags (string-append " -L " (getcwd)
+                                             " -L " libc "/lib")))
+                 (setenv "libc_cv_friendly_stddef" "yes")
+                 (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+                 (setenv "SHELL" (getenv "CONFIG_SHELL"))
+                 (format (current-error-port) "CONFIG_SHELL=~s\n" (getenv "CONFIG_SHELL"))
+
+                 (setenv "CPP" (string-append gcc "/bin/gcc -E " cppflags))
+                 (setenv "CC" (string-append gcc "/bin/gcc " cppflags cflags))
+
+                 ;; avoid -fstack-protector
+                 (setenv "libc_cv_ssp" "false")
+                 (substitute* "configure"
+                   (("/bin/pwd") (string-append coreutils "/bin/pwd")))
+                 (setenv "C_INCLUDE_PATH" (string-append libc "/include"
+                                                         headers "/include"))
+                 (setenv "LIBRARY_PATH" (string-append libc "/lib"))
+                 #t)))
+           (replace 'install
+             (lambda* (#:key outputs make-flags #:allow-other-keys)
+               (let ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
+                     (out (assoc-ref outputs "out")))
+                 (apply invoke "make" make-flags)
+                 (copy-recursively kernel-headers out)
+                 #t)))
+           (replace 'configure
+             (lambda* (#:key configure-flags #:allow-other-keys)
+               (format (current-error-port) "running ../configure ~a\n" (string-join configure-flags))
+               (mkdir-p "build")
+               (chdir "build")
+               (apply invoke "../configure" configure-flags)))
+           (add-after 'configure 'remove-sunrpc
+             (lambda _
+               (invoke "make" (string-append (getcwd) "/sysd-sorted" )
+                       (string-append "SHELL=" (getenv "CONFIG_SHELL")))
+               (substitute* "sysd-sorted"
+                 ((" sunrpc") " ")
+                 ((" nis") " "))
+               ;; 'rpcgen' needs native libc headers to be built.
+               (substitute* "../Makefile"
+                 (("^SHELL := /bin/sh") (string-append "SHELL := " (getenv "CONFIG_SHELL"))))
+               (substitute* "../Makeconfig"
+                 (("^SHELL := /bin/sh") (string-append "SHELL := " (getenv "CONFIG_SHELL"))))
+               (substitute* "../elf/Makefile"
+                 (("^SHELL := /bin/sh") (string-append "SHELL := " (getenv "CONFIG_SHELL"))))))))))))
 
 (define glibc-mesboot
-  (package-with-bootstrap-guile
-   (package
-     (inherit glibc-headers-mesboot)
-     (name "glibc-mesboot")
-     (native-inputs `(("binutils" ,binutils-mesboot)
-                      ("libc" ,glibc-mesboot0)
-                      ("headers" ,glibc-headers-mesboot)
-                      ("gcc" ,gcc-mesboot1)
-
-                      ("bash" ,%bootstrap-coreutils&co)
-                      ("coreutils" ,%bootstrap-coreutils&co)
-                      ("diffutils" ,diffutils-mesboot)
-                      ("kernel-headers" ,%bootstrap-linux-libre-headers)
-                      ("make" ,make-mesboot)))
+  (package
+    (inherit glibc-headers-mesboot)
+    (name "glibc-mesboot")
+    (native-inputs `(("binutils" ,binutils-mesboot)
+                     ("libc" ,glibc-mesboot0)
+                     ("headers" ,glibc-headers-mesboot)
+                     ("gcc" ,gcc-mesboot1)
+
+                     ("bash" ,%bootstrap-coreutils&co)
+                     ("coreutils" ,%bootstrap-coreutils&co)
+                     ("diffutils" ,diffutils-mesboot)
+                     ("kernel-headers" ,%bootstrap-linux-libre-headers)
+                     ("make" ,make-mesboot)))
 
-     (arguments
-      `(#:validate-runpath? #f ; fails when using --enable-shared
-        ,@(substitute-keyword-arguments (package-arguments glibc-headers-mesboot)
-            ((#:make-flags make-flags)
-             `(let ((bash (assoc-ref %build-inputs "bash")))
-                (list (string-append "SHELL=" bash "/bin/sh"))))
-            ((#:phases phases)
-             `(modify-phases ,phases
-                (replace 'install
-                  (lambda* (#:key outputs make-flags #:allow-other-keys)
-                    (let* ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
-                           (out (assoc-ref outputs "out"))
-                           (install-flags (cons "install" make-flags)))
-                      (apply invoke "make" install-flags)
-                      (copy-recursively kernel-headers out)
-                      #t))))))))
-     (native-search-paths ;; FIXME: move to glibc-mesboot0
-      ;; Use the language-specific variables rather than 'CPATH' because they
-      ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
-      ;; The intent is to allow headers that are in the search path to be
-      ;; treated as "system headers" (headers exempt from warnings) just like
-      ;; the typical /usr/include headers on an FHS system.
-      (list (search-path-specification
-             (variable "C_INCLUDE_PATH")
-             (files '("include")))
-            (search-path-specification
-             (variable "CPLUS_INCLUDE_PATH")
-             (files '("include")))
-            (search-path-specification
-             (variable "LIBRARY_PATH")
-             (files '("lib"))))))))
+    (arguments
+     `(#:validate-runpath? #f               ; fails when using --enable-shared
+       ,@(substitute-keyword-arguments (package-arguments glibc-headers-mesboot)
+           ((#:make-flags make-flags)
+            `(let ((bash (assoc-ref %build-inputs "bash")))
+               (list (string-append "SHELL=" bash "/bin/sh"))))
+           ((#:phases phases)
+            `(modify-phases ,phases
+               (replace 'install
+                 (lambda* (#:key outputs make-flags #:allow-other-keys)
+                   (let* ((kernel-headers (assoc-ref %build-inputs "kernel-headers"))
+                          (out (assoc-ref outputs "out"))
+                          (install-flags (cons "install" make-flags)))
+                     (apply invoke "make" install-flags)
+                     (copy-recursively kernel-headers out)
+                     #t))))))))
+    (native-search-paths ;; FIXME: move to glibc-mesboot0
+     ;; Use the language-specific variables rather than 'CPATH' because they
+     ;; are equivalent to '-isystem' whereas 'CPATH' is equivalent to '-I'.
+     ;; The intent is to allow headers that are in the search path to be
+     ;; treated as "system headers" (headers exempt from warnings) just like
+     ;; the typical /usr/include headers on an FHS system.
+     (list (search-path-specification
+            (variable "C_INCLUDE_PATH")
+            (files '("include")))
+           (search-path-specification
+            (variable "CPLUS_INCLUDE_PATH")
+            (files '("include")))
+           (search-path-specification
+            (variable "LIBRARY_PATH")
+            (files '("lib")))))))
 
 (define gcc-mesboot
-  (package-with-bootstrap-guile
-   (package
-     (inherit gcc-mesboot1)
-     (name "gcc-mesboot")
-     (version "4.9.4")
-     (source (package-source gcc-4.9))
-     (native-inputs `(("binutils" ,binutils-mesboot)
-                      ("gcc-wrapper" ,gcc-mesboot1-wrapper)
-                      ("gcc" ,gcc-mesboot1)
-                      ("libc" ,glibc-mesboot)
-
-                      ("bash" ,%bootstrap-coreutils&co)
-                      ("coreutils" ,%bootstrap-coreutils&co)
-                      ("diffutils" ,diffutils-mesboot)
-                      ("kernel-headers" ,%bootstrap-linux-libre-headers)
-                      ("make" ,make-mesboot)))
-     (arguments
-      `(#:validate-runpath? #f
-        ,@(substitute-keyword-arguments (package-arguments gcc-mesboot1)
-            ((#:configure-flags configure-flags)
-             `(let ((out (assoc-ref %outputs "out"))
-                    (glibc (assoc-ref %build-inputs "libc")))
-                (list (string-append "--prefix=" out)
-                      "--build=i686-unknown-linux-gnu"
-                      "--host=i686-unknown-linux-gnu"
-
-                      "--with-host-libstdcxx=-lsupc++"
-
-                      (string-append "--with-native-system-header-dir=" glibc "/include")
-                      (string-append "--with-build-sysroot=" glibc "/include")
-
-                      "--disable-bootstrap"
-                      "--disable-decimal-float"
-                      "--disable-libatomic"
-                      "--disable-libcilkrts"
-                      "--disable-libgomp"
-                      "--disable-libitm"
-                      "--disable-libmudflap"
-                      "--disable-libquadmath"
-                      "--disable-libsanitizer"
-                      "--disable-libssp"
-                      "--disable-libvtv"
-                      "--disable-lto"
-                      "--disable-lto-plugin"
-                      "--disable-multilib"
-                      "--disable-plugin"
-                      "--disable-threads"
-                      "--enable-languages=c,c++"
-
-                      "--enable-static"
-                      "--enable-shared"
-                      "--enable-threads=single"
-
-                      ;; No pre-compiled libstdc++ headers, to save space.
-                      "--disable-libstdcxx-pch"
-
-                      ;; for libcpp ...
-                      "--disable-build-with-cxx")))
-            ((#:phases phases)
-             `(modify-phases ,phases
-                (replace 'setenv
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    (let* ((out (assoc-ref outputs "out"))
-                           (binutils (assoc-ref %build-inputs "binutils"))
-                           (bash (assoc-ref %build-inputs "bash"))
-                           (gcc (assoc-ref %build-inputs "gcc"))
-                           (glibc (assoc-ref %build-inputs "libc"))
-                           (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
-                      (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
-                      (setenv "C_INCLUDE_PATH" (string-append
-                                                gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.7.4/include"
-                                                ":" kernel-headers "/include"
-                                                ":" glibc "/include"
-                                                ":" (getcwd) "/mpfr/src"))
-                      (setenv "CPLUS_INCLUDE_PATH" (string-append
-                                                    gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.7.4/include"
-                                                    ":" kernel-headers "/include"
-                                                    ":" glibc "/include"
-                                                    ":" (getcwd) "/mpfr/src"))
-                      (setenv "LIBRARY_PATH" (string-append glibc "/lib"
-                                                            ":" gcc "/lib"))
-                      (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
-                      (format (current-error-port) "CPLUS_INCLUDE_PATH=~a\n" (getenv "CPLUS_INCLUDE_PATH"))
-                      (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
-                      #t)))))))))))
+  (package
+    (inherit gcc-mesboot1)
+    (name "gcc-mesboot")
+    (version "4.9.4")
+    (source (bootstrap-origin (package-source gcc-4.9)))
+    (native-inputs `(("binutils" ,binutils-mesboot)
+                     ("gcc-wrapper" ,gcc-mesboot1-wrapper)
+                     ("gcc" ,gcc-mesboot1)
+                     ("libc" ,glibc-mesboot)
+
+                     ("bash" ,%bootstrap-coreutils&co)
+                     ("coreutils" ,%bootstrap-coreutils&co)
+                     ("diffutils" ,diffutils-mesboot)
+                     ("kernel-headers" ,%bootstrap-linux-libre-headers)
+                     ("make" ,make-mesboot)))
+    (arguments
+     `(#:validate-runpath? #f
+       ,@(substitute-keyword-arguments (package-arguments gcc-mesboot1)
+           ((#:configure-flags configure-flags)
+            `(let ((out (assoc-ref %outputs "out"))
+                   (glibc (assoc-ref %build-inputs "libc")))
+               (list (string-append "--prefix=" out)
+                     "--build=i686-unknown-linux-gnu"
+                     "--host=i686-unknown-linux-gnu"
+
+                     "--with-host-libstdcxx=-lsupc++"
+
+                     (string-append "--with-native-system-header-dir=" glibc "/include")
+                     (string-append "--with-build-sysroot=" glibc "/include")
+
+                     "--disable-bootstrap"
+                     "--disable-decimal-float"
+                     "--disable-libatomic"
+                     "--disable-libcilkrts"
+                     "--disable-libgomp"
+                     "--disable-libitm"
+                     "--disable-libmudflap"
+                     "--disable-libquadmath"
+                     "--disable-libsanitizer"
+                     "--disable-libssp"
+                     "--disable-libvtv"
+                     "--disable-lto"
+                     "--disable-lto-plugin"
+                     "--disable-multilib"
+                     "--disable-plugin"
+                     "--disable-threads"
+                     "--enable-languages=c,c++"
+
+                     "--enable-static"
+                     "--enable-shared"
+                     "--enable-threads=single"
+
+                     ;; No pre-compiled libstdc++ headers, to save space.
+                     "--disable-libstdcxx-pch"
+
+                     ;; for libcpp ...
+                     "--disable-build-with-cxx")))
+           ((#:phases phases)
+            `(modify-phases ,phases
+               (replace 'setenv
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (binutils (assoc-ref %build-inputs "binutils"))
+                          (bash (assoc-ref %build-inputs "bash"))
+                          (gcc (assoc-ref %build-inputs "gcc"))
+                          (glibc (assoc-ref %build-inputs "libc"))
+                          (kernel-headers (assoc-ref %build-inputs "kernel-headers")))
+                     (setenv "CONFIG_SHELL" (string-append bash "/bin/sh"))
+                     (setenv "C_INCLUDE_PATH" (string-append
+                                               gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.7.4/include"
+                                               ":" kernel-headers "/include"
+                                               ":" glibc "/include"
+                                               ":" (getcwd) "/mpfr/src"))
+                     (setenv "CPLUS_INCLUDE_PATH" (string-append
+                                                   gcc "/lib/gcc-lib/i686-unknown-linux-gnu/4.7.4/include"
+                                                   ":" kernel-headers "/include"
+                                                   ":" glibc "/include"
+                                                   ":" (getcwd) "/mpfr/src"))
+                     (setenv "LIBRARY_PATH" (string-append glibc "/lib"
+                                                           ":" gcc "/lib"))
+                     (format (current-error-port) "C_INCLUDE_PATH=~a\n" (getenv "C_INCLUDE_PATH"))
+                     (format (current-error-port) "CPLUS_INCLUDE_PATH=~a\n" (getenv "CPLUS_INCLUDE_PATH"))
+                     (format (current-error-port) "LIBRARY_PATH=~a\n" (getenv "LIBRARY_PATH"))
+                     #t))))))))))
 
 (define gcc-mesboot-wrapper
   ;; We need this so gcc-mesboot can be used to create shared binaries that
   ;; have the correct interpreter and runpath to libc.
-  (package-with-bootstrap-guile
-   (package
-     (inherit gcc-mesboot1-wrapper)
-     (name "gcc-mesboot-wrapper")
-     (version (package-version gcc-mesboot))
-     (source #f)
-     (inputs '())
-     (native-inputs `(("bash" ,%bootstrap-coreutils&co)
-                      ("libc" ,glibc-mesboot)
-                      ("gcc" ,gcc-mesboot))))))
+  (package
+    (inherit gcc-mesboot1-wrapper)
+    (name "gcc-mesboot-wrapper")
+    (version (package-version gcc-mesboot))
+    (source #f)
+    (inputs '())
+    (native-inputs `(("bash" ,%bootstrap-coreutils&co)
+                     ("libc" ,glibc-mesboot)
+                     ("gcc" ,gcc-mesboot)))))
 
 (define m4-mesboot
-  (package-with-bootstrap-guile
-   (package
-     (inherit m4)
-     (name "m4-mesboot")
-     (version "1.4")
-     (source (origin
-               (method url-fetch)
-               (uri (string-append "mirror://gnu/m4/m4-"
-                                   version ".tar.gz"))
-               (sha256
-                (base32
-                 "1f9bxj176kf3pvs350w2dfs8jgwhminywri5pyn01b11yc4yhsjw"))))
-     (supported-systems '("i686-linux" "x86_64-linux"))
-     (native-inputs `(("mes" ,mes-boot)
-                      ("tcc" ,tcc-boot)))
-     (arguments
-      `(#:phases
-        (modify-phases %standard-phases
-          (replace 'configure
-            (lambda* (#:key outputs #:allow-other-keys)
-              (let ((out (assoc-ref outputs "out")))
-                (setenv "CONFIG_SHELL" (string-append
-                                        (assoc-ref %build-inputs "bash")
-                                        "/bin/sh"))
-                (setenv "CC" "tcc -static")
-                (setenv "CPP" "tcc -E")
-                (invoke "./configure" (string-append "--prefix=" out)))))))))))
+  (package
+    (inherit m4)
+    (name "m4-mesboot")
+    (version "1.4")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://gnu/m4/m4-"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "1f9bxj176kf3pvs350w2dfs8jgwhminywri5pyn01b11yc4yhsjw"))))
+    (supported-systems '("i686-linux" "x86_64-linux"))
+    (native-inputs `(("mes" ,mes-boot)
+                     ("tcc" ,tcc-boot)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (replace 'configure
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (setenv "CONFIG_SHELL" (string-append
+                                       (assoc-ref %build-inputs "bash")
+                                       "/bin/sh"))
+               (setenv "CC" "tcc -static")
+               (setenv "CPP" "tcc -E")
+               (invoke "./configure" (string-append "--prefix=" out))))))))))
 
 (define (%bootstrap-inputs+toolchain)
   ;; The traditional bootstrap-inputs.  For the i686-linux Reduced Binary Seed
@@ -1409,27 +1401,28 @@ exec " gcc "/bin/" program
      (%bootstrap-inputs))))
 
 (define gnu-make-boot0
-  (package-with-bootstrap-guile
-   (package (inherit gnu-make)
-     (name "make-boot0")
-     (arguments
-      `(#:guile ,%bootstrap-guile
-        #:implicit-inputs? #f
-        #:tests? #f                  ; cannot run "make check"
-        ,@(substitute-keyword-arguments (package-arguments gnu-make)
-            ((#:phases phases)
-             `(modify-phases ,phases
-                (replace 'build
-                  (lambda _
-                    (invoke "./build.sh")))
-                (replace 'install
-                  (lambda* (#:key outputs #:allow-other-keys)
-                    (let* ((out (assoc-ref outputs "out"))
-                           (bin (string-append out "/bin")))
-                      (install-file "make" bin)
-                      #t))))))))
-     (native-inputs '())                          ; no need for 'pkg-config'
-     (inputs (%bootstrap-inputs+toolchain)))))
+  (package
+    (inherit gnu-make)
+    (source (bootstrap-origin (package-source gnu-make)))
+    (name "make-boot0")
+    (arguments
+     `(#:guile ,%bootstrap-guile
+       #:implicit-inputs? #f
+       #:tests? #f                                ; cannot run "make check"
+       ,@(substitute-keyword-arguments (package-arguments gnu-make)
+           ((#:phases phases)
+            `(modify-phases ,phases
+               (replace 'build
+                 (lambda _
+                   (invoke "./build.sh")))
+               (replace 'install
+                 (lambda* (#:key outputs #:allow-other-keys)
+                   (let* ((out (assoc-ref outputs "out"))
+                          (bin (string-append out "/bin")))
+                     (install-file "make" bin)
+                     #t))))))))
+    (native-inputs '())                           ; no need for 'pkg-config'
+    (inputs (%bootstrap-inputs+toolchain))))
 
 (define diffutils-boot0
   (package-with-bootstrap-guile