From 5d4fd2671aaadc5b0b7e0c331fa5e2a1d7e5c4d8 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 20 Dec 2012 01:29:56 +0100 Subject: distro: make-bootstrap: Have libc's functions search for `sh' in $PATH. * distro/packages/make-bootstrap.scm (%glibc-with-relocatable-system, %standard-inputs-with-relocatable-glibc): New variables. (%static-inputs)[gawk]: Apply `gawk-shell.patch'. [finalize]: New procedure. Build all the packages against %STANDARD-INPUTS-WITH-RELOCATABLE-GLIBC. (%glibc-stripped): Inherit from %GLIBC-WITH-RELOCATABLE-SYSTEM. (%gcc-static, %guile-static): Build against %STANDARD-INPUTS-WITH-RELOCATABLE-GLIBC. * distro/packages/patches/gawk-shell.patch, distro/packages/patches/glibc-bootstrap-system.patch: New files. * Makefile.am (dist_patch_DATA): Add them. --- distro/packages/make-bootstrap.scm | 195 ++++++++++++++++++++++--------------- 1 file changed, 116 insertions(+), 79 deletions(-) (limited to 'distro/packages/make-bootstrap.scm') diff --git a/distro/packages/make-bootstrap.scm b/distro/packages/make-bootstrap.scm index bbed4a6e1d..4f182da853 100644 --- a/distro/packages/make-bootstrap.scm +++ b/distro/packages/make-bootstrap.scm @@ -20,6 +20,7 @@ (define-module (distro packages make-bootstrap) #:use-module (guix utils) #:use-module (guix packages) #:use-module (guix build-system trivial) + #:use-module ((guix build-system gnu) #:select (package-with-explicit-inputs)) #:use-module ((distro) #:select (search-patch)) #:use-module (distro packages base) #:use-module (distro packages bash) @@ -29,6 +30,7 @@ (define-module (distro packages make-bootstrap) #:use-module (distro packages linux) #:use-module (distro packages multiprecision) #:use-module (ice-9 match) + #:use-module (srfi srfi-1) #:export (%bootstrap-binaries-tarball %binutils-bootstrap-tarball %glibc-bootstrap-tarball @@ -66,6 +68,29 @@ (define* (static-package p #:optional (loc (current-source-location))) (augment (apply args x))) (augment args))))))) +(define %glibc-with-relocatable-system + ;; A libc whose `system' and `popen' functions looks for `sh' in $PATH. + (package (inherit glibc-final) + (arguments + (lambda (system) + (substitute-keyword-arguments ((package-arguments glibc-final) system) + ((#:patches patches) + `(cons (assoc-ref %build-inputs "patch/system") + ,patches))))) + (inputs + `(("patch/system" ,(search-patch "glibc-bootstrap-system.patch")) + ,@(package-inputs glibc-final))))) + +(define %standard-inputs-with-relocatable-glibc + ;; Standard inputs with the above libc and corresponding GCC. + `(("libc", %glibc-with-relocatable-system) + ("gcc" ,(package-with-explicit-inputs + gcc-4.7 + `(("libc",%glibc-with-relocatable-system) + ,@(alist-delete "libc" %final-inputs)) + (current-source-location))) + ,@(fold alist-delete %final-inputs '("libc" "gcc")))) + (define %bash-static (let ((bash-light (package (inherit bash-final) (inputs '()) ; no readline, no curses @@ -121,7 +146,8 @@ (define %static-inputs (gawk (package (inherit gawk) (arguments (lambda (system) - `(#:phases (alist-cons-before + `(#:patches (list (assoc-ref %build-inputs "patch/sh")) + #:phases (alist-cons-before 'build 'no-export-dynamic (lambda* (#:key outputs #:allow-other-keys) ;; Since we use `-static', remove @@ -129,10 +155,16 @@ (define %static-inputs (substitute* "configure" (("-export-dynamic") ""))) %standard-phases) - ,@((package-arguments gawk) system))))))) + ,@((package-arguments gawk) system)))) + (inputs `(("patch/sh" ,(search-patch "gawk-shell.patch")))))) + (finalize (lambda (p) + (static-package (package-with-explicit-inputs + p + %standard-inputs-with-relocatable-glibc) + (current-source-location))))) `(,@(map (match-lambda ((name package) - (list name (static-package package (current-source-location))))) + (list name (finalize package)))) `(("tar" ,tar) ("gzip" ,gzip) ("bzip2" ,bzip2) @@ -272,84 +304,87 @@ (define %glibc-stripped ;; GNU libc's essential shared libraries, dynamic linker, and headers, ;; with all references to store directories stripped. As a result, ;; libc.so is unusable and need to be patched for proper relocation. - (package (inherit glibc-final) - (name "glibc-stripped") - (build-system trivial-build-system) - (arguments - `(#:modules ((guix build utils)) - #:builder - (begin - (use-modules (guix build utils)) - - (setvbuf (current-output-port) _IOLBF) - (let* ((out (assoc-ref %outputs "out")) - (libdir (string-append out "/lib")) - (incdir (string-append out "/include")) - (libc (assoc-ref %build-inputs "libc")) - (linux (assoc-ref %build-inputs "linux-headers"))) - (mkdir-p libdir) - (for-each (lambda (file) - (let ((target (string-append libdir "/" - (basename file)))) - (copy-file file target) - (remove-store-references target))) - (find-files (string-append libc "/lib") - "^(crt.*|ld.*|lib(c|m|dl|rt|pthread|nsl|util).*\\.so(\\..*)?|libc_nonshared\\.a)$")) - - (copy-recursively (string-append libc "/include") incdir) - - ;; Copy some of the Linux-Libre headers that glibc headers - ;; refer to. - (mkdir (string-append incdir "/linux")) - (for-each (lambda (file) - (copy-file (string-append linux "/include/linux/" file) - (string-append incdir "/linux/" - (basename file)))) - '("limits.h" "errno.h" "socket.h" "kernel.h" - "sysctl.h" "param.h" "ioctl.h" "types.h" - "posix_types.h" "stddef.h")) - - (copy-recursively (string-append linux "/include/asm") - (string-append incdir "/asm")) - (copy-recursively (string-append linux "/include/asm-generic") - (string-append incdir "/asm-generic")) - #t)))) - (inputs `(("libc" ,glibc-final) - ("linux-headers" ,linux-libre-headers))))) + (let ((glibc %glibc-with-relocatable-system)) + (package (inherit glibc) + (name "glibc-stripped") + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils)) + #:builder + (begin + (use-modules (guix build utils)) + + (setvbuf (current-output-port) _IOLBF) + (let* ((out (assoc-ref %outputs "out")) + (libdir (string-append out "/lib")) + (incdir (string-append out "/include")) + (libc (assoc-ref %build-inputs "libc")) + (linux (assoc-ref %build-inputs "linux-headers"))) + (mkdir-p libdir) + (for-each (lambda (file) + (let ((target (string-append libdir "/" + (basename file)))) + (copy-file file target) + (remove-store-references target))) + (find-files (string-append libc "/lib") + "^(crt.*|ld.*|lib(c|m|dl|rt|pthread|nsl|util).*\\.so(\\..*)?|libc_nonshared\\.a)$")) + + (copy-recursively (string-append libc "/include") incdir) + + ;; Copy some of the Linux-Libre headers that glibc headers + ;; refer to. + (mkdir (string-append incdir "/linux")) + (for-each (lambda (file) + (copy-file (string-append linux "/include/linux/" file) + (string-append incdir "/linux/" + (basename file)))) + '("limits.h" "errno.h" "socket.h" "kernel.h" + "sysctl.h" "param.h" "ioctl.h" "types.h" + "posix_types.h" "stddef.h")) + + (copy-recursively (string-append linux "/include/asm") + (string-append incdir "/asm")) + (copy-recursively (string-append linux "/include/asm-generic") + (string-append incdir "/asm-generic")) + #t)))) + (inputs `(("libc" ,glibc) + ("linux-headers" ,linux-libre-headers)))))) (define %gcc-static ;; A statically-linked GCC, with stripped-down functionality. - (package (inherit gcc-final) - (name "gcc-static") - (arguments - (lambda (system) - `(#:modules ((guix build utils) - (guix build gnu-build-system) - (srfi srfi-1) - (srfi srfi-26) - (ice-9 regex)) - ,@(substitute-keyword-arguments ((package-arguments gcc-final) system) - ((#:guile _) #f) - ((#:implicit-inputs? _) #t) - ((#:configure-flags flags) - `(append (list - "--disable-shared" - "--disable-plugin" - "--enable-languages=c" - "--disable-libmudflap" - "--disable-libgomp" - "--disable-libssp" - "--disable-libquadmath" - "--disable-decimal-float") - (remove (cut string-match "--(.*plugin|enable-languages)" <>) - ,flags))) - ((#:make-flags flags) - `(cons "BOOT_LDFLAGS=-static" ,flags)))))) - (inputs `(("gmp-source" ,(package-source gmp)) - ("mpfr-source" ,(package-source mpfr)) - ("mpc-source" ,(package-source mpc)) - ("binutils" ,binutils-final) - ,@(package-inputs gcc-4.7))))) + (package-with-explicit-inputs + (package (inherit gcc-final) + (name "gcc-static") + (arguments + (lambda (system) + `(#:modules ((guix build utils) + (guix build gnu-build-system) + (srfi srfi-1) + (srfi srfi-26) + (ice-9 regex)) + ,@(substitute-keyword-arguments ((package-arguments gcc-final) system) + ((#:guile _) #f) + ((#:implicit-inputs? _) #t) + ((#:configure-flags flags) + `(append (list + "--disable-shared" + "--disable-plugin" + "--enable-languages=c" + "--disable-libmudflap" + "--disable-libgomp" + "--disable-libssp" + "--disable-libquadmath" + "--disable-decimal-float") + (remove (cut string-match "--(.*plugin|enable-languages)" <>) + ,flags))) + ((#:make-flags flags) + `(cons "BOOT_LDFLAGS=-static" ,flags)))))) + (inputs `(("gmp-source" ,(package-source gmp)) + ("mpfr-source" ,(package-source mpfr)) + ("mpc-source" ,(package-source mpc)) + ("binutils" ,binutils-final) + ,@(package-inputs gcc-4.7)))) + %standard-inputs-with-relocatable-glibc)) (define %gcc-stripped ;; The subset of GCC files needed for bootstrap. @@ -429,7 +464,9 @@ (define %guile-static ;; There are uses of `dynamic-link' in ;; {foreign,coverage}.test that don't fly here. #:tests? #f))))) - (static-package guile (current-source-location)))) + (package-with-explicit-inputs (static-package guile) + %standard-inputs-with-relocatable-glibc + (current-source-location)))) (define %guile-static-stripped ;; A stripped static Guile binary, for use during bootstrap. -- cgit v1.2.3 From 450fb5a6b44f05dbaa35daf2b696dfc4d502be96 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 1 Jan 2013 16:54:45 +0100 Subject: distro: Move lightweight Bash to (distro packages bash). * distro/packages/make-bootstrap.scm (%bash-static): Move BASH-LIGHT to... * distro/packages/bash.scm (bash-light): ... here. New variable. --- distro/packages/bash.scm | 21 +++++++++++++++++++++ distro/packages/make-bootstrap.scm | 21 ++------------------- 2 files changed, 23 insertions(+), 19 deletions(-) (limited to 'distro/packages/make-bootstrap.scm') diff --git a/distro/packages/bash.scm b/distro/packages/bash.scm index f32293d82f..429a683920 100644 --- a/distro/packages/bash.scm +++ b/distro/packages/bash.scm @@ -87,3 +87,24 @@ (define-public bash modification.") (license gpl3+) (home-page "http://www.gnu.org/software/bash/")))) + +(define-public bash-light + ;; A stripped-down Bash for non-interactive use. + (package (inherit bash) + (name "bash-light") + (inputs '()) ; no readline, no curses + (arguments + (let ((args `(#:modules ((guix build gnu-build-system) + (guix build utils) + (srfi srfi-1) + (srfi srfi-26)) + ,@(package-arguments bash)))) + (substitute-keyword-arguments args + ((#:configure-flags flags) + `(list "--without-bash-malloc" + "--disable-readline" + "--disable-history" + "--disable-help-builtin" + "--disable-progcomp" + "--disable-net-redirections" + "--disable-nls"))))))) diff --git a/distro/packages/make-bootstrap.scm b/distro/packages/make-bootstrap.scm index 4f182da853..28be0b8c49 100644 --- a/distro/packages/make-bootstrap.scm +++ b/distro/packages/make-bootstrap.scm @@ -1,5 +1,5 @@ ;;; Guix --- Nix package management from Guile. -*- coding: utf-8 -*- -;;; Copyright (C) 2012 Ludovic Courtès +;;; Copyright (C) 2012, 2013 Ludovic Courtès ;;; ;;; This file is part of Guix. ;;; @@ -92,24 +92,7 @@ (define %standard-inputs-with-relocatable-glibc ,@(fold alist-delete %final-inputs '("libc" "gcc")))) (define %bash-static - (let ((bash-light (package (inherit bash-final) - (inputs '()) ; no readline, no curses - (arguments - (let ((args `(#:modules ((guix build gnu-build-system) - (guix build utils) - (srfi srfi-1) - (srfi srfi-26)) - ,@(package-arguments bash)))) - (substitute-keyword-arguments args - ((#:configure-flags flags) - `(list "--without-bash-malloc" - "--disable-readline" - "--disable-history" - "--disable-help-builtin" - "--disable-progcomp" - "--disable-net-redirections" - "--disable-nls")))))))) - (static-package bash-light))) + (static-package bash-light)) (define %static-inputs ;; Packages that are to be used as %BOOTSTRAP-INPUTS. -- cgit v1.2.3 From 4d058c67929aa9d464fcb1ff0217122424078cb8 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 1 Jan 2013 16:55:34 +0100 Subject: build-system/gnu: Add `static-package'. * distro/packages/make-bootstrap.scm (static-package): Move to... * guix/build-system/gnu.scm (static-package): ... here. New procedure. --- distro/packages/make-bootstrap.scm | 25 +------------------------ guix/build-system/gnu.scm | 26 +++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 25 deletions(-) (limited to 'distro/packages/make-bootstrap.scm') diff --git a/distro/packages/make-bootstrap.scm b/distro/packages/make-bootstrap.scm index 28be0b8c49..c0e5d8be5d 100644 --- a/distro/packages/make-bootstrap.scm +++ b/distro/packages/make-bootstrap.scm @@ -20,7 +20,7 @@ (define-module (distro packages make-bootstrap) #:use-module (guix utils) #:use-module (guix packages) #:use-module (guix build-system trivial) - #:use-module ((guix build-system gnu) #:select (package-with-explicit-inputs)) + #:use-module (guix build-system gnu) #:use-module ((distro) #:select (search-patch)) #:use-module (distro packages base) #:use-module (distro packages bash) @@ -45,29 +45,6 @@ (define-module (distro packages make-bootstrap) ;;; ;;; Code: -(define* (static-package p #:optional (loc (current-source-location))) - "Return a statically-linked version of package P." - ;; TODO: Move to (guix build-system gnu). - (let ((args (package-arguments p))) - (package (inherit p) - (location (source-properties->location loc)) - (arguments - (let ((augment (lambda (args) - (let ((a (default-keyword-arguments args - '(#:configure-flags '() - #:strip-flags #f)))) - (substitute-keyword-arguments a - ((#:configure-flags flags) - `(cons* "--disable-shared" - "LDFLAGS=-static" - ,flags)) - ((#:strip-flags _) - ''("--strip-all"))))))) - (if (procedure? args) - (lambda x - (augment (apply args x))) - (augment args))))))) - (define %glibc-with-relocatable-system ;; A libc whose `system' and `popen' functions looks for `sh' in $PATH. (package (inherit glibc-final) diff --git a/guix/build-system/gnu.scm b/guix/build-system/gnu.scm index 53fc4749f0..4d7ecd54de 100644 --- a/guix/build-system/gnu.scm +++ b/guix/build-system/gnu.scm @@ -21,6 +21,7 @@ (define-module (guix build-system gnu) #:use-module (guix utils) #:use-module (guix derivations) #:use-module (guix build-system) + #:use-module (guix build-system gnu) #:use-module (guix packages) #:use-module (srfi srfi-1) #:use-module (srfi srfi-39) @@ -29,7 +30,8 @@ (define-module (guix build-system gnu) gnu-build-system package-with-explicit-inputs package-with-extra-configure-variable - static-libgcc-package)) + static-libgcc-package + static-package)) ;; Commentary: ;; @@ -117,6 +119,28 @@ (define (static-libgcc-package p) "A version of P linked with `-static-gcc'." (package-with-extra-configure-variable p "LDFLAGS" "-static-libgcc")) +(define* (static-package p #:optional (loc (current-source-location))) + "Return a statically-linked version of package P." + (let ((args (package-arguments p))) + (package (inherit p) + (location (source-properties->location loc)) + (arguments + (let ((augment (lambda (args) + (let ((a (default-keyword-arguments args + '(#:configure-flags '() + #:strip-flags #f)))) + (substitute-keyword-arguments a + ((#:configure-flags flags) + `(cons* "--disable-shared" + "LDFLAGS=-static" + ,flags)) + ((#:strip-flags _) + ''("--strip-all"))))))) + (if (procedure? args) + (lambda x + (augment (apply args x))) + (augment args))))))) + (define %store ;; Store passed to STANDARD-INPUTS. -- cgit v1.2.3 From fdc78b72f8ba87a62c61f8acb6d7dbaf2b204fe0 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Fri, 4 Jan 2013 17:42:59 +0100 Subject: distro: make-bootstrap: Fix arguments to gawk. * distro/packages/make-bootstrap.scm (%static-inputs)[gawk]: Use `substitute-keyword-arguments' to preserve the #:phases argument of GAWK. --- distro/packages/make-bootstrap.scm | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'distro/packages/make-bootstrap.scm') diff --git a/distro/packages/make-bootstrap.scm b/distro/packages/make-bootstrap.scm index c0e5d8be5d..a073ca8187 100644 --- a/distro/packages/make-bootstrap.scm +++ b/distro/packages/make-bootstrap.scm @@ -107,15 +107,17 @@ (define %static-inputs (arguments (lambda (system) `(#:patches (list (assoc-ref %build-inputs "patch/sh")) - #:phases (alist-cons-before - 'build 'no-export-dynamic - (lambda* (#:key outputs #:allow-other-keys) - ;; Since we use `-static', remove - ;; `-export-dynamic'. - (substitute* "configure" - (("-export-dynamic") ""))) - %standard-phases) - ,@((package-arguments gawk) system)))) + ,@(substitute-keyword-arguments + ((package-arguments gawk) system) + ((#:phases phases) + `(alist-cons-before + 'configure 'no-export-dynamic + (lambda _ + ;; Since we use `-static', remove + ;; `-export-dynamic'. + (substitute* "configure" + (("-export-dynamic") ""))) + ,phases)))))) (inputs `(("patch/sh" ,(search-patch "gawk-shell.patch")))))) (finalize (lambda (p) (static-package (package-with-explicit-inputs -- cgit v1.2.3 From c2d771fd1da27cc6393c16e7e0ad10336e629f28 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Fri, 4 Jan 2013 18:58:53 +0100 Subject: distro: make-bootstrap: Make the Coreutils smaller. * distro/packages/make-bootstrap.scm (%static-inputs)[coreutils]: Remove optional dependencies, except Perl; build with "-Os -g0"; disable tests. --- distro/packages/make-bootstrap.scm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'distro/packages/make-bootstrap.scm') diff --git a/distro/packages/make-bootstrap.scm b/distro/packages/make-bootstrap.scm index a073ca8187..e4569c3173 100644 --- a/distro/packages/make-bootstrap.scm +++ b/distro/packages/make-bootstrap.scm @@ -79,8 +79,13 @@ (define %static-inputs '("--disable-nls" "--disable-silent-rules" "--enable-no-install-program=stdbuf,libstdbuf.so" + "CFLAGS=-Os -g0" ; smaller, please "LDFLAGS=-static -pthread") - ,@(package-arguments coreutils))))) + #:tests? #f ; signal-related Gnulib tests fail + ,@(package-arguments coreutils))) + + ;; Remove optional dependencies such as GMP. + (inputs `(,(assoc "perl" (package-inputs coreutils)))))) (bzip2 (package (inherit bzip2) (arguments (substitute-keyword-arguments (package-arguments bzip2) -- cgit v1.2.3 From d3b59727fb5a8a040bc9d5ca6ada1239ccf90c01 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sat, 5 Jan 2013 12:41:05 +0100 Subject: distro: make-bootstrap: Build glibc without nscd, and with static NSS modules. * distro/packages/make-bootstrap.scm (%glibc-with-relocatable-system): Rename to... (%glibc-for-bootstrap): ... this. Add new configure flags. --- distro/packages/make-bootstrap.scm | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'distro/packages/make-bootstrap.scm') diff --git a/distro/packages/make-bootstrap.scm b/distro/packages/make-bootstrap.scm index e4569c3173..d54fdc444f 100644 --- a/distro/packages/make-bootstrap.scm +++ b/distro/packages/make-bootstrap.scm @@ -45,25 +45,32 @@ (define-module (distro packages make-bootstrap) ;;; ;;; Code: -(define %glibc-with-relocatable-system - ;; A libc whose `system' and `popen' functions looks for `sh' in $PATH. +(define %glibc-for-bootstrap + ;; A libc whose `system' and `popen' functions looks for `sh' in $PATH, + ;; without nscd, and with static NSS modules. (package (inherit glibc-final) (arguments (lambda (system) (substitute-keyword-arguments ((package-arguments glibc-final) system) ((#:patches patches) `(cons (assoc-ref %build-inputs "patch/system") - ,patches))))) + ,patches)) + ((#:configure-flags flags) + ;; Arrange so that getaddrinfo & co. do not contact the nscd, + ;; and can use statically-linked NSS modules. + `(cons* "--disable-nscd" "--disable-build-nscd" + "--enable-static-nss" + ,flags))))) (inputs `(("patch/system" ,(search-patch "glibc-bootstrap-system.patch")) ,@(package-inputs glibc-final))))) (define %standard-inputs-with-relocatable-glibc ;; Standard inputs with the above libc and corresponding GCC. - `(("libc", %glibc-with-relocatable-system) + `(("libc", %glibc-for-bootstrap) ("gcc" ,(package-with-explicit-inputs gcc-4.7 - `(("libc",%glibc-with-relocatable-system) + `(("libc",%glibc-for-bootstrap) ,@(alist-delete "libc" %final-inputs)) (current-source-location))) ,@(fold alist-delete %final-inputs '("libc" "gcc")))) @@ -271,7 +278,7 @@ (define %glibc-stripped ;; GNU libc's essential shared libraries, dynamic linker, and headers, ;; with all references to store directories stripped. As a result, ;; libc.so is unusable and need to be patched for proper relocation. - (let ((glibc %glibc-with-relocatable-system)) + (let ((glibc %glibc-for-bootstrap)) (package (inherit glibc) (name "glibc-stripped") (build-system trivial-build-system) -- cgit v1.2.3 From 312543dcfc2b19063f172bd10bb437d6bfe62cff Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sat, 5 Jan 2013 15:46:08 +0100 Subject: distro: make-bootstrap: Add `%bootstrap-tarballs' package. * distro/packages/make-bootstrap.scm (%bootstrap-tarballs): New variable. --- distro/packages/make-bootstrap.scm | 41 +++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'distro/packages/make-bootstrap.scm') diff --git a/distro/packages/make-bootstrap.scm b/distro/packages/make-bootstrap.scm index d54fdc444f..ea889d062b 100644 --- a/distro/packages/make-bootstrap.scm +++ b/distro/packages/make-bootstrap.scm @@ -19,6 +19,7 @@ (define-module (distro packages make-bootstrap) #:use-module (guix utils) #:use-module (guix packages) + #:use-module (guix licenses) #:use-module (guix build-system trivial) #:use-module (guix build-system gnu) #:use-module ((distro) #:select (search-patch)) @@ -35,7 +36,8 @@ (define-module (distro packages make-bootstrap) %binutils-bootstrap-tarball %glibc-bootstrap-tarball %gcc-bootstrap-tarball - %guile-bootstrap-tarball)) + %guile-bootstrap-tarball + %bootstrap-tarballs)) ;;; Commentary: ;;; @@ -520,4 +522,41 @@ (define %guile-bootstrap-tarball ;; A tarball with the statically-linked, relocatable Guile. (tarball-package %guile-static-stripped)) +(define %bootstrap-tarballs + ;; A single derivation containing all the bootstrap tarballs, for + ;; convenience. + (package + (name "bootstrap-tarballs") + (version "0") + (source #f) + (build-system trivial-build-system) + (arguments + `(#:modules ((guix build utils)) + #:builder + (let ((out (assoc-ref %outputs "out"))) + (use-modules (guix build utils) + (ice-9 match) + (srfi srfi-26)) + + (setvbuf (current-output-port) _IOLBF) + (mkdir out) + (chdir out) + (for-each (match-lambda + ((name . directory) + (for-each (lambda (file) + (format #t "~a -> ~a~%" file out) + (symlink file (basename file))) + (find-files directory "\\.tar\\.")))) + %build-inputs) + #t))) + (inputs `(("guile-tarball" ,%guile-bootstrap-tarball) + ("gcc-tarball" ,%gcc-bootstrap-tarball) + ("binutils-tarball" ,%binutils-bootstrap-tarball) + ("glibc-tarball" ,%glibc-bootstrap-tarball) + ("coreutils&co-tarball" ,%bootstrap-binaries-tarball))) + (synopsis #f) + (description #f) + (home-page #f) + (license gpl3+))) + ;;; make-bootstrap.scm ends here -- cgit v1.2.3