diff options
author | Ludovic Courtès <ludo@gnu.org> | 2013-01-18 01:06:24 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2013-01-18 01:07:31 +0100 |
commit | 1ffa7090b99dfd2f54fa883929c5e78d7852657a (patch) | |
tree | 1c8bd191e31212e172b3e9158408cccd571a5020 /distro/packages/bootstrap.scm | |
parent | 08ba7ff318720d926215de83daed0da628908ca3 (diff) | |
download | guix-1ffa7090b99dfd2f54fa883929c5e78d7852657a.tar guix-1ffa7090b99dfd2f54fa883929c5e78d7852657a.tar.gz |
distro: Change the module name space to (gnu ...).
* distro: Rename to...
* gnu: ... this. Update module names accordingly.
* Makefile.am: Adjust accordingly.
* po/POTFILES.in: Likewise.
* distro.scm: Search for files under /gnu/packages instead of
/distro/packages.
* gnu/packages/base.scm (ld-wrapper-boot3): Likewise.
Diffstat (limited to 'distro/packages/bootstrap.scm')
-rw-r--r-- | distro/packages/bootstrap.scm | 378 |
1 files changed, 0 insertions, 378 deletions
diff --git a/distro/packages/bootstrap.scm b/distro/packages/bootstrap.scm deleted file mode 100644 index 27183162b5..0000000000 --- a/distro/packages/bootstrap.scm +++ /dev/null @@ -1,378 +0,0 @@ -;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2012, 2013 Ludovic Courtès <ludo@gnu.org> -;;; -;;; This file is part of GNU Guix. -;;; -;;; GNU Guix is free software; you can redistribute it and/or modify it -;;; under the terms of the GNU General Public License as published by -;;; the Free Software Foundation; either version 3 of the License, or (at -;;; your option) any later version. -;;; -;;; GNU Guix is distributed in the hope that it will be useful, but -;;; WITHOUT ANY WARRANTY; without even the implied warranty of -;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;;; GNU General Public License for more details. -;;; -;;; You should have received a copy of the GNU General Public License -;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. - -(define-module (distro packages bootstrap) - #:use-module (guix licenses) - #:use-module (distro) - #:use-module (guix packages) - #:use-module (guix download) - #:use-module (guix build-system) - #:use-module (guix build-system gnu) - #:use-module (guix build-system trivial) - #:use-module ((guix store) #:select (add-to-store add-text-to-store)) - #:use-module ((guix derivations) #:select (derivation)) - #:use-module (guix utils) - #:use-module (srfi srfi-1) - #:use-module (srfi srfi-26) - #:use-module (ice-9 match) - #:export (bootstrap-origin - package-with-bootstrap-guile - glibc-dynamic-linker - - %bootstrap-guile - %bootstrap-coreutils&co - %bootstrap-binutils - %bootstrap-gcc - %bootstrap-glibc - %bootstrap-inputs)) - -;;; Commentary: -;;; -;;; Pre-built packages that are used to bootstrap the -;;; distribution--i.e., to build all the core packages from scratch. -;;; -;;; Code: - - - -;;; -;;; Helper procedures. -;;; - -(define (bootstrap-origin source) - "Return a variant of SOURCE, an <origin> instance, whose method uses -%BOOTSTRAP-GUILE to do its job." - (define (boot fetch) - (lambda* (store url hash-algo hash - #:optional name #:key system) - (fetch store url hash-algo hash - #:guile %bootstrap-guile - #:system system))) - - (let ((orig-method (origin-method source))) - (origin (inherit source) - (method (cond ((eq? orig-method url-fetch) - (boot url-fetch)) - (else orig-method)))))) - -(define (package-from-tarball name* source* program-to-test description*) - "Return a package that correspond to the extraction of SOURCE*. -PROGRAM-TO-TEST is a program to run after extraction of SOURCE*, to -check whether everything is alright." - (package - (name name*) - (version "0") - (source #f) - (build-system trivial-build-system) - (arguments - `(#:guile ,%bootstrap-guile - #:modules ((guix build utils)) - #:builder - (let ((out (assoc-ref %outputs "out")) - (tar (assoc-ref %build-inputs "tar")) - (xz (assoc-ref %build-inputs "xz")) - (tarball (assoc-ref %build-inputs "tarball"))) - (use-modules (guix build utils)) - - (mkdir out) - (copy-file tarball "binaries.tar.xz") - (system* xz "-d" "binaries.tar.xz") - (let ((builddir (getcwd))) - (with-directory-excursion out - (and (zero? (system* tar "xvf" - (string-append builddir "/binaries.tar"))) - (zero? (system* (string-append "bin/" ,program-to-test) - "--version")))))))) - (inputs - `(("tar" ,(lambda (system) - (search-bootstrap-binary "tar" system))) - ("xz" ,(lambda (system) - (search-bootstrap-binary "xz" system))) - ("tarball" ,(lambda (system) - (bootstrap-origin (source* system)))))) - (synopsis description*) - (description #f) - (home-page #f))) - -(define package-with-bootstrap-guile - (memoize - (lambda (p) - "Return a variant of P such that all its origins are fetched with -%BOOTSTRAP-GUILE." - (define rewritten-input - (match-lambda - ((name (? origin? o)) - `(,name ,(bootstrap-origin o))) - ((name (? package? p) sub-drvs ...) - `(,name ,(package-with-bootstrap-guile p) ,@sub-drvs)) - (x x))) - - (package (inherit p) - (source (match (package-source p) - ((? origin? o) (bootstrap-origin o)) - (s s))) - (inputs (map rewritten-input - (package-inputs p))) - (native-inputs (map rewritten-input - (package-native-inputs p))) - (propagated-inputs (map rewritten-input - (package-propagated-inputs p))))))) - -(define (glibc-dynamic-linker system) - "Return the name of Glibc's dynamic linker for SYSTEM." - (cond ((string=? system "x86_64-linux") "/lib/ld-linux-x86-64.so.2") - ((string=? system "i686-linux") "/lib/ld-linux.so.2") - (else (error "dynamic linker name not known for this system" - system)))) - - -;;; -;;; Bootstrap packages. -;;; - -(define %bootstrap-guile - ;; The Guile used to run the build scripts of the initial derivations. - ;; It is just unpacked from a tarball containing a pre-built binary. - ;; This is typically built using %GUILE-BOOTSTRAP-TARBALL below. - ;; - ;; XXX: Would need libc's `libnss_files2.so' for proper `getaddrinfo' - ;; support (for /etc/services). - (let ((raw (build-system - (name "raw") - (description "Raw build system with direct store access") - (build (lambda* (store name source inputs #:key outputs system) - (define (->store file) - (add-to-store store file #t #t "sha256" - (or (search-bootstrap-binary file - system) - (error "bootstrap binary not found" - file system)))) - - (let* ((tar (->store "tar")) - (xz (->store "xz")) - (mkdir (->store "mkdir")) - (bash (->store "bash")) - (guile (->store "guile-2.0.7.tar.xz")) - (builder - (add-text-to-store store - "build-bootstrap-guile.sh" - (format #f " -echo \"unpacking bootstrap Guile to '$out'...\" -~a $out -cd $out -~a -dc < ~a | ~a xv - -# Sanity check. -$out/bin/guile --version~%" - mkdir xz guile tar) - (list mkdir xz guile tar)))) - (derivation store name system - bash `(,builder) '() - `((,bash) (,builder))))))))) - (package - (name "guile-bootstrap") - (version "2.0") - (source #f) - (build-system raw) - (synopsis "Bootstrap Guile") - (description "Pre-built Guile for bootstrapping purposes.") - (home-page #f) - (license lgpl3+)))) - -(define %bootstrap-base-urls - ;; This is where the initial binaries come from. - '("http://alpha.gnu.org/gnu/guix/bootstrap" - "http://www.fdn.fr/~lcourtes/software/guix/packages")) - -(define %bootstrap-coreutils&co - (package-from-tarball "bootstrap-binaries" - (lambda (system) - (origin - (method url-fetch) - (uri (map (cut string-append <> "/" system - "/20130105/static-binaries.tar.xz") - %bootstrap-base-urls)) - (sha256 - (match system - ("x86_64-linux" - (base32 - "0md23alzy6nc5f16pric7mkagczdzr8xbh074sb3rjzrls06j1ls")) - ("i686-linux" - (base32 - "0nzj1lmm9b94g7k737cr4w1dv282w5nmhb53238ikax9r6pkc0yb")))))) - "true" ; the program to test - "Bootstrap binaries of Coreutils, Awk, etc.")) - -(define %bootstrap-binutils - (package-from-tarball "binutils-bootstrap" - (lambda (system) - (origin - (method url-fetch) - (uri (map (cut string-append <> "/" system - "/20130105/binutils-2.22.tar.xz") - %bootstrap-base-urls)) - (sha256 - (match system - ("x86_64-linux" - (base32 - "1ffmk2yy2pxvkqgzrkzp3s4jpn4qaaksyk3b5nsc5cjwfm7qkgzh")) - ("i686-linux" - (base32 - "1rafk6aq4sayvv3r3d2khn93nkyzf002xzh0xadlyci4mznr6b0a")))))) - "ld" ; the program to test - "Bootstrap binaries of the GNU Binutils")) - -(define %bootstrap-glibc - ;; The initial libc. - (package - (name "glibc-bootstrap") - (version "0") - (source #f) - (build-system trivial-build-system) - (arguments - `(#:guile ,%bootstrap-guile - #:modules ((guix build utils)) - #:builder - (let ((out (assoc-ref %outputs "out")) - (tar (assoc-ref %build-inputs "tar")) - (xz (assoc-ref %build-inputs "xz")) - (tarball (assoc-ref %build-inputs "tarball"))) - (use-modules (guix build utils)) - - (mkdir out) - (copy-file tarball "binaries.tar.xz") - (system* xz "-d" "binaries.tar.xz") - (let ((builddir (getcwd))) - (with-directory-excursion out - (system* tar "xvf" - (string-append builddir - "/binaries.tar")) - (chmod "lib" #o755) - - ;; Patch libc.so so it refers to the right path. - (substitute* "lib/libc.so" - (("/[^ ]+/lib/(libc|ld)" _ prefix) - (string-append out "/lib/" prefix)))))))) - (inputs - `(("tar" ,(lambda (system) - (search-bootstrap-binary "tar" system))) - ("xz" ,(lambda (system) - (search-bootstrap-binary "xz" system))) - ("tarball" ,(lambda (system) - (bootstrap-origin - (origin - (method url-fetch) - (uri (map (cut string-append <> "/" system - "/20130105/glibc-2.17.tar.xz") - %bootstrap-base-urls)) - (sha256 - (match system - ("x86_64-linux" - (base32 - "18kv1z9d8dr1j3hm9w7663kchqw9p6rsx11n1m143jgba2jz6jy3")) - ("i686-linux" - (base32 - "08hv8i0axwnihrcgbz19x0a7s6zyv3yx38x8r29liwl8h82x9g88")))))))))) - (synopsis "Bootstrap binaries and headers of the GNU C Library") - (description #f) - (home-page #f))) - -(define %bootstrap-gcc - ;; The initial GCC. Uses binaries from a tarball typically built by - ;; %GCC-BOOTSTRAP-TARBALL. - (package - (name "gcc-bootstrap") - (version "0") - (source #f) - (build-system trivial-build-system) - (arguments - (lambda (system) - `(#:guile ,%bootstrap-guile - #:modules ((guix build utils)) - #:builder - (let ((out (assoc-ref %outputs "out")) - (tar (assoc-ref %build-inputs "tar")) - (xz (assoc-ref %build-inputs "xz")) - (bash (assoc-ref %build-inputs "bash")) - (libc (assoc-ref %build-inputs "libc")) - (tarball (assoc-ref %build-inputs "tarball"))) - (use-modules (guix build utils) - (ice-9 popen)) - - (mkdir out) - (copy-file tarball "binaries.tar.xz") - (system* xz "-d" "binaries.tar.xz") - (let ((builddir (getcwd)) - (bindir (string-append out "/bin"))) - (with-directory-excursion out - (system* tar "xvf" - (string-append builddir "/binaries.tar"))) - - (with-directory-excursion bindir - (chmod "." #o755) - (rename-file "gcc" ".gcc-wrapped") - (call-with-output-file "gcc" - (lambda (p) - (format p "#!~a -exec ~a/bin/.gcc-wrapped -B~a/lib \ - -Wl,-rpath -Wl,~a/lib \ - -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%" - bash - out libc libc libc - ,(glibc-dynamic-linker system)))) - - (chmod "gcc" #o555))))))) - (inputs - `(("tar" ,(lambda (system) - (search-bootstrap-binary "tar" system))) - ("xz" ,(lambda (system) - (search-bootstrap-binary "xz" system))) - ("bash" ,(lambda (system) - (search-bootstrap-binary "bash" system))) - ("libc" ,%bootstrap-glibc) - ("tarball" ,(lambda (system) - (bootstrap-origin - (origin - (method url-fetch) - (uri (map (cut string-append <> "/" system - "/20130105/gcc-4.7.2.tar.xz") - %bootstrap-base-urls)) - (sha256 - (match system - ("x86_64-linux" - (base32 - "1x1p7han5crnbw906iwdifykr6grzm0w27dy9gz75j0q1b32i4px")) - ("i686-linux" - (base32 - "06wqs0xxnpw3hn0xjb4c9cs0899p1xwkcysa2rvzhvpra0c5vsg2")))))))))) - (synopsis "Bootstrap binaries of the GNU Compiler Collection") - (description #f) - (home-page #f))) - -(define %bootstrap-inputs - ;; The initial, pre-built inputs. From now on, we can start building our - ;; own packages. - `(("libc" ,%bootstrap-glibc) - ("gcc" ,%bootstrap-gcc) - ("binutils" ,%bootstrap-binutils) - ("coreutils&co" ,%bootstrap-coreutils&co) - - ;; In gnu-build-system.scm, we rely on the availability of Bash. - ("bash" ,%bootstrap-coreutils&co))) - -;;; bootstrap.scm ends here |