gnu: guile-bootstrap: Use a fixed-output derivation to download.
* gnu/packages/bootstrap.scm (bootstrap-guile-url-path) (bootstrap-guile-hash, download-bootstrap-guile): New procedures. (raw-build): Use it. Script uses $GUILE_TARBALL. Add GUILE to the inputs of the derivation.
This commit is contained in:
parent
2e86c26478
commit
5c93d23324
1 changed files with 52 additions and 20 deletions
|
@ -26,8 +26,10 @@ (define-module (gnu packages bootstrap)
|
|||
#: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 store)
|
||||
#:select (run-with-store add-to-store add-text-to-store))
|
||||
#:use-module ((guix derivations)
|
||||
#:select (derivation derivation->output-path))
|
||||
#:use-module ((guix utils) #:select (gnu-triplet->nix-system))
|
||||
#:use-module ((guix build utils) #:select (elf-file?))
|
||||
#:use-module (guix memoization)
|
||||
|
@ -191,6 +193,47 @@ (define* (glibc-dynamic-linker
|
|||
;;; Bootstrap packages.
|
||||
;;;
|
||||
|
||||
(define %bootstrap-base-urls
|
||||
;; This is where the initial binaries come from.
|
||||
'("ftp://alpha.gnu.org/gnu/guix/bootstrap"
|
||||
"http://alpha.gnu.org/gnu/guix/bootstrap"
|
||||
"http://www.fdn.fr/~lcourtes/software/guix/packages"
|
||||
"http://flashner.co.il/guix/bootstrap"))
|
||||
|
||||
(define (bootstrap-guile-url-path system)
|
||||
"Return the URI for FILE."
|
||||
(string-append "/" system
|
||||
(match system
|
||||
("aarch64-linux"
|
||||
"/20170217/guile-2.0.14.tar.xz")
|
||||
("armhf-linux"
|
||||
"/20150101/guile-2.0.11.tar.xz")
|
||||
(_
|
||||
"/20131110/guile-2.0.9.tar.xz"))))
|
||||
|
||||
(define (bootstrap-guile-hash system)
|
||||
"Return the SHA256 hash of the Guile bootstrap tarball for SYSTEM."
|
||||
(match system
|
||||
("x86_64-linux"
|
||||
(base32 "1w2p5zyrglzzniqgvyn1b55vprfzhgk8vzbzkkbdgl5248si0yq3"))
|
||||
("i686-linux"
|
||||
(base32 "0im800m30abgh7msh331pcbjvb4n02smz5cfzf1srv0kpx3csmxp"))
|
||||
("mips64el-linux"
|
||||
(base32 "0fzp93lvi0hn54acc0fpvhc7bvl0yc853k62l958cihk03q80ilr"))
|
||||
("armhf-linux"
|
||||
(base32 "1mi3brl7l58aww34rawhvja84xc7l1b4hmwdmc36fp9q9mfx0lg5"))
|
||||
("aarch64-linux"
|
||||
(base32 "1giy2aprjmn5fp9c4s9r125fljw4wv6ixy5739i5bffw4jgr0f9r"))))
|
||||
|
||||
(define (download-bootstrap-guile store system)
|
||||
"Return a derivation that downloads the bootstrap Guile tarball for SYSTEM."
|
||||
(let* ((path (bootstrap-guile-url-path system))
|
||||
(base (basename path))
|
||||
(urls (map (cut string-append <> path) %bootstrap-base-urls)))
|
||||
(run-with-store store
|
||||
(url-fetch urls 'sha256 (bootstrap-guile-hash system)
|
||||
#:system system))))
|
||||
|
||||
(define* (raw-build store name inputs
|
||||
#:key outputs system search-paths
|
||||
#:allow-other-keys)
|
||||
|
@ -205,13 +248,7 @@ (define (->store file)
|
|||
(xz (->store "xz"))
|
||||
(mkdir (->store "mkdir"))
|
||||
(bash (->store "bash"))
|
||||
(guile (->store (match system
|
||||
("armhf-linux"
|
||||
"guile-2.0.11.tar.xz")
|
||||
("aarch64-linux"
|
||||
"guile-2.0.14.tar.xz")
|
||||
(_
|
||||
"guile-2.0.9.tar.xz"))))
|
||||
(guile (download-bootstrap-guile store system))
|
||||
;; The following code, run by the bootstrap guile after it is
|
||||
;; unpacked, creates a wrapper for itself to set its load path.
|
||||
;; This replaces the previous non-portable method based on
|
||||
|
@ -246,7 +283,7 @@ (define (->store file)
|
|||
echo \"unpacking bootstrap Guile to '$out'...\"
|
||||
~a $out
|
||||
cd $out
|
||||
~a -dc < ~a | ~a xv
|
||||
~a -dc < $GUILE_TARBALL | ~a xv
|
||||
|
||||
# Use the bootstrap guile to create its own wrapper to set the load path.
|
||||
GUILE_SYSTEM_PATH=$out/share/guile/2.0 \
|
||||
|
@ -255,14 +292,16 @@ (define (->store file)
|
|||
|
||||
# Sanity check.
|
||||
$out/bin/guile --version~%"
|
||||
mkdir xz guile tar
|
||||
mkdir xz tar
|
||||
(format #f "~s" make-guile-wrapper)
|
||||
bash)
|
||||
(list mkdir xz guile tar bash))))
|
||||
(list mkdir xz tar bash))))
|
||||
(derivation store name
|
||||
bash `(,builder)
|
||||
#:system system
|
||||
#:inputs `((,bash) (,builder)))))
|
||||
#:inputs `((,bash) (,builder) (,guile))
|
||||
#:env-vars `(("GUILE_TARBALL"
|
||||
. ,(derivation->output-path guile))))))
|
||||
|
||||
(define* (make-raw-bag name
|
||||
#:key source inputs native-inputs outputs
|
||||
|
@ -294,13 +333,6 @@ (define %bootstrap-guile
|
|||
(home-page #f)
|
||||
(license lgpl3+))))
|
||||
|
||||
(define %bootstrap-base-urls
|
||||
;; This is where the initial binaries come from.
|
||||
'("ftp://alpha.gnu.org/gnu/guix/bootstrap"
|
||||
"http://alpha.gnu.org/gnu/guix/bootstrap"
|
||||
"http://www.fdn.fr/~lcourtes/software/guix/packages"
|
||||
"http://flashner.co.il/guix/bootstrap"))
|
||||
|
||||
(define %bootstrap-coreutils&co
|
||||
(package-from-tarball "bootstrap-binaries"
|
||||
(lambda (system)
|
||||
|
|
Loading…
Reference in a new issue