all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
@ 2018-03-13 19:06 Nikolai Merinov
  2018-03-17 21:22 ` Ludovic Courtès
                   ` (2 more replies)
  0 siblings, 3 replies; 19+ messages in thread
From: Nikolai Merinov @ 2018-03-13 19:06 UTC (permalink / raw)
  To: 30831

* gnu/packages/rust.scm (%rust-bootstrap-binaries-version): Update version.
(%rust-bootstrap-binaries): Update hashsums.
(cargo-bootstrap): Update minor version.
(rust): Rename "rustc" to "rust". Update sha256 for tarball. Add cargo related
dependencies. Install "cargo" as separate "rust" output. Remove substitutes
for bugs that was fixed in "rustc" source code. Install documentation to
separate "doc" output. Update configuration according to changes in "rustc"
source code.
* guix/build-system/cargo.scm (default-rust): Replace "default-cargo" and
"default-rustc" functions with "default-rust" function.
(cargo-build-system): Take only one package as "rust" source. Use "rustc" from
default output of "rust" package, use "cargo" as "cargo" output of "rust"
package.

Cargo was moved from separate package to "rust" output because starting from
0.25.0 release cargo have no "Cargo.lock" anymore. According to
https://github.com/rust-lang/cargo/commit/5c9665f41c6b4d3b99d3b9f8b48a286f5f154692
commit message "cargo" used as "rust" dependency and stable version for
"cargo" provided through "Cargo.lock" file from "rust-lang/rust"
repository. As result only way to get stable version of "cargo" is build it from
"rust" sources.
---
 gnu/packages/rust.scm       | 1146 ++-----------------------------------------
 guix/build-system/cargo.scm |   21 +-
 2 files changed, 37 insertions(+), 1130 deletions(-)

diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 1ba857d36..3fa889582 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -53,7 +53,7 @@
   #:use-module (srfi srfi-26))
 
 ;; Should be one less than the current released version.
-(define %rust-bootstrap-binaries-version "1.21.0")
+(define %rust-bootstrap-binaries-version "1.23.0")
 
 (define %rust-bootstrap-binaries
   (origin
@@ -66,15 +66,15 @@
      (base32
       (match %host-type
         ("i686-unknown-linux-gnu"
-         "1vnvqwz30hvyjcfr1f602lg43v2vlqjr3yhb5vr8xnrcc07yvjmp")
+         "0gs283lw6larhjlr02zm9g78djq2f6bdhxj6ls66q0z18zpx0nyw")
         ("x86_64-unknown-linux-gnu"
-         "1s0866qcy0645bqhsbs3pvk2hi52ps8jzs7x096w0as033h707ml")
+         "0znw3xxh837i5wlwsbbw6bxdqfa58bxyw3716wbckwyph8xb4d4s")
         ("armv7-unknown-linux-gnueabihf"
-         "1ml8fjq2b6j2vn1j314w93pf4wjl97n1mbz609h3i7md0zqscvs1")
+         "13mh4qx996rb6c3xygflc10j5zkmcxzjr32340ardwb7ja4jfw2q")
         ("aarch64-unknown-linux-gnu"
-         "1hv4m2m7xjcph39r6baryfg23hjcr4sbsrfnd1lh0wn67k2fc7j9")
+         "1irbj73ifdm7xvshma7qp61sadm683dnc57jfg5qc8kdjyyrydrq")
         ("mips64el-unknown-linux-gnuabi64"
-         "0p7fzkfcqg5yvj86v434z351dp7s7pgns8nzxj0fz3hmbfbvlvn9")
+         "1wksf07ba9idrj1z6x0hdfjsmhpzzi5idawnkfbhy6cj1g9ihnzv")
         (_ "")))))) ; Catch-all for other systems.
 
 (define %cargo-reference-project-file "/dev/null")
@@ -148,7 +148,7 @@ which can in turn be used to build the final Rust compiler.")
 (define cargo-bootstrap
   (package
     (name "cargo-bootstrap")
-    (version (cargo-version %rust-bootstrap-binaries-version 1))
+    (version (cargo-version %rust-bootstrap-binaries-version 0))
     (source %rust-bootstrap-binaries)
     (build-system gnu-build-system)
     (native-inputs
@@ -213,9 +213,9 @@ manager, which is required to build itself.")
 rustc-bootstrap and cargo-bootstrap packages.")
     (license license:asl2.0)))
 \f
-(define-public rustc
+(define-public rust
   (package
-    (name "rustc")
+    (name "rust")
     (version (rustc-version %rust-bootstrap-binaries-version 1))
     (source (origin
               (method url-fetch)
@@ -224,7 +224,7 @@ rustc-bootstrap and cargo-bootstrap packages.")
                     "rustc-" version "-src.tar.gz"))
               (sha256
                (base32
-                "1lrzzp0nh7s61wgfs2h6ilaqi6iq89f1pd1yaf65l87bssyl4ylb"))
+                "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y"))
               (modules '((guix build utils)))
               (snippet
                `(begin
@@ -240,10 +240,14 @@ rustc-bootstrap and cargo-bootstrap packages.")
        ("procps" ,procps) ; For the tests
        ("python-2" ,python-2)
        ("rust-bootstrap" ,rust-bootstrap)
+       ("pkg-config" ,pkg-config) ; For "cargo"
        ("which" ,which)))
     (inputs
      `(("jemalloc" ,jemalloc-4.5.0)
-       ("llvm" ,llvm-3.9.1)))
+       ("llvm" ,llvm-3.9.1)
+       ("openssl" ,openssl)
+       ("libcurl" ,curl))) ; For "cargo"
+    (outputs '("out" "doc" "cargo"))
     (arguments
      `(#:imported-modules ,%cargo-build-system-modules ;for `generate-checksums'
        #:phases
@@ -258,9 +262,6 @@ rustc-bootstrap and cargo-bootstrap packages.")
          (add-after 'unpack 'patch-tests
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((bash (assoc-ref inputs "bash")))
-               (substitute* "src/build_helper/lib.rs"
-                 ;; In same folder as gcc there is only "gcc-ar" utility
-                 (("file\\.push_str\\(\"ar\"\\);") "file.push_str(\"gcc-ar\");"))
                (substitute* "src/libstd/process.rs"
                  ;; The newline is intentional.
                  ;; There's a line length "tidy" check in Rust which would
@@ -276,12 +277,6 @@ rustc-bootstrap and cargo-bootstrap packages.")
                ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.
                ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>
                (delete-file-recursively "src/test/run-make/linker-output-non-utf8")
-               (substitute* "src/build_helper/lib.rs"
-                 ;; Bug in Rust code.
-                 ;; Current implementation assume that if dst not exist then it's mtime
-                 ;; is 0, but in same time "src" have 0 mtime in guix build!
-                 (("let threshold = mtime\\(dst\\);")
-                  "if !dst.exists() {\nreturn false\n}\n let threshold = mtime(dst);"))
                #t)))
          (add-after 'patch-source-shebangs 'patch-cargo-checksums
            (lambda* (#:key inputs #:allow-other-keys)
@@ -302,6 +297,7 @@ rustc-bootstrap and cargo-bootstrap packages.")
          (replace 'configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc"))
                     (gcc (assoc-ref inputs "gcc"))
                     (gdb (assoc-ref inputs "gdb"))
                     (binutils (assoc-ref inputs "binutils"))
@@ -317,15 +313,18 @@ rustc-bootstrap and cargo-bootstrap packages.")
 [build]
 cargo = \"" cargo "/bin/cargo" "\"
 rustc = \"" rustc "/bin/rustc" "\"
+docs = true
 python = \"" python "/bin/python2" "\"
 gdb = \"" gdb "/bin/gdb" "\"
 vendor = true
 submodules = false
 [install]
 prefix = \"" out "\"
+docdir = \"" doc "/share/doc/rust" "\"
+sysconfdir = \"etc\"
+localstatedir = \"var/lib\"
 [rust]
 default-linker = \"" gcc "/bin/gcc" "\"
-default-ar = \"" binutils "/bin/ar" "\"
 channel = \"stable\"
 rpath = true
 # There is 2 failed codegen tests:
@@ -336,6 +335,7 @@ codegen-tests = false
 llvm-config = \"" llvm "/bin/llvm-config" "\"
 cc = \"" gcc "/bin/gcc" "\"
 cxx = \"" gcc "/bin/g++" "\"
+ar = \"" binutils "/bin/ar" "\"
 jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 [dist]
 ") port)))
@@ -350,13 +350,20 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
              #t))
          (replace 'build
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (zero? (system* "./x.py" "build"))))
+             (and (zero? (system* "./x.py" "build"))
+                  (zero? (system* "./x.py" "build" "src/tools/cargo")))))
          (replace 'check
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (zero? (system* "./x.py" "test"))))
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (zero? (system* "./x.py" "install"))))
+             (and (zero? (system* "./x.py" "install"))
+                  (begin
+                   (substitute* "config.toml"
+                     ;; replace prefix to specific output
+                     (("prefix = \"[^\"]*\"")
+                      (string-append "prefix = \"" (assoc-ref outputs "cargo") "\"")))
+                   (zero? (system* "./x.py" "install" "cargo"))))))
          (add-after 'install 'wrap-rustc
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
@@ -375,1096 +382,3 @@ safety and thread safety guarantees.")
     (home-page "https://www.rust-lang.org")
     ;; Dual licensed.
     (license (list license:asl2.0 license:expat))))
-
-;; This tries very hard not to get into a cyclic dependency like this:
-;;   cargo <- cargo-build-system <- cargo.
-(define-public cargo
-  (package
-    (name "cargo")
-    (version (cargo-version (rustc-version %rust-bootstrap-binaries-version) 0))
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/rust-lang/cargo/archive/"
-                                  version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0kr7rml7v2bm7zl8jcb3056h63zpyy9m08s212i8vfwxf6lf5fzl"))))
-    (build-system cargo-build-system)
-    (propagated-inputs
-     `(("cmake" ,cmake)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("curl" ,curl)
-       ("libgit2" ,libgit2)
-       ("libssh2" ,libssh2)
-       ("openssl" ,openssl)
-       ("python-2" ,python-2)
-       ("zlib" ,zlib)))
-    (native-inputs
-     `(("git" ,git) ; required for tests
-       ;; Next dependencies generated with next command:
-       ;; cat Cargo.lock | awk '
-       ;;   /^"checksum/
-       ;;   { oname=name=$2; vers=$3; hash=$6;
-       ;;     if (ns[name] != 1) { ns[name]=1; } else { name = name "-" vers; }
-       ;;     print "       (\"rust-" name "\"";
-       ;;     print "        ,(origin";
-       ;;     print "           (method url-fetch)";
-       ;;     print "           (uri (crate-uri \"" oname "\" \"" vers "\"))";
-       ;;     print "           (file-name \"rust-" oname "\-\" vers "\")
-       ;;     print "           (sha256";
-       ;;     print "            (base16-string->bytevector";
-       ;;     print "             " hash "))))"
-       ;;   }'
-       ("rust-advapi32-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "advapi32-sys" "0.2.0"))
-           (file-name "rust-advapi32-sys-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "e06588080cb19d0acb6739808aafa5f26bfb2ca015b2b6370028b44cf7cb8a9a"))))
-       ("rust-aho-corasick"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "aho-corasick" "0.5.3"))
-           (file-name "rust-aho-corasick-0.5.3")
-           (sha256
-            (base16-string->bytevector
-             "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"))))
-       ("rust-aho-corasick-0.6.3"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "aho-corasick" "0.6.3"))
-           (file-name "rust-aho-corasick-0.6.3")
-           (sha256
-            (base16-string->bytevector
-             "500909c4f87a9e52355b26626d890833e9e1d53ac566db76c36faa984b889699"))))
-       ("rust-atty"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "atty" "0.2.3"))
-           (file-name "rust-atty-0.2.3")
-           (sha256
-            (base16-string->bytevector
-             "21e50800ec991574876040fff8ee46b136a53e985286fbe6a3bdfe6421b78860"))))
-       ("rust-backtrace"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "backtrace" "0.3.3"))
-           (file-name "rust-backtrace-0.3.3")
-           (sha256
-            (base16-string->bytevector
-             "99f2ce94e22b8e664d95c57fff45b98a966c2252b60691d0b7aeeccd88d70983"))))
-       ("rust-backtrace-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "backtrace-sys" "0.1.14"))
-           (file-name "rust-backtrace-sys-0.1.14")
-           (sha256
-            (base16-string->bytevector
-             "c63ea141ef8fdb10409d0f5daf30ac51f84ef43bff66f16627773d2a292cd189"))))
-       ("rust-bitflags"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "bitflags" "0.7.0"))
-           (file-name "rust-bitflags-0.7.0")
-           (sha256
-            (base16-string->bytevector
-             "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d"))))
-       ("rust-bitflags-0.9.1"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "bitflags" "0.9.1"))
-           (file-name "rust-bitflags-0.9.1")
-           (sha256
-            (base16-string->bytevector
-             "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5"))))
-       ("rust-bufstream"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "bufstream" "0.1.3"))
-           (file-name "rust-bufstream-0.1.3")
-           (sha256
-            (base16-string->bytevector
-             "f2f382711e76b9de6c744cc00d0497baba02fb00a787f088c879f01d09468e32"))))
-       ("rust-cc"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "cc" "1.0.0"))
-           (file-name "rust-cc-1.0.0")
-           (sha256
-            (base16-string->bytevector
-             "7db2f146208d7e0fbee761b09cd65a7f51ccc38705d4e7262dad4d73b12a76b1"))))
-       ("rust-cfg-if"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "cfg-if" "0.1.2"))
-           (file-name "rust-cfg-if-0.1.2")
-           (sha256
-            (base16-string->bytevector
-             "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"))))
-       ("rust-cmake"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "cmake" "0.1.26"))
-           (file-name "rust-cmake-0.1.26")
-           (sha256
-            (base16-string->bytevector
-             "357c07e7a1fc95732793c1edb5901e1a1f305cfcf63a90eb12dbd22bdb6b789d"))))
-       ("rust-commoncrypto"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "commoncrypto" "0.2.0"))
-           (file-name "rust-commoncrypto-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "d056a8586ba25a1e4d61cb090900e495952c7886786fc55f909ab2f819b69007"))))
-       ("rust-commoncrypto-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "commoncrypto-sys" "0.2.0"))
-           (file-name "rust-commoncrypto-sys-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "1fed34f46747aa73dfaa578069fd8279d2818ade2b55f38f22a9401c7f4083e2"))))
-       ("rust-conv"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "conv" "0.3.3"))
-           (file-name "rust-conv-0.3.3")
-           (sha256
-            (base16-string->bytevector
-             "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299"))))
-       ("rust-core-foundation"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "core-foundation" "0.4.4"))
-           (file-name "rust-core-foundation-0.4.4")
-           (sha256
-            (base16-string->bytevector
-             "5909502e547762013619f4c4e01cc7393c20fe2d52d7fa471c1210adb2320dc7"))))
-       ("rust-core-foundation-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "core-foundation-sys" "0.4.4"))
-           (file-name "rust-core-foundation-sys-0.4.4")
-           (sha256
-            (base16-string->bytevector
-             "bc9fb3d6cb663e6fd7cf1c63f9b144ee2b1e4a78595a0451dd34bff85b9a3387"))))
-       ("rust-crossbeam"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "crossbeam" "0.2.10"))
-           (file-name "rust-crossbeam-0.2.10")
-           (sha256
-            (base16-string->bytevector
-             "0c5ea215664ca264da8a9d9c3be80d2eaf30923c259d03e870388eb927508f97"))))
-       ("rust-crossbeam-0.3.0"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "crossbeam" "0.3.0"))
-           (file-name "rust-crossbeam-0.3.0")
-           (sha256
-            (base16-string->bytevector
-             "8837ab96533202c5b610ed44bc7f4183e7957c1c8f56e8cc78bb098593c8ba0a"))))
-       ("rust-crypto-hash"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "crypto-hash" "0.3.0"))
-           (file-name "rust-crypto-hash-0.3.0")
-           (sha256
-            (base16-string->bytevector
-             "34903878eec1694faf53cae8473a088df333181de421d4d3d48061d6559fe602"))))
-       ("rust-curl"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "curl" "0.4.8"))
-           (file-name "rust-curl-0.4.8")
-           (sha256
-            (base16-string->bytevector
-             "7034c534a1d7d22f7971d6088aa9d281d219ef724026c3428092500f41ae9c2c"))))
-       ("rust-curl-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "curl-sys" "0.3.15"))
-           (file-name "rust-curl-sys-0.3.15")
-           (sha256
-            (base16-string->bytevector
-             "4bee31aa3a079d5f3ff9579ea4dcfb1b1a17a40886f5f467436d383e78134b55"))))
-       ("rust-custom_derive"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "custom_derive" "0.1.7"))
-           (file-name "rust-custom_derive-0.1.7")
-           (sha256
-            (base16-string->bytevector
-             "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9"))))
-       ("rust-dbghelp-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "dbghelp-sys" "0.2.0"))
-           (file-name "rust-dbghelp-sys-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "97590ba53bcb8ac28279161ca943a924d1fd4a8fb3fa63302591647c4fc5b850"))))
-       ("rust-docopt"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "docopt" "0.8.1"))
-           (file-name "rust-docopt-0.8.1")
-           (sha256
-            (base16-string->bytevector
-             "3b5b93718f8b3e5544fcc914c43de828ca6c6ace23e0332c6080a2977b49787a"))))
-       ("rust-dtoa"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "dtoa" "0.4.2"))
-           (file-name "rust-dtoa-0.4.2")
-           (sha256
-            (base16-string->bytevector
-             "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab"))))
-       ("rust-env_logger"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "env_logger" "0.4.3"))
-           (file-name "rust-env_logger-0.4.3")
-           (sha256
-            (base16-string->bytevector
-             "3ddf21e73e016298f5cb37d6ef8e8da8e39f91f9ec8b0df44b7deb16a9f8cd5b"))))
-       ("rust-error-chain"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "error-chain" "0.11.0"))
-           (file-name "rust-error-chain-0.11.0")
-           (sha256
-            (base16-string->bytevector
-             "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3"))))
-       ("rust-filetime"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "filetime" "0.1.12"))
-           (file-name "rust-filetime-0.1.12")
-           (sha256
-            (base16-string->bytevector
-             "6ab199bf38537c6f38792669e081e0bb278b9b7405bba2642e4e5d15bf732c0e"))))
-       ("rust-flate2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "flate2" "0.2.20"))
-           (file-name "rust-flate2-0.2.20")
-           (sha256
-            (base16-string->bytevector
-             "e6234dd4468ae5d1e2dbb06fe2b058696fdc50a339c68a393aefbf00bc81e423"))))
-       ("rust-fnv"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "fnv" "1.0.5"))
-           (file-name "rust-fnv-1.0.5")
-           (sha256
-            (base16-string->bytevector
-             "6cc484842f1e2884faf56f529f960cc12ad8c71ce96cc7abba0a067c98fee344"))))
-       ("rust-foreign-types"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "foreign-types" "0.2.0"))
-           (file-name "rust-foreign-types-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "3e4056b9bd47f8ac5ba12be771f77a0dae796d1bbaaf5fd0b9c2d38b69b8a29d"))))
-       ("rust-fs2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "fs2" "0.4.2"))
-           (file-name "rust-fs2-0.4.2")
-           (sha256
-            (base16-string->bytevector
-             "9ab76cfd2aaa59b7bf6688ad9ba15bbae64bff97f04ea02144cfd3443e5c2866"))))
-       ("rust-git2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "git2" "0.6.8"))
-           (file-name "rust-git2-0.6.8")
-           (sha256
-            (base16-string->bytevector
-             "0c1c0203d653f4140241da0c1375a404f0a397249ec818cd2076c6280c50f6fa"))))
-       ("rust-git2-curl"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "git2-curl" "0.7.0"))
-           (file-name "rust-git2-curl-0.7.0")
-           (sha256
-            (base16-string->bytevector
-             "68676bc784bf0bef83278898929bf64a251e87c0340723d0b93fa096c9c5bf8e"))))
-       ("rust-glob"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "glob" "0.2.11"))
-           (file-name "rust-glob-0.2.11")
-           (sha256
-            (base16-string->bytevector
-             "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"))))
-       ("rust-globset"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "globset" "0.2.0"))
-           (file-name "rust-globset-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "feeb1b6840809ef5efcf7a4a990bc4e1b7ee3df8cf9e2379a75aeb2ba42ac9c3"))))
-       ("rust-hamcrest"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "hamcrest" "0.1.1"))
-           (file-name "rust-hamcrest-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "bf088f042a467089e9baa4972f57f9247e42a0cc549ba264c7a04fbb8ecb89d4"))))
-       ("rust-hex"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "hex" "0.2.0"))
-           (file-name "rust-hex-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "d6a22814455d41612f41161581c2883c0c6a1c41852729b17d5ed88f01e153aa"))))
-       ("rust-home"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "home" "0.3.0"))
-           (file-name "rust-home-0.3.0")
-           (sha256
-            (base16-string->bytevector
-             "9f25ae61099d8f3fee8b483df0bd4ecccf4b2731897aad40d50eca1b641fe6db"))))
-       ("rust-idna"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "idna" "0.1.4"))
-           (file-name "rust-idna-0.1.4")
-           (sha256
-            (base16-string->bytevector
-             "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d"))))
-       ("rust-ignore"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "ignore" "0.2.2"))
-           (file-name "rust-ignore-0.2.2")
-           (sha256
-            (base16-string->bytevector
-             "b3fcaf2365eb14b28ec7603c98c06cc531f19de9eb283d89a3dff8417c8c99f5"))))
-       ("rust-itoa"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "itoa" "0.3.4"))
-           (file-name "rust-itoa-0.3.4")
-           (sha256
-            (base16-string->bytevector
-             "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c"))))
-       ("rust-jobserver"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "jobserver" "0.1.6"))
-           (file-name "rust-jobserver-0.1.6")
-           (sha256
-            (base16-string->bytevector
-             "443ae8bc0af6c106e6e8b77e04684faecc1a5ce94e058f4c2b0a037b0ea1b133"))))
-       ("rust-kernel32-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "kernel32-sys" "0.2.2"))
-           (file-name "rust-kernel32-sys-0.2.2")
-           (sha256
-            (base16-string->bytevector
-             "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"))))
-       ("rust-lazy_static"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "lazy_static" "0.2.9"))
-           (file-name "rust-lazy_static-0.2.9")
-           (sha256
-            (base16-string->bytevector
-             "c9e5e58fa1a4c3b915a561a78a22ee0cac6ab97dca2504428bc1cb074375f8d5"))))
-       ("rust-libc"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "libc" "0.2.31"))
-           (file-name "rust-libc-0.2.31")
-           (sha256
-            (base16-string->bytevector
-             "d1419b2939a0bc44b77feb34661583c7546b532b192feab36249ab584b86856c"))))
-       ("rust-libgit2-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "libgit2-sys" "0.6.16"))
-           (file-name "rust-libgit2-sys-0.6.16")
-           (sha256
-            (base16-string->bytevector
-             "6f74b4959cef96898f5123148724fc7dee043b9a6b99f219d948851bfbe53cb2"))))
-       ("rust-libssh2-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "libssh2-sys" "0.2.6"))
-           (file-name "rust-libssh2-sys-0.2.6")
-           (sha256
-            (base16-string->bytevector
-             "0db4ec23611747ef772db1c4d650f8bd762f07b461727ec998f953c614024b75"))))
-       ("rust-libz-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "libz-sys" "1.0.17"))
-           (file-name "rust-libz-sys-1.0.17")
-           (sha256
-            (base16-string->bytevector
-             "44ebbc760fd2d2f4d93de09a0e13d97e057612052e871da9985cedcb451e6bd5"))))
-       ("rust-log"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "log" "0.3.8"))
-           (file-name "rust-log-0.3.8")
-           (sha256
-            (base16-string->bytevector
-             "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b"))))
-       ("rust-magenta"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "magenta" "0.1.1"))
-           (file-name "rust-magenta-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "4bf0336886480e671965f794bc9b6fce88503563013d1bfb7a502c81fe3ac527"))))
-       ("rust-magenta-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "magenta-sys" "0.1.1"))
-           (file-name "rust-magenta-sys-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "40d014c7011ac470ae28e2f76a02bfea4a8480f73e701353b49ad7a8d75f4699"))))
-       ("rust-matches"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "matches" "0.1.6"))
-           (file-name "rust-matches-0.1.6")
-           (sha256
-            (base16-string->bytevector
-             "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376"))))
-       ("rust-memchr"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "memchr" "0.1.11"))
-           (file-name "rust-memchr-0.1.11")
-           (sha256
-            (base16-string->bytevector
-             "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"))))
-       ("rust-memchr-1.0.1"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "memchr" "1.0.1"))
-           (file-name "rust-memchr-1.0.1")
-           (sha256
-            (base16-string->bytevector
-             "1dbccc0e46f1ea47b9f17e6d67c5a96bd27030519c519c9c91327e31275a47b4"))))
-       ("rust-miniz-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "miniz-sys" "0.1.10"))
-           (file-name "rust-miniz-sys-0.1.10")
-           (sha256
-            (base16-string->bytevector
-             "609ce024854aeb19a0ef7567d348aaa5a746b32fb72e336df7fcc16869d7e2b4"))))
-       ("rust-miow"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "miow" "0.2.1"))
-           (file-name "rust-miow-0.2.1")
-           (sha256
-            (base16-string->bytevector
-             "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"))))
-       ("rust-net2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "net2" "0.2.31"))
-           (file-name "rust-net2-0.2.31")
-           (sha256
-            (base16-string->bytevector
-             "3a80f842784ef6c9a958b68b7516bc7e35883c614004dd94959a4dca1b716c09"))))
-       ("rust-num"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num" "0.1.40"))
-           (file-name "rust-num-0.1.40")
-           (sha256
-            (base16-string->bytevector
-             "a311b77ebdc5dd4cf6449d81e4135d9f0e3b153839ac90e648a8ef538f923525"))))
-       ("rust-num-bigint"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-bigint" "0.1.40"))
-           (file-name "rust-num-bigint-0.1.40")
-           (sha256
-            (base16-string->bytevector
-             "8fd0f8dbb4c0960998958a796281d88c16fbe68d87b1baa6f31e2979e81fd0bd"))))
-       ("rust-num-complex"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-complex" "0.1.40"))
-           (file-name "rust-num-complex-0.1.40")
-           (sha256
-            (base16-string->bytevector
-             "503e668405c5492d67cf662a81e05be40efe2e6bcf10f7794a07bd9865e704e6"))))
-       ("rust-num-integer"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-integer" "0.1.35"))
-           (file-name "rust-num-integer-0.1.35")
-           (sha256
-            (base16-string->bytevector
-             "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba"))))
-       ("rust-num-iter"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-iter" "0.1.34"))
-           (file-name "rust-num-iter-0.1.34")
-           (sha256
-            (base16-string->bytevector
-             "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01"))))
-       ("rust-num-rational"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-rational" "0.1.39"))
-           (file-name "rust-num-rational-0.1.39")
-           (sha256
-            (base16-string->bytevector
-             "288629c76fac4b33556f4b7ab57ba21ae202da65ba8b77466e6d598e31990790"))))
-       ("rust-num-traits"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-traits" "0.1.40"))
-           (file-name "rust-num-traits-0.1.40")
-           (sha256
-            (base16-string->bytevector
-             "99843c856d68d8b4313b03a17e33c4bb42ae8f6610ea81b28abe076ac721b9b0"))))
-       ("rust-num_cpus"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num_cpus" "1.7.0"))
-           (file-name "rust-num_cpus-1.7.0")
-           (sha256
-            (base16-string->bytevector
-             "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d"))))
-       ("rust-openssl"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "openssl" "0.9.19"))
-           (file-name "rust-openssl-0.9.19")
-           (sha256
-            (base16-string->bytevector
-             "816914b22eb15671d62c73442a51978f311e911d6a6f6cbdafa6abce1b5038fc"))))
-       ("rust-openssl-probe"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "openssl-probe" "0.1.1"))
-           (file-name "rust-openssl-probe-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "d98df0270d404ccd3c050a41d579c52d1db15375168bb3471e04ec0f5f378daf"))))
-       ("rust-openssl-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "openssl-sys" "0.9.19"))
-           (file-name "rust-openssl-sys-0.9.19")
-           (sha256
-            (base16-string->bytevector
-             "1e4c63a7d559c1e5afa6d6a9e6fa34bbc5f800ffc9ae08b72c605420b0c4f5e8"))))
-       ("rust-percent-encoding"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "percent-encoding" "1.0.0"))
-           (file-name "rust-precent-encoding-1.0.0")
-           (sha256
-            (base16-string->bytevector
-             "de154f638187706bde41d9b4738748933d64e6b37bdbffc0b47a97d16a6ae356"))))
-       ("rust-pkg-config"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "pkg-config" "0.3.9"))
-           (file-name "rust-pkg-config-0.3.9")
-           (sha256
-            (base16-string->bytevector
-             "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903"))))
-       ("rust-psapi-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "psapi-sys" "0.1.0"))
-           (file-name "rust-psapi-sys-0.1.0")
-           (sha256
-            (base16-string->bytevector
-             "abcd5d1a07d360e29727f757a9decb3ce8bc6e0efa8969cfaad669a8317a2478"))))
-       ("rust-quote"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "quote" "0.3.15"))
-           (file-name "rust-quote-0.3.15")
-           (sha256
-            (base16-string->bytevector
-             "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"))))
-       ("rust-rand"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "rand" "0.3.16"))
-           (file-name "rust-rand-0.3.16")
-           (sha256
-            (base16-string->bytevector
-             "eb250fd207a4729c976794d03db689c9be1d634ab5a1c9da9492a13d8fecbcdf"))))
-       ("rust-redox_syscall"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "redox_syscall" "0.1.31"))
-           (file-name "rust-redox_syscall-0.1.31")
-           (sha256
-            (base16-string->bytevector
-             "8dde11f18c108289bef24469638a04dce49da56084f2d50618b226e47eb04509"))))
-       ("rust-redox_termios"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "redox_termios" "0.1.1"))
-           (file-name "rust-redox_termios-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"))))
-       ("rust-regex"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "regex" "0.1.80"))
-           (file-name "rust-regex-0.1.80")
-           (sha256
-            (base16-string->bytevector
-             "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"))))
-       ("rust-regex-0.2.2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "regex" "0.2.2"))
-           (file-name "rust-regex-0.2.2")
-           (sha256
-            (base16-string->bytevector
-             "1731164734096285ec2a5ec7fea5248ae2f5485b3feeb0115af4fda2183b2d1b"))))
-       ("rust-regex-syntax"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "regex-syntax" "0.3.9"))
-           (file-name "rust-regex-syntax-0.3.9")
-           (sha256
-            (base16-string->bytevector
-             "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"))))
-       ("rust-regex-syntax-0.4.1"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "regex-syntax" "0.4.1"))
-           (file-name "rust-regex-syntax-0.4.1")
-           (sha256
-            (base16-string->bytevector
-             "ad890a5eef7953f55427c50575c680c42841653abd2b028b68cd223d157f62db"))))
-       ("rust-rustc-demangle"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "rustc-demangle" "0.1.5"))
-           (file-name "rust-rustc-demangle-0.1.5")
-           (sha256
-            (base16-string->bytevector
-             "aee45432acc62f7b9a108cc054142dac51f979e69e71ddce7d6fc7adf29e817e"))))
-       ("rust-rustc-serialize"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "rustc-serialize" "0.3.24"))
-           (file-name "rust-rustc-serialize-0.3.24")
-           (sha256
-            (base16-string->bytevector
-             "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"))))
-       ("rust-same-file"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "same-file" "0.1.3"))
-           (file-name "rust-same-file-0.1.3")
-           (sha256
-            (base16-string->bytevector
-             "d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7"))))
-       ("rust-scoped-tls"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "scoped-tls" "0.1.0"))
-           (file-name "rust-scoped-tls-0.1.0")
-           (sha256
-            (base16-string->bytevector
-             "f417c22df063e9450888a7561788e9bd46d3bb3c1466435b4eccb903807f147d"))))
-       ("rust-scopeguard"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "scopeguard" "0.1.2"))
-           (file-name "rust-scopeguard-0.1.2")
-           (sha256
-            (base16-string->bytevector
-             "59a076157c1e2dc561d8de585151ee6965d910dd4dcb5dabb7ae3e83981a6c57"))))
-       ("rust-semver"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "semver" "0.8.0"))
-           (file-name "rust-semver-0.8.0")
-           (sha256
-            (base16-string->bytevector
-             "bee2bc909ab2d8d60dab26e8cad85b25d795b14603a0dcb627b78b9d30b6454b"))))
-       ("rust-semver-parser"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "semver-parser" "0.7.0"))
-           (file-name "rust-semver-parser-0.7.0")
-           (sha256
-            (base16-string->bytevector
-             "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"))))
-       ("rust-serde"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde" "1.0.15"))
-           (file-name "rust-serde-1.0.15")
-           (sha256
-            (base16-string->bytevector
-             "6a7046c9d4c6c522d10b2d098f9bebe2bef227e0e74044d8c1bfcf6b476af799"))))
-       ("rust-serde_derive"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde_derive" "1.0.15"))
-           (file-name "rust-serde_derive-1.0.15")
-           (sha256
-            (base16-string->bytevector
-             "1afcaae083fd1c46952a315062326bc9957f182358eb7da03b57ef1c688f7aa9"))))
-       ("rust-serde_derive_internals"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde_derive_internals" "0.16.0"))
-           (file-name "rust-serde_derive_internals-0.16.0")
-           (sha256
-            (base16-string->bytevector
-             "bd381f6d01a6616cdba8530492d453b7761b456ba974e98768a18cad2cd76f58"))))
-       ("rust-serde_ignored"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde_ignored" "0.0.4"))
-           (file-name "rust-serde_ignored-0.0.4")
-           (sha256
-            (base16-string->bytevector
-             "190e9765dcedb56be63b6e0993a006c7e3b071a016a304736e4a315dc01fb142"))))
-       ("rust-serde_json"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde_json" "1.0.3"))
-           (file-name "rust-serde_json-1.0.3")
-           (sha256
-            (base16-string->bytevector
-             "d243424e06f9f9c39e3cd36147470fd340db785825e367625f79298a6ac6b7ac"))))
-       ("rust-shell-escape"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "shell-escape" "0.1.3"))
-           (file-name "rust-shell-escape-0.1.3")
-           (sha256
-            (base16-string->bytevector
-             "dd5cc96481d54583947bfe88bf30c23d53f883c6cd0145368b69989d97b84ef8"))))
-       ("rust-socket2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "socket2" "0.2.3"))
-           (file-name "rust-socket2-0.2.3")
-           (sha256
-            (base16-string->bytevector
-             "9e76b159741052c7deaa9fd0b5ca6b5f79cecf525ed665abfe5002086c6b2791"))))
-       ("rust-strsim"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "strsim" "0.6.0"))
-           (file-name "rust-strsim-0.6.0")
-           (sha256
-            (base16-string->bytevector
-             "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"))))
-       ("rust-syn"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "syn" "0.11.11"))
-           (file-name "rust-syn-0.11.11")
-           (sha256
-            (base16-string->bytevector
-             "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"))))
-       ("rust-synom"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "synom" "0.11.3"))
-           (file-name "rust-synom-0.11.3")
-           (sha256
-            (base16-string->bytevector
-             "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"))))
-       ("rust-tar"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "tar" "0.4.13"))
-           (file-name "rust-tar-0.4.13")
-           (sha256
-            (base16-string->bytevector
-             "281285b717926caa919ad905ef89c63d75805c7d89437fb873100925a53f2b1b"))))
-       ("rust-tempdir"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "tempdir" "0.3.5"))
-           (file-name "rust-tempdir-0.3.5")
-           (sha256
-            (base16-string->bytevector
-             "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6"))))
-       ("rust-termcolor"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "termcolor" "0.3.3"))
-           (file-name "rust-termcolor-0.3.3")
-           (sha256
-            (base16-string->bytevector
-             "9065bced9c3e43453aa3d56f1e98590b8455b341d2fa191a1090c0dd0b242c75"))))
-       ("rust-termion"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "termion" "1.5.1"))
-           (file-name "rust-termion-1.5.1")
-           (sha256
-            (base16-string->bytevector
-             "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"))))
-       ("rust-thread-id"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "thread-id" "2.0.0"))
-           (file-name "rust-thread-id-2.0.0")
-           (sha256
-            (base16-string->bytevector
-             "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"))))
-       ("rust-thread_local"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "thread_local" "0.2.7"))
-           (file-name "rust-thread_local-0.2.7")
-           (sha256
-            (base16-string->bytevector
-             "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"))))
-       ("rust-thread_local-0.3.4"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "thread_local" "0.3.4"))
-           (file-name "rust-thread_local-0.3.4")
-           (sha256
-            (base16-string->bytevector
-             "1697c4b57aeeb7a536b647165a2825faddffb1d3bad386d507709bd51a90bb14"))))
-       ("rust-toml"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "toml" "0.4.5"))
-           (file-name "rust-toml-0.4.5")
-           (sha256
-            (base16-string->bytevector
-             "a7540f4ffc193e0d3c94121edb19b055670d369f77d5804db11ae053a45b6e7e"))))
-       ("rust-unicode-bidi"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "unicode-bidi" "0.3.4"))
-           (file-name "rust-unicode-bidi-0.3.4")
-           (sha256
-            (base16-string->bytevector
-             "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"))))
-       ("rust-unicode-normalization"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "unicode-normalization" "0.1.5"))
-           (file-name "rust-unicode-normalization-0.1.5")
-           (sha256
-            (base16-string->bytevector
-             "51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f"))))
-       ("rust-unicode-xid"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "unicode-xid" "0.0.4"))
-           (file-name "rust-unicode-xid-0.0.4")
-           (sha256
-            (base16-string->bytevector
-             "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"))))
-       ("rust-unreachable"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "unreachable" "1.0.0"))
-           (file-name "rust-unreachable-1.0.0")
-           (sha256
-            (base16-string->bytevector
-             "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"))))
-       ("rust-url"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "url" "1.5.1"))
-           (file-name "rust-url-1.5.1")
-           (sha256
-            (base16-string->bytevector
-             "eeb819346883532a271eb626deb43c4a1bb4c4dd47c519bd78137c3e72a4fe27"))))
-       ("rust-userenv-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "userenv-sys" "0.2.0"))
-           (file-name "rust-userenv-sys-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "71d28ea36bbd9192d75bd9fa9b39f96ddb986eaee824adae5d53b6e51919b2f3"))))
-       ("rust-utf8-ranges"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "utf8-ranges" "0.1.3"))
-           (file-name "rust-utf8-ranges-0.1.3")
-           (sha256
-            (base16-string->bytevector
-             "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"))))
-       ("rust-utf8-ranges-1.0.0"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "utf8-ranges" "1.0.0"))
-           (file-name "rust-utf8-ranges-1.0.0")
-           (sha256
-            (base16-string->bytevector
-             "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122"))))
-       ("rust-vcpkg"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "vcpkg" "0.2.2"))
-           (file-name "rust-vcpkg-0.2.2")
-           (sha256
-            (base16-string->bytevector
-             "9e0a7d8bed3178a8fb112199d466eeca9ed09a14ba8ad67718179b4fd5487d0b"))))
-       ("rust-void"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "void" "1.0.2"))
-           (file-name "rust-void-1.0.2")
-           (sha256
-            (base16-string->bytevector
-             "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"))))
-       ("rust-walkdir"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "walkdir" "1.0.7"))
-           (file-name "rust-walkdir-1.0.7")
-           (sha256
-            (base16-string->bytevector
-             "bb08f9e670fab86099470b97cd2b252d6527f0b3cc1401acdb595ffc9dd288ff"))))
-       ("rust-winapi"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "winapi" "0.2.8"))
-           (file-name "rust-winapi-0.2.8")
-           (sha256
-            (base16-string->bytevector
-             "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"))))
-       ("rust-winapi-build"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "winapi-build" "0.1.1"))
-           (file-name "rust-winapi-build-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"))))
-       ("rust-wincolor"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "wincolor" "0.1.4"))
-           (file-name "rust-wincolor-0.1.4")
-           (sha256
-            (base16-string->bytevector
-             "a39ee4464208f6430992ff20154216ab2357772ac871d994c51628d60e58b8b0"))))
-       ("rust-ws2_32-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "ws2_32-sys" "0.2.1"))
-           (file-name "rust-ws2_32-sys-0.2.1")
-           (sha256
-            (base16-string->bytevector
-             "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"))))))
-    (arguments
-     `(#:cargo ,cargo-bootstrap
-       #:rustc ,rustc ; Force to use rustc from current file
-       #:modules
-       ((ice-9 match)
-        (srfi srfi-1) ; 'every
-        (guix build utils)
-        (guix build cargo-build-system))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'unpack-dependencies
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (define (unpack source target)
-               (mkdir-p target)
-               (with-directory-excursion target
-                 (zero? (system* "tar" "xf"
-                                 source
-                                 "--strip-components=1"))))
-             (define (touch file-name)
-               (call-with-output-file file-name (const #t)))
-             (define (install-rust-library entry)
-               (match entry
-                 ((name . src)
-                  (if (string-prefix? "rust-" name)
-                      (let* ((rust-length (string-length "rust-"))
-                             (rust-name (string-drop name rust-length))
-                             (rsrc (string-append "vendor/" rust-name))
-                             (unpack-status (unpack src rsrc)))
-                        (touch (string-append rsrc "/.cargo-ok"))
-                        (generate-checksums rsrc src)
-                        unpack-status)))
-                 (_ #t)))
-             (mkdir "vendor")
-             (every install-rust-library inputs)))
-         (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "Cargo.lock"
-               (("(\"checksum .* = )\".*\"" all name)
-                (string-append name "\"" ,%cargo-reference-hash "\"")))
-             (for-each
-              (lambda (filename)
-                (use-modules (guix build cargo-build-system))
-                (delete-file filename)
-                (let* ((dir (dirname filename)))
-                  (display (string-append
-                            "patch-cargo-checksums: generate-checksums for "
-                            dir "\n"))
-                  (generate-checksums dir ,%cargo-reference-project-file)))
-              (find-files "vendor" ".cargo-checksum.json"))
-             #t))
-         (replace 'configure
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (substitute* "tests/build.rs"
-               (("/usr/bin/env") (which "env"))
-               ;; Guix llvm compiled without asmjs-unknown-emscripten at all
-               (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))
-             (substitute* "tests/death.rs"
-               ;; Stuck when built in container
-               (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))
-             (mkdir ".cargo")
-             (call-with-output-file ".cargo/config"
-               (lambda (port)
-                 (display "
-[source.crates-io]
-registry = 'https://github.com/rust-lang/crates.io-index'
-replace-with = 'vendored-sources'
-
-[source.vendored-sources]
-directory = 'vendor'
-" port)))
-             ;; Disable test for cross compilation support
-             (setenv "CFG_DISABLE_CROSS_TESTS" "1")
-             (setenv "SHELL" (which "sh"))
-             (setenv "CONFIG_SHELL" (which "sh"))
-             (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
-             #t)))))
-    (home-page "https://github.com/rust-lang/cargo")
-    (synopsis "Build tool and package manager for Rust")
-    (description "Cargo is a tool that allows Rust projects to declare their
-dependencies and ensures a reproducible build.")
-    ;; Cargo is dual licensed Apache and MIT. Also contains
-    ;; code from openssl which is GPL2 with linking exception.
-    (license (list license:asl2.0 license:expat license:gpl2))))
diff --git a/guix/build-system/cargo.scm b/guix/build-system/cargo.scm
index c637fbb16..4a1eb0cfa 100644
--- a/guix/build-system/cargo.scm
+++ b/guix/build-system/cargo.scm
@@ -43,17 +43,11 @@
 to NAME and VERSION."
   (string-append crate-url name "/" version "/download"))
 
-(define (default-cargo)
-  "Return the default Cargo package."
+(define (default-rust)
+  "Return the default Rust package."
   ;; Lazily resolve the binding to avoid a circular dependency.
   (let ((rust (resolve-interface '(gnu packages rust))))
-    (module-ref rust 'cargo)))
-
-(define (default-rustc)
-  "Return the default Rustc package."
-  ;; Lazily resolve the binding to avoid a circular dependency.
-  (let ((rust (resolve-interface '(gnu packages rust))))
-    (module-ref rust 'rustc)))
+    (module-ref rust 'rust)))
 
 (define %cargo-build-system-modules
   ;; Build-side modules imported by default.
@@ -115,14 +109,13 @@ to NAME and VERSION."
 
 (define* (lower name
                 #:key source inputs native-inputs outputs system target
-                (cargo (default-cargo))
-                (rustc (default-rustc))
+                (rust (default-rust))
                 #:allow-other-keys
                 #:rest arguments)
   "Return a bag for NAME."
 
   (define private-keywords
-    '(#:source #:target #:cargo #:rustc #:inputs #:native-inputs #:outputs))
+    '(#:source #:target #:rust #:inputs #:native-inputs #:outputs))
 
   (and (not target) ;; TODO: support cross-compilation
        (bag
@@ -136,8 +129,8 @@ to NAME and VERSION."
 
                         ;; Keep the standard inputs of 'gnu-build-system'
                         ,@(standard-packages)))
-         (build-inputs `(("cargo" ,cargo)
-                         ("rustc" ,rustc)
+         (build-inputs `(("cargo" ,rust "cargo")
+                         ("rustc" ,rust)
                          ,@native-inputs))
          (outputs outputs)
          (build cargo-build)
-- 
2.16.2

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-13 19:06 [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1 Nikolai Merinov
@ 2018-03-17 21:22 ` Ludovic Courtès
  2018-03-19 12:26   ` Nikolai Merinov
  2018-03-18 18:58 ` Danny Milosavljevic
  2018-03-22  7:20 ` [bug#30831] building rust on aarch64 Efraim Flashner
  2 siblings, 1 reply; 19+ messages in thread
From: Ludovic Courtès @ 2018-03-17 21:22 UTC (permalink / raw)
  To: Nikolai Merinov; +Cc: 30831

Hi Nikolai,

Great piece of work!

Nikolai Merinov <nikolai.merinov@member.fsf.org> skribis:

> * gnu/packages/rust.scm (%rust-bootstrap-binaries-version): Update version.
> (%rust-bootstrap-binaries): Update hashsums.
> (cargo-bootstrap): Update minor version.
> (rust): Rename "rustc" to "rust". Update sha256 for tarball. Add cargo related
> dependencies. Install "cargo" as separate "rust" output. Remove substitutes
> for bugs that was fixed in "rustc" source code. Install documentation to
> separate "doc" output. Update configuration according to changes in "rustc"
> source code.
> * guix/build-system/cargo.scm (default-rust): Replace "default-cargo" and
> "default-rustc" functions with "default-rust" function.
> (cargo-build-system): Take only one package as "rust" source. Use "rustc" from
> default output of "rust" package, use "cargo" as "cargo" output of "rust"
> package.
>
> Cargo was moved from separate package to "rust" output because starting from
> 0.25.0 release cargo have no "Cargo.lock" anymore. According to
> https://github.com/rust-lang/cargo/commit/5c9665f41c6b4d3b99d3b9f8b48a286f5f154692
> commit message "cargo" used as "rust" dependency and stable version for
> "cargo" provided through "Cargo.lock" file from "rust-lang/rust"
> repository. As result only way to get stable version of "cargo" is build it from
> "rust" sources.

OK.

>  ;; Should be one less than the current released version.
> -(define %rust-bootstrap-binaries-version "1.21.0")
> +(define %rust-bootstrap-binaries-version "1.23.0")
>  
>  (define %rust-bootstrap-binaries
>    (origin
> @@ -66,15 +66,15 @@
>       (base32
>        (match %host-type
>          ("i686-unknown-linux-gnu"
> -         "1vnvqwz30hvyjcfr1f602lg43v2vlqjr3yhb5vr8xnrcc07yvjmp")
> +         "0gs283lw6larhjlr02zm9g78djq2f6bdhxj6ls66q0z18zpx0nyw")
>          ("x86_64-unknown-linux-gnu"
> -         "1s0866qcy0645bqhsbs3pvk2hi52ps8jzs7x096w0as033h707ml")
> +         "0znw3xxh837i5wlwsbbw6bxdqfa58bxyw3716wbckwyph8xb4d4s")
>          ("armv7-unknown-linux-gnueabihf"
> -         "1ml8fjq2b6j2vn1j314w93pf4wjl97n1mbz609h3i7md0zqscvs1")
> +         "13mh4qx996rb6c3xygflc10j5zkmcxzjr32340ardwb7ja4jfw2q")
>          ("aarch64-unknown-linux-gnu"
> -         "1hv4m2m7xjcph39r6baryfg23hjcr4sbsrfnd1lh0wn67k2fc7j9")
> +         "1irbj73ifdm7xvshma7qp61sadm683dnc57jfg5qc8kdjyyrydrq")
>          ("mips64el-unknown-linux-gnuabi64"
> -         "0p7fzkfcqg5yvj86v434z351dp7s7pgns8nzxj0fz3hmbfbvlvn9")
> +         "1wksf07ba9idrj1z6x0hdfjsmhpzzi5idawnkfbhy6cj1g9ihnzv")
>          (_ "")))))) ; Catch-all for other systems.

Instead of incrementing the version number of the bootstrap binaries, do
you think it would be an option to keep 1.22 and build 1.23 from it, or
does that cargo/rust merge prevent it?

That would allow us to build Rust independently from what upstream did,
thereby increasing binary diversity, which I think is a good thing
security-wise.

Thoughts?

Ludo’.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-13 19:06 [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1 Nikolai Merinov
  2018-03-17 21:22 ` Ludovic Courtès
@ 2018-03-18 18:58 ` Danny Milosavljevic
  2018-03-21 19:02   ` Nikolai Merinov
  2018-03-22  7:20 ` [bug#30831] building rust on aarch64 Efraim Flashner
  2 siblings, 1 reply; 19+ messages in thread
From: Danny Milosavljevic @ 2018-03-18 18:58 UTC (permalink / raw)
  To: Nikolai Merinov; +Cc: 30831

[-- Attachment #1: Type: text/plain, Size: 1754 bytes --]

Hi,

Rust after this patch is not reproducible.

Binary files /gnu/store/nbyxci7zgv9z5zrkzw9c5wppgv3bk1rd-rust-1.24.1/lib/librustc-7b5ea53516e6ab59.so and /gnu/store/nbyxci7zgv9z5zrkzw9c5wppgv3bk1rd-rust-1.24.1-check/lib/librustc-7b5ea53516e6ab59.so differ
Binary files /gnu/store/nbyxci7zgv9z5zrkzw9c5wppgv3bk1rd-rust-1.24.1/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-7b5ea53516e6ab59.so and /gnu/store/nbyxci7zgv9z5zrkzw9c5wppgv3bk1rd-rust-1.24.1-check/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-7b5ea53516e6ab59.so differ

diffoscope says:

│ │ │ -  [26] .rustc            PROGBITS        0000000000000000 be3030 6e5dd5 00      0   0 16
│ │ │ -  [27] .symtab           SYMTAB          0000000000000000 12c8e08 158340 18     28 54351  8
│ │ │ -  [28] .strtab           STRTAB          0000000000000000 1421148 3b00e3 00      0   0  1
│ │ │ -  [29] .shstrtab         STRTAB          0000000000000000 17d122b 0000fe 00      0   0  1
│ │ │ +  [26] .rustc            PROGBITS        0000000000000000 be3030 6e6b05 00      0   0 16
│ │ │ +  [27] .symtab           SYMTAB          0000000000000000 12c9b38 158340 18     28 54351  8
│ │ │ +  [28] .strtab           STRTAB          0000000000000000 1421e78 3b00e3 00      0   0  1
│ │ │ +  [29] .shstrtab         STRTAB          0000000000000000 17d1f5b 0000fe 00      0   0  1
│ │ │  Key to Flags:
[...]
│ │ │ -  1603: 0000000000000000 0x6e5dd5 OBJECT  GLOBAL DEFAULT   26 rust_metadata_rustc_d87c35d223a98218627136b41e7e5b87
│ │ │ +  1603: 0000000000000000 0x6e6b05 OBJECT  GLOBAL DEFAULT   26 rust_metadata_rustc_d87c35d223a98218627136b41e7e5b87

And a metadata body part is missing in the second round.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-17 21:22 ` Ludovic Courtès
@ 2018-03-19 12:26   ` Nikolai Merinov
  2018-03-19 16:23     ` Ludovic Courtès
  0 siblings, 1 reply; 19+ messages in thread
From: Nikolai Merinov @ 2018-03-19 12:26 UTC (permalink / raw)
  To: Ludovic Courtès, Danny Milosavljevic; +Cc: 30831

Hi Ludovic,

> Instead of incrementing the version number of the bootstrap binaries, do
> you think it would be an option to keep 1.22 and build 1.23 from it, or
> does that cargo/rust merge prevent it?

In rust 1.22 there already was possibility to build "cargo" from "rust"
repository, so suggested packages structures change can be used either
for old "rust" releases.

By default rust should be built with
https://github.com/rust-lang/rust/blob/1.24.1/src/stage0.txt versions of
rust and cargo. In most of cases this for "1.X.Y" release it want to use
"1.(X-1).0" version of rustc and "0.X.0" version of cargo. As result to
build release version of Rust compiler we should have previous release
of rust compiler.

Actually there is two ways to achieve this:
1. Constantly update bootsrap binaries version.
2. For each new release create new package. As result we'll be able to
use old rust release to build each new rust release. E.g. we can use
1.21.0 bootstrap binaries, then build 1.22.0 rust and use it to build
1.23.0 rust and then use it to build 1.24.1 rust.

Which way is preferable? 

Please do not merge my patch until I'll check Danny's report about
reproducability.

Regards,
Nikola

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-19 12:26   ` Nikolai Merinov
@ 2018-03-19 16:23     ` Ludovic Courtès
  2018-03-20 10:56       ` Ricardo Wurmus
  0 siblings, 1 reply; 19+ messages in thread
From: Ludovic Courtès @ 2018-03-19 16:23 UTC (permalink / raw)
  To: Nikolai Merinov; +Cc: 30831, rekado

Hello,

Nikolai Merinov <nikolai.merinov@member.fsf.org> skribis:

> Actually there is two ways to achieve this:
> 1. Constantly update bootsrap binaries version.
> 2. For each new release create new package. As result we'll be able to
> use old rust release to build each new rust release. E.g. we can use
> 1.21.0 bootstrap binaries, then build 1.22.0 rust and use it to build
> 1.23.0 rust and then use it to build 1.24.1 rust.
>
> Which way is preferable? 

Like I wrote, I would prefer option #2, so as to increase “binary
diversity” and not rely on builds made by upstream.

This obviously relates to <http://bootstrappable.org/>.  Ricardo, what’s
your take on this?

> Please do not merge my patch until I'll check Danny's report about
> reproducability.

Sure!

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-19 16:23     ` Ludovic Courtès
@ 2018-03-20 10:56       ` Ricardo Wurmus
  2018-03-22 21:01         ` Nikolai Merinov
  0 siblings, 1 reply; 19+ messages in thread
From: Ricardo Wurmus @ 2018-03-20 10:56 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 30831


Ludovic Courtès <ludo@gnu.org> writes:

> Hello,
>
> Nikolai Merinov <nikolai.merinov@member.fsf.org> skribis:
>
>> Actually there is two ways to achieve this:
>> 1. Constantly update bootsrap binaries version.
>> 2. For each new release create new package. As result we'll be able to
>> use old rust release to build each new rust release. E.g. we can use
>> 1.21.0 bootstrap binaries, then build 1.22.0 rust and use it to build
>> 1.23.0 rust and then use it to build 1.24.1 rust.
>>
>> Which way is preferable? 
>
> Like I wrote, I would prefer option #2, so as to increase “binary
> diversity” and not rely on builds made by upstream.
>
> This obviously relates to <http://bootstrappable.org/>.  Ricardo, what’s
> your take on this?

I agree.  In the long run, however, I’d prefer for Rust to be
bootstrapped through one of the alternative implementations.  Then we
don’t need to keep a long chain of older versions.

Currently, however, I don’t see a way around it.

-- 
Ricardo

GPG: BCA6 89B6 3655 3801 C3C6  2150 197A 5888 235F ACAC
https://elephly.net

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-18 18:58 ` Danny Milosavljevic
@ 2018-03-21 19:02   ` Nikolai Merinov
  2018-03-24 16:26     ` Danny Milosavljevic
  0 siblings, 1 reply; 19+ messages in thread
From: Nikolai Merinov @ 2018-03-21 19:02 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: 30831

Hi Danny,

I checked several times with "guix build --no-grafts --rounds=2 rust@1.24.1"
with "guix gc" between tries, but it worked correctly. I tried on x86-64
architecture with my patch over 79f450a120068ac1d2fc4e5b4b33ae938b604f95
guix commit. 

Do you know how I can get same result as in your build?

Regards,
Nikolai

Danny Milosavljevic <dannym@scratchpost.org> writes:

> Hi,
>
> Rust after this patch is not reproducible.
>
> Binary files
> /gnu/store/nbyxci7zgv9z5zrkzw9c5wppgv3bk1rd-rust-1.24.1/lib/librustc-7b5ea53516e6ab59.so
> and
> /gnu/store/nbyxci7zgv9z5zrkzw9c5wppgv3bk1rd-rust-1.24.1-check/lib/librustc-7b5ea53516e6ab59.so
> differ
> Binary files
> /gnu/store/nbyxci7zgv9z5zrkzw9c5wppgv3bk1rd-rust-1.24.1/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-7b5ea53516e6ab59.so
> and
> /gnu/store/nbyxci7zgv9z5zrkzw9c5wppgv3bk1rd-rust-1.24.1-check/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-7b5ea53516e6ab59.so
> differ
>
> diffoscope says:
>
> │ │ │ -  [26] .rustc            PROGBITS        0000000000000000 be3030 6e5dd5 00      0   0 16
> │ │ │ -  [27] .symtab           SYMTAB          0000000000000000 12c8e08 158340 18     28 54351  8
> │ │ │ -  [28] .strtab           STRTAB          0000000000000000 1421148 3b00e3 00      0   0  1
> │ │ │ -  [29] .shstrtab         STRTAB          0000000000000000 17d122b 0000fe 00      0   0  1
> │ │ │ +  [26] .rustc            PROGBITS        0000000000000000 be3030 6e6b05 00      0   0 16
> │ │ │ +  [27] .symtab           SYMTAB          0000000000000000 12c9b38 158340 18     28 54351  8
> │ │ │ +  [28] .strtab           STRTAB          0000000000000000 1421e78 3b00e3 00      0   0  1
> │ │ │ +  [29] .shstrtab         STRTAB          0000000000000000 17d1f5b 0000fe 00      0   0  1
> │ │ │  Key to Flags:
> [...]
> │ │ │ - 1603: 0000000000000000 0x6e5dd5 OBJECT GLOBAL DEFAULT 26
> rust_metadata_rustc_d87c35d223a98218627136b41e7e5b87
> │ │ │ + 1603: 0000000000000000 0x6e6b05 OBJECT GLOBAL DEFAULT 26
> rust_metadata_rustc_d87c35d223a98218627136b41e7e5b87
>
> And a metadata body part is missing in the second round.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] building rust on aarch64
  2018-03-13 19:06 [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1 Nikolai Merinov
  2018-03-17 21:22 ` Ludovic Courtès
  2018-03-18 18:58 ` Danny Milosavljevic
@ 2018-03-22  7:20 ` Efraim Flashner
  2 siblings, 0 replies; 19+ messages in thread
From: Efraim Flashner @ 2018-03-22  7:20 UTC (permalink / raw)
  To: 30831


[-- Attachment #1.1: Type: text/plain, Size: 2406 bytes --]

I tested the patch on my aarch64 box and with the following patch I was
able to start the building process. Currently rust fails its test stage
with the error:

test result: ok. 193 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out

        finished in 267.991
Testing libstd stage1 (aarch64-unknown-linux-gnu -> aarch64-unknown-linux-gnu)
   Compiling libc v0.2.34
   Compiling core v0.0.0 (file:///tmp/guix-build-rust-1.24.1.drv-0/rustc-1.24.1-src/src/libcore)
   Compiling std_unicode v0.0.0 (file:///tmp/guix-build-rust-1.24.1.drv-0/rustc-1.24.1-src/src/libstd_unicode)
   Compiling rand v0.3.19
   Compiling std v0.0.0 (file:///tmp/guix-build-rust-1.24.1.drv-0/rustc-1.24.1-src/src/libstd)
   Compiling alloc v0.0.0 (file:///tmp/guix-build-rust-1.24.1.drv-0/rustc-1.24.1-src/src/liballoc)
error: unused attribute
   --> src/libstd/sys/unix/process/process_common.rs:449:5
    |
449 |     #[ignore]
    |     ^^^^^^^^^
    |
note: lint level defined here
   --> src/libstd/lib.rs:232:9
    |
232 | #![deny(warnings)]
    |         ^^^^^^^^
    = note: #[deny(unused_attributes)] implied by #[deny(warnings)]

error: aborting due to previous error

error: Could not compile `std`.
warning: build failed, waiting for other jobs to finish...
error: build failed


command did not execute successfully: "/gnu/store/3vvhw5xpbcym5l3xk2pszzzyx4m7k8l6-cargo-bootstrap-0.24.0/bin/cargo" "test" "--target" "aarch64-unknown-linux-gnu" "-j" "6" "--release" "--frozen" "--features" "panic-unwind jemalloc backtrace" "--manifest-p
ath" "/tmp/guix-build-rust-1.24.1.drv-0/rustc-1.24.1-src/src/libstd/Cargo.toml" "-p" "std:0.0.0" "-p" "libc:0.0.0" "-p" "alloc_system:0.0.0" "-p" "panic_abort:0.0.0" "-p" "compiler_builtins:0.0.0" "-p" "alloc:0.0.0" "-p" "std_unicode:0.0.0" "-p" "unwind:0
.0.0" "-p" "core:0.0.0" "--"
expected success, got: exit code: 101


failed to run: /tmp/guix-build-rust-1.24.1.drv-0/rustc-1.24.1-src/build/bootstrap/debug/bootstrap test
Build completed unsuccessfully in 1:53:33
phase `check' failed after 6813.3 seconds


This is ultimately no different from master, where rust currently fails
somewhere during the test stage.

-- 
Efraim Flashner   <efraim@flashner.co.il>   אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D  14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted

[-- Attachment #1.2: 0001-don-t-build-native-on-arm.patch --]
[-- Type: text/plain, Size: 1033 bytes --]

From d3f6c14535163be65aedfc761b747c4386387537 Mon Sep 17 00:00:00 2001
From: Efraim Flashner <efraim@flashner.co.il>
Date: Thu, 22 Mar 2018 09:14:53 +0200
Subject: [PATCH] don't build native on arm*

---
 gnu/packages/rust.scm | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index ae81ff8e0..5c5a61594 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -259,6 +259,11 @@ rustc-bootstrap and cargo-bootstrap packages.")
              ;; guix llvm-3.9.1 package installs only shared libraries
              (setenv "LLVM_LINK_SHARED" "1")
              #t))
+         (add-after 'unpack 'dont-build-native
+           (lambda _
+             (substitute* "src/binaryen/CMakeLists.txt"
+               (("ADD_COMPILE_FLAG\\(\\\"-march=native\\\"\\)") ""))
+             #t))
          (add-after 'unpack 'patch-tests
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((bash (assoc-ref inputs "bash")))
-- 
2.16.2


[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-20 10:56       ` Ricardo Wurmus
@ 2018-03-22 21:01         ` Nikolai Merinov
  2018-03-27  7:41           ` Ludovic Courtès
  0 siblings, 1 reply; 19+ messages in thread
From: Nikolai Merinov @ 2018-03-22 21:01 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: 30831

[-- Attachment #1: Type: text/plain, Size: 1484 bytes --]

Ricardo Wurmus <rekado@elephly.net> writes:

> Ludovic Courtès <ludo@gnu.org> writes:
>
>> Hello,
>>
>> Nikolai Merinov <nikolai.merinov@member.fsf.org> skribis:
>>
>>> Actually there is two ways to achieve this:
>>> 1. Constantly update bootsrap binaries version.
>>> 2. For each new release create new package. As result we'll be able to
>>> use old rust release to build each new rust release. E.g. we can use
>>> 1.21.0 bootstrap binaries, then build 1.22.0 rust and use it to build
>>> 1.23.0 rust and then use it to build 1.24.1 rust.
>>>
>>> Which way is preferable? 
>>
>> Like I wrote, I would prefer option #2, so as to increase “binary
>> diversity” and not rely on builds made by upstream.
>>
>> This obviously relates to <http://bootstrappable.org/>.  Ricardo, what’s
>> your take on this?
>
> I agree.  In the long run, however, I’d prefer for Rust to be
> bootstrapped through one of the alternative implementations.  Then we
> don’t need to keep a long chain of older versions.
>
> Currently, however, I don’t see a way around it.

Hi, I prepared proof-of-concept solution with rust-bootstrap frozed on
1.22.1 release. Do you think suggested code with "split all code to
small steps and remove fixed issues in new releases" is correct way to
provide series of releases? Or it will be better to copy builder code to
state it directly that this specific modification is tested on each rust
release?

Regards,
Nikolai


[-- Attachment #2: 0001-gnu-rust-Update-rust-to-1.24.1-froze-bootstrap-on-1..patch --]
[-- Type: text/x-patch, Size: 66792 bytes --]

From 1065cf1e2f900f2d7da5512df60278396063fe73 Mon Sep 17 00:00:00 2001
From: Nikolai Merinov <nikolai.merinov@member.fsf.org>
Date: Wed, 14 Mar 2018 00:06:53 +0500
Subject: [PATCH] gnu: rust: Update rust to 1.24.1, froze bootstrap on 1.22.1
 release
To: guix-patches@gnu.org

* gnu/packages/rust.scm (rust-bootstrap): Froze bootstrap version on 1.22.1
rust release. Reorganize bootstrap binaries to match new "rust" package
structure with two ouputs "out" with rust compiler and "cargo" with cargo
package manager.
(rust-1.23): Rename "rustc" to "rust". Update sha256 for tarball. Add cargo
related dependencies. Install "cargo" as separate "rust" output. Remove
substitutes for parts that was fixed in "rustc" source code. Install
documentation to separate "doc" output. Update configuration according to
changes in "rustc" source code.
(rust): Create package for 1.24.1 rust release based on rust-1.23 release.
* guix/build-system/cargo.scm (default-rust): Replace "default-cargo" and
"default-rustc" functions with "default-rust" function.
(cargo-build-system): Take only one package as "rust" source. Use "rustc" from
default output of "rust" package, use "cargo" as "cargo" output of "rust"
package.

Cargo was moved from separate package to "rust" output because starting from
0.25.0 release cargo have no "Cargo.lock" anymore. According to
https://github.com/rust-lang/cargo/commit/5c9665f41c6b4d3b99d3b9f8b48a286f5f154692
commit message "cargo" used as "rust" dependency and stable version for
"cargo" provided through "Cargo.lock" file from "rust-lang/rust"
repository. As result only way to get stable version of cargo is build it from
"rust" sources.
---
 gnu/packages/rust.scm       | 1348 ++++---------------------------------------
 guix/build-system/cargo.scm |   21 +-
 2 files changed, 113 insertions(+), 1256 deletions(-)

diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 1ba857d36..003f6812d 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2016 Eric Le Bihan <eric.le.bihan.dev@free.fr>
 ;;; Copyright © 2016 ng0 <ng0@infotropique.org>
 ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
-;;; Copyright © 2017 Nikolai Merinov <nikolai.merinov@member.fsf.org>
+;;; Copyright © 2017, 2018 Nikolai Merinov <nikolai.merinov@member.fsf.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
@@ -46,71 +46,48 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (guix download)
-  #:use-module (guix base16)      ;for generated "cargo" native-inputs
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module ((guix build utils) #:select (alist-replace))
+  #:use-module (guix utils)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-26))
 
-;; Should be one less than the current released version.
-(define %rust-bootstrap-binaries-version "1.21.0")
-
-(define %rust-bootstrap-binaries
-  (origin
-    (method url-fetch)
-    (uri (string-append
-          "https://static.rust-lang.org/dist/"
-          "rust-" %rust-bootstrap-binaries-version
-          "-" %host-type ".tar.gz"))
-    (sha256
-     (base32
-      (match %host-type
-        ("i686-unknown-linux-gnu"
-         "1vnvqwz30hvyjcfr1f602lg43v2vlqjr3yhb5vr8xnrcc07yvjmp")
-        ("x86_64-unknown-linux-gnu"
-         "1s0866qcy0645bqhsbs3pvk2hi52ps8jzs7x096w0as033h707ml")
-        ("armv7-unknown-linux-gnueabihf"
-         "1ml8fjq2b6j2vn1j314w93pf4wjl97n1mbz609h3i7md0zqscvs1")
-        ("aarch64-unknown-linux-gnu"
-         "1hv4m2m7xjcph39r6baryfg23hjcr4sbsrfnd1lh0wn67k2fc7j9")
-        ("mips64el-unknown-linux-gnuabi64"
-         "0p7fzkfcqg5yvj86v434z351dp7s7pgns8nzxj0fz3hmbfbvlvn9")
-        (_ "")))))) ; Catch-all for other systems.
-
 (define %cargo-reference-project-file "/dev/null")
 (define %cargo-reference-hash
   "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
 
-(define (increment-rust-version rust-version major patch)
-  (match (string-split rust-version #\.)
-    (("1" minor _)
-     (string-append (number->string major) "."
-                    (number->string (+ (string->number minor) 1)) "."
-                    (number->string patch)))))
-
-(define* (cargo-version rustc-version #:optional (patch 0))
-  ;; Computes the cargo version that matches the rustc version.
-  ;; This has so far continued to follow a predictable pattern:
-  ;; https://github.com/rust-lang/cargo/blob/50a46f47/README.md#releases
-  (increment-rust-version rustc-version 0 patch))
-
-(define* (rustc-version bootstrap-version #:optional (patch 0))
-  ;; Computes the rustc version that can be compiled from a given
-  ;; other rustc version. The patch argument is for selecting
-  ;; a stability or security fix. 1.11.0 -> 1.12.1 -> 1.13.0
-  (increment-rust-version bootstrap-version 1 patch))
-
-(define rustc-bootstrap
+(define rust-bootstrap
   (package
-    (name "rustc-bootstrap")
-    (version %rust-bootstrap-binaries-version)
-    (source %rust-bootstrap-binaries)
+    (name "rust-bootstrap")
+    (version "1.22.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+ "https://static.rust-lang.org/dist/"
+                    "rust-" version "-" %host-type ".tar.gz"))
+              (sha256
+               (base32
+                (match %host-type
+                  ("i686-unknown-linux-gnu"
+                   "15zqbx86nm13d5vq2gm69b7av4vg479f74b5by64hs3bcwwm08pr")
+                  ("x86_64-unknown-linux-gnu"
+                   "1yll78x6b3abnvgjf2b66gvp6mmcb9y9jdiqcwhmgc0z0i0fix4c")
+                  ("armv7-unknown-linux-gnueabihf"
+                   "138a8l528kzp5wyk1mgjaxs304ac5ms8vlpq0ggjaznm6bn2j7a5")
+                  ("aarch64-unknown-linux-gnu"
+                   "0z6m9m1rx4d96nvybbfmpscq4dv616m615ijy16d5wh2vx0p4na8")
+                  ("mips64el-unknown-linux-gnuabi64"
+                   "07k4pcv7jvfa48cscdj8752lby7m7xdl88v3a6na1vs675lhgja2")
+                  (_ ""))))))
     (build-system gnu-build-system)
     (native-inputs
      `(("patchelf" ,patchelf)))
     (inputs
-     `(("gcc:lib" ,(canonical-package gcc) "lib")
+     `(("gcc" ,(canonical-package gcc))
+       ("gcc:lib" ,(canonical-package gcc) "lib")
        ("zlib" ,zlib)))
+    (outputs '("out" "cargo"))
     (arguments
      `(#:tests? #f
        #:strip-binaries? #f
@@ -121,115 +98,62 @@
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
+                    (cargo-out (assoc-ref outputs "cargo"))
                     (gcc:lib (assoc-ref inputs "gcc:lib"))
                     (libc (assoc-ref inputs "libc"))
                     (zlib (assoc-ref inputs "zlib"))
                     (ld-so (string-append libc ,(glibc-dynamic-linker)))
                     (rpath (string-append out "/lib:" zlib "/lib:"
                                           libc "/lib:" gcc:lib "/lib"))
+                    (cargo-rpath (string-append cargo-out "/lib:" libc "/lib:"
+                                                gcc:lib "/lib"))
                     (rustc (string-append out "/bin/rustc"))
-                    (rustdoc (string-append out "/bin/rustdoc")))
+                    (rustdoc (string-append out "/bin/rustdoc"))
+                    (cargo (string-append cargo-out "/bin/cargo"))
+                    (gcc (assoc-ref inputs "gcc")))
+               ;; Install rustc/rustdoc
                (system* "bash" "install.sh"
                         (string-append "--prefix=" out)
                         (string-append "--components=rustc,"
                                        "rust-std-" %host-type))
+               ;; Instal cargo
+               (system* "bash" "install.sh"
+                        (string-append "--prefix=" cargo-out)
+                        (string-append "--components=cargo"))
                (for-each (lambda (file)
                            (system* "patchelf" "--set-rpath" rpath file))
                          (cons* rustc rustdoc (find-files out "\\.so$")))
+               (system* "patchelf" "--set-rpath" cargo-rpath cargo)
                (for-each (lambda (file)
                            (system* "patchelf" "--set-interpreter" ld-so file))
-                         (list rustc rustdoc))))))))
+                         (list rustc rustdoc cargo))
+               ;; Rust requires a C toolchain for linking. The prebuilt
+               ;; binaries expect a compiler called cc. Thus symlink gcc
+               ;; to cc.
+               (symlink (string-append gcc "/bin/gcc")
+                        (string-append out "/bin/cc"))))))))
     (home-page "https://www.rust-lang.org")
-    (synopsis "Prebuilt rust compiler")
-    (description "This package provides a pre-built @command{rustc} compiler,
-which can in turn be used to build the final Rust compiler.")
+    (synopsis "Prebuilt rust compiler and cargo package manager")
+    (description "This package provides a pre-built @command{rustc} compiler
+and a pre-built @command{cargo} package manaer, which can
+in turn be used to build the final Rust.")
     (license license:asl2.0)))
 
-(define cargo-bootstrap
-  (package
-    (name "cargo-bootstrap")
-    (version (cargo-version %rust-bootstrap-binaries-version 1))
-    (source %rust-bootstrap-binaries)
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("patchelf" ,patchelf)))
-    (inputs
-     `(("gcc:lib" ,(canonical-package gcc) "lib")))
-    (arguments
-     `(#:tests? #f
-       #:strip-binaries? #f
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (delete 'build)
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (gcc:lib (assoc-ref inputs "gcc:lib"))
-                    (libc (assoc-ref inputs "libc"))
-                    (ld-so (string-append libc ,(glibc-dynamic-linker)))
-                    (rpath (string-append out "/lib:" libc "/lib:"
-                                          gcc:lib "/lib"))
-                    (cargo (string-append out "/bin/cargo")))
-               (system* "bash" "install.sh"
-                        (string-append "--prefix=" out)
-                        "--components=cargo")
-               (system* "patchelf"
-                        "--set-interpreter" ld-so
-                        "--set-rpath" rpath
-                        cargo)))))))
-    (home-page "https://www.rust-lang.org")
-    (synopsis "Prebuilt cargo package manager")
-    (description "This package provides a pre-built @command{cargo} package
-manager, which is required to build itself.")
-    (license license:asl2.0)))
-
-(define rust-bootstrap
-  (package
-    (name "rust-bootstrap")
-    (version %rust-bootstrap-binaries-version)
-    (source #f)
-    (build-system trivial-build-system)
-    (propagated-inputs
-     `(("rustc-bootstrap" ,rustc-bootstrap)
-       ("cargo-bootstrap" ,cargo-bootstrap)
-       ("gcc" ,(canonical-package gcc))))
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((out (assoc-ref %outputs "out"))
-               (gcc (assoc-ref %build-inputs "gcc")))
-           (mkdir-p (string-append out "/bin"))
-           ;; Rust requires a C toolchain for linking. The prebuilt
-           ;; binaries expect a compiler called cc. Thus symlink gcc
-           ;; to cc.
-           (symlink (string-append gcc "/bin/gcc")
-                    (string-append out "/bin/cc"))))))
-    (home-page "https://www.rust-lang.org")
-    (synopsis "Rust bootstrapping meta package")
-    (description "Meta package for a rust environment. Provides pre-compiled
-rustc-bootstrap and cargo-bootstrap packages.")
-    (license license:asl2.0)))
 \f
-(define-public rustc
+(define (rust-source version hash)
+  (origin
+    (method url-fetch)
+    (uri (string-append "https://static.rust-lang.org/dist/"
+                        "rustc-" version "-src.tar.gz"))
+    (sha256 (base32 hash))
+    (modules '((guix build utils)))
+    (snippet '(begin (delete-file-recursively "src/llvm") #t))))
+
+(define-public rust-1.23
   (package
-    (name "rustc")
-    (version (rustc-version %rust-bootstrap-binaries-version 1))
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://static.rust-lang.org/dist/"
-                    "rustc-" version "-src.tar.gz"))
-              (sha256
-               (base32
-                "1lrzzp0nh7s61wgfs2h6ilaqi6iq89f1pd1yaf65l87bssyl4ylb"))
-              (modules '((guix build utils)))
-              (snippet
-               `(begin
-                  (delete-file-recursively "src/llvm")
-                  #t))))
+    (name "rust")
+    (version "1.23.0")
+    (source (rust-source version "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l"))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison) ; For the tests
@@ -239,11 +163,16 @@ rustc-bootstrap and cargo-bootstrap packages.")
        ("git" ,git)
        ("procps" ,procps) ; For the tests
        ("python-2" ,python-2)
-       ("rust-bootstrap" ,rust-bootstrap)
+       ("rustc-bootstrap" ,rust-bootstrap)
+       ("cargo-bootstrap" ,rust-bootstrap "cargo")
+       ("pkg-config" ,pkg-config) ; For "cargo"
        ("which" ,which)))
     (inputs
      `(("jemalloc" ,jemalloc-4.5.0)
-       ("llvm" ,llvm-3.9.1)))
+       ("llvm" ,llvm-3.9.1)
+       ("openssl" ,openssl)
+       ("libcurl" ,curl))) ; For "cargo"
+    (outputs '("out" "doc" "cargo"))
     (arguments
      `(#:imported-modules ,%cargo-build-system-modules ;for `generate-checksums'
        #:phases
@@ -258,9 +187,6 @@ rustc-bootstrap and cargo-bootstrap packages.")
          (add-after 'unpack 'patch-tests
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((bash (assoc-ref inputs "bash")))
-               (substitute* "src/build_helper/lib.rs"
-                 ;; In same folder as gcc there is only "gcc-ar" utility
-                 (("file\\.push_str\\(\"ar\"\\);") "file.push_str(\"gcc-ar\");"))
                (substitute* "src/libstd/process.rs"
                  ;; The newline is intentional.
                  ;; There's a line length "tidy" check in Rust which would
@@ -276,13 +202,15 @@ rustc-bootstrap and cargo-bootstrap packages.")
                ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.
                ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>
                (delete-file-recursively "src/test/run-make/linker-output-non-utf8")
-               (substitute* "src/build_helper/lib.rs"
-                 ;; Bug in Rust code.
-                 ;; Current implementation assume that if dst not exist then it's mtime
-                 ;; is 0, but in same time "src" have 0 mtime in guix build!
-                 (("let threshold = mtime\\(dst\\);")
-                  "if !dst.exists() {\nreturn false\n}\n let threshold = mtime(dst);"))
                #t)))
+         (add-after 'patch-tests 'fix-mtime-bug
+           (lambda* (#:key #:allow-other-keys)
+             (substitute* "src/build_helper/lib.rs"
+               ;; Bug in Rust code.
+               ;; Current implementation assume that if dst not exist then it's mtime
+               ;; is 0, but in same time "src" have 0 mtime in guix build!
+               (("let threshold = mtime\\(dst\\);")
+                "if !dst.exists() {\nreturn false\n}\n let threshold = mtime(dst);"))))
          (add-after 'patch-source-shebangs 'patch-cargo-checksums
            (lambda* (#:key inputs #:allow-other-keys)
              (substitute* "src/Cargo.lock"
@@ -302,6 +230,7 @@ rustc-bootstrap and cargo-bootstrap packages.")
          (replace 'configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc"))
                     (gcc (assoc-ref inputs "gcc"))
                     (gdb (assoc-ref inputs "gdb"))
                     (binutils (assoc-ref inputs "binutils"))
@@ -317,15 +246,18 @@ rustc-bootstrap and cargo-bootstrap packages.")
 [build]
 cargo = \"" cargo "/bin/cargo" "\"
 rustc = \"" rustc "/bin/rustc" "\"
+docs = true
 python = \"" python "/bin/python2" "\"
 gdb = \"" gdb "/bin/gdb" "\"
 vendor = true
 submodules = false
 [install]
 prefix = \"" out "\"
+docdir = \"" doc "/share/doc/rust" "\"
+sysconfdir = \"etc\"
+localstatedir = \"var/lib\"
 [rust]
 default-linker = \"" gcc "/bin/gcc" "\"
-default-ar = \"" binutils "/bin/ar" "\"
 channel = \"stable\"
 rpath = true
 # There is 2 failed codegen tests:
@@ -336,6 +268,7 @@ codegen-tests = false
 llvm-config = \"" llvm "/bin/llvm-config" "\"
 cc = \"" gcc "/bin/gcc" "\"
 cxx = \"" gcc "/bin/g++" "\"
+ar = \"" binutils "/bin/ar" "\"
 jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 [dist]
 ") port)))
@@ -350,13 +283,21 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
              #t))
          (replace 'build
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (zero? (system* "./x.py" "build"))))
+             (and (zero? (system* "./x.py" "build"))
+                  (zero? (system* "./x.py" "build" "src/tools/cargo")))))
          (replace 'check
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (zero? (system* "./x.py" "test"))))
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
-             (zero? (system* "./x.py" "install"))))
+             (and (zero? (system* "./x.py" "install"))
+                  (begin
+                   (substitute* "config.toml"
+                     ;; replace prefix to specific output
+                     (("prefix = \"[^\"]*\"")
+                      (string-append "prefix = \"" (assoc-ref outputs "cargo") "\"")))
+                   (set-file-time "config.toml" (stat "README.md"))
+                   (zero? (system* "./x.py" "install" "cargo"))))))
          (add-after 'install 'wrap-rustc
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
@@ -376,1095 +317,18 @@ safety and thread safety guarantees.")
     ;; Dual licensed.
     (license (list license:asl2.0 license:expat))))
 
-;; This tries very hard not to get into a cyclic dependency like this:
-;;   cargo <- cargo-build-system <- cargo.
-(define-public cargo
+(define-public rust
   (package
-    (name "cargo")
-    (version (cargo-version (rustc-version %rust-bootstrap-binaries-version) 0))
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/rust-lang/cargo/archive/"
-                                  version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0kr7rml7v2bm7zl8jcb3056h63zpyy9m08s212i8vfwxf6lf5fzl"))))
-    (build-system cargo-build-system)
-    (propagated-inputs
-     `(("cmake" ,cmake)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("curl" ,curl)
-       ("libgit2" ,libgit2)
-       ("libssh2" ,libssh2)
-       ("openssl" ,openssl)
-       ("python-2" ,python-2)
-       ("zlib" ,zlib)))
+    (inherit rust-1.23)
+    (version "1.24.1")
+    (source
+     (rust-source version
+                  "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y"))
     (native-inputs
-     `(("git" ,git) ; required for tests
-       ;; Next dependencies generated with next command:
-       ;; cat Cargo.lock | awk '
-       ;;   /^"checksum/
-       ;;   { oname=name=$2; vers=$3; hash=$6;
-       ;;     if (ns[name] != 1) { ns[name]=1; } else { name = name "-" vers; }
-       ;;     print "       (\"rust-" name "\"";
-       ;;     print "        ,(origin";
-       ;;     print "           (method url-fetch)";
-       ;;     print "           (uri (crate-uri \"" oname "\" \"" vers "\"))";
-       ;;     print "           (file-name \"rust-" oname "\-\" vers "\")
-       ;;     print "           (sha256";
-       ;;     print "            (base16-string->bytevector";
-       ;;     print "             " hash "))))"
-       ;;   }'
-       ("rust-advapi32-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "advapi32-sys" "0.2.0"))
-           (file-name "rust-advapi32-sys-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "e06588080cb19d0acb6739808aafa5f26bfb2ca015b2b6370028b44cf7cb8a9a"))))
-       ("rust-aho-corasick"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "aho-corasick" "0.5.3"))
-           (file-name "rust-aho-corasick-0.5.3")
-           (sha256
-            (base16-string->bytevector
-             "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"))))
-       ("rust-aho-corasick-0.6.3"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "aho-corasick" "0.6.3"))
-           (file-name "rust-aho-corasick-0.6.3")
-           (sha256
-            (base16-string->bytevector
-             "500909c4f87a9e52355b26626d890833e9e1d53ac566db76c36faa984b889699"))))
-       ("rust-atty"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "atty" "0.2.3"))
-           (file-name "rust-atty-0.2.3")
-           (sha256
-            (base16-string->bytevector
-             "21e50800ec991574876040fff8ee46b136a53e985286fbe6a3bdfe6421b78860"))))
-       ("rust-backtrace"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "backtrace" "0.3.3"))
-           (file-name "rust-backtrace-0.3.3")
-           (sha256
-            (base16-string->bytevector
-             "99f2ce94e22b8e664d95c57fff45b98a966c2252b60691d0b7aeeccd88d70983"))))
-       ("rust-backtrace-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "backtrace-sys" "0.1.14"))
-           (file-name "rust-backtrace-sys-0.1.14")
-           (sha256
-            (base16-string->bytevector
-             "c63ea141ef8fdb10409d0f5daf30ac51f84ef43bff66f16627773d2a292cd189"))))
-       ("rust-bitflags"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "bitflags" "0.7.0"))
-           (file-name "rust-bitflags-0.7.0")
-           (sha256
-            (base16-string->bytevector
-             "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d"))))
-       ("rust-bitflags-0.9.1"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "bitflags" "0.9.1"))
-           (file-name "rust-bitflags-0.9.1")
-           (sha256
-            (base16-string->bytevector
-             "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5"))))
-       ("rust-bufstream"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "bufstream" "0.1.3"))
-           (file-name "rust-bufstream-0.1.3")
-           (sha256
-            (base16-string->bytevector
-             "f2f382711e76b9de6c744cc00d0497baba02fb00a787f088c879f01d09468e32"))))
-       ("rust-cc"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "cc" "1.0.0"))
-           (file-name "rust-cc-1.0.0")
-           (sha256
-            (base16-string->bytevector
-             "7db2f146208d7e0fbee761b09cd65a7f51ccc38705d4e7262dad4d73b12a76b1"))))
-       ("rust-cfg-if"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "cfg-if" "0.1.2"))
-           (file-name "rust-cfg-if-0.1.2")
-           (sha256
-            (base16-string->bytevector
-             "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"))))
-       ("rust-cmake"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "cmake" "0.1.26"))
-           (file-name "rust-cmake-0.1.26")
-           (sha256
-            (base16-string->bytevector
-             "357c07e7a1fc95732793c1edb5901e1a1f305cfcf63a90eb12dbd22bdb6b789d"))))
-       ("rust-commoncrypto"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "commoncrypto" "0.2.0"))
-           (file-name "rust-commoncrypto-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "d056a8586ba25a1e4d61cb090900e495952c7886786fc55f909ab2f819b69007"))))
-       ("rust-commoncrypto-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "commoncrypto-sys" "0.2.0"))
-           (file-name "rust-commoncrypto-sys-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "1fed34f46747aa73dfaa578069fd8279d2818ade2b55f38f22a9401c7f4083e2"))))
-       ("rust-conv"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "conv" "0.3.3"))
-           (file-name "rust-conv-0.3.3")
-           (sha256
-            (base16-string->bytevector
-             "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299"))))
-       ("rust-core-foundation"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "core-foundation" "0.4.4"))
-           (file-name "rust-core-foundation-0.4.4")
-           (sha256
-            (base16-string->bytevector
-             "5909502e547762013619f4c4e01cc7393c20fe2d52d7fa471c1210adb2320dc7"))))
-       ("rust-core-foundation-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "core-foundation-sys" "0.4.4"))
-           (file-name "rust-core-foundation-sys-0.4.4")
-           (sha256
-            (base16-string->bytevector
-             "bc9fb3d6cb663e6fd7cf1c63f9b144ee2b1e4a78595a0451dd34bff85b9a3387"))))
-       ("rust-crossbeam"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "crossbeam" "0.2.10"))
-           (file-name "rust-crossbeam-0.2.10")
-           (sha256
-            (base16-string->bytevector
-             "0c5ea215664ca264da8a9d9c3be80d2eaf30923c259d03e870388eb927508f97"))))
-       ("rust-crossbeam-0.3.0"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "crossbeam" "0.3.0"))
-           (file-name "rust-crossbeam-0.3.0")
-           (sha256
-            (base16-string->bytevector
-             "8837ab96533202c5b610ed44bc7f4183e7957c1c8f56e8cc78bb098593c8ba0a"))))
-       ("rust-crypto-hash"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "crypto-hash" "0.3.0"))
-           (file-name "rust-crypto-hash-0.3.0")
-           (sha256
-            (base16-string->bytevector
-             "34903878eec1694faf53cae8473a088df333181de421d4d3d48061d6559fe602"))))
-       ("rust-curl"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "curl" "0.4.8"))
-           (file-name "rust-curl-0.4.8")
-           (sha256
-            (base16-string->bytevector
-             "7034c534a1d7d22f7971d6088aa9d281d219ef724026c3428092500f41ae9c2c"))))
-       ("rust-curl-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "curl-sys" "0.3.15"))
-           (file-name "rust-curl-sys-0.3.15")
-           (sha256
-            (base16-string->bytevector
-             "4bee31aa3a079d5f3ff9579ea4dcfb1b1a17a40886f5f467436d383e78134b55"))))
-       ("rust-custom_derive"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "custom_derive" "0.1.7"))
-           (file-name "rust-custom_derive-0.1.7")
-           (sha256
-            (base16-string->bytevector
-             "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9"))))
-       ("rust-dbghelp-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "dbghelp-sys" "0.2.0"))
-           (file-name "rust-dbghelp-sys-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "97590ba53bcb8ac28279161ca943a924d1fd4a8fb3fa63302591647c4fc5b850"))))
-       ("rust-docopt"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "docopt" "0.8.1"))
-           (file-name "rust-docopt-0.8.1")
-           (sha256
-            (base16-string->bytevector
-             "3b5b93718f8b3e5544fcc914c43de828ca6c6ace23e0332c6080a2977b49787a"))))
-       ("rust-dtoa"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "dtoa" "0.4.2"))
-           (file-name "rust-dtoa-0.4.2")
-           (sha256
-            (base16-string->bytevector
-             "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab"))))
-       ("rust-env_logger"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "env_logger" "0.4.3"))
-           (file-name "rust-env_logger-0.4.3")
-           (sha256
-            (base16-string->bytevector
-             "3ddf21e73e016298f5cb37d6ef8e8da8e39f91f9ec8b0df44b7deb16a9f8cd5b"))))
-       ("rust-error-chain"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "error-chain" "0.11.0"))
-           (file-name "rust-error-chain-0.11.0")
-           (sha256
-            (base16-string->bytevector
-             "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3"))))
-       ("rust-filetime"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "filetime" "0.1.12"))
-           (file-name "rust-filetime-0.1.12")
-           (sha256
-            (base16-string->bytevector
-             "6ab199bf38537c6f38792669e081e0bb278b9b7405bba2642e4e5d15bf732c0e"))))
-       ("rust-flate2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "flate2" "0.2.20"))
-           (file-name "rust-flate2-0.2.20")
-           (sha256
-            (base16-string->bytevector
-             "e6234dd4468ae5d1e2dbb06fe2b058696fdc50a339c68a393aefbf00bc81e423"))))
-       ("rust-fnv"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "fnv" "1.0.5"))
-           (file-name "rust-fnv-1.0.5")
-           (sha256
-            (base16-string->bytevector
-             "6cc484842f1e2884faf56f529f960cc12ad8c71ce96cc7abba0a067c98fee344"))))
-       ("rust-foreign-types"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "foreign-types" "0.2.0"))
-           (file-name "rust-foreign-types-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "3e4056b9bd47f8ac5ba12be771f77a0dae796d1bbaaf5fd0b9c2d38b69b8a29d"))))
-       ("rust-fs2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "fs2" "0.4.2"))
-           (file-name "rust-fs2-0.4.2")
-           (sha256
-            (base16-string->bytevector
-             "9ab76cfd2aaa59b7bf6688ad9ba15bbae64bff97f04ea02144cfd3443e5c2866"))))
-       ("rust-git2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "git2" "0.6.8"))
-           (file-name "rust-git2-0.6.8")
-           (sha256
-            (base16-string->bytevector
-             "0c1c0203d653f4140241da0c1375a404f0a397249ec818cd2076c6280c50f6fa"))))
-       ("rust-git2-curl"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "git2-curl" "0.7.0"))
-           (file-name "rust-git2-curl-0.7.0")
-           (sha256
-            (base16-string->bytevector
-             "68676bc784bf0bef83278898929bf64a251e87c0340723d0b93fa096c9c5bf8e"))))
-       ("rust-glob"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "glob" "0.2.11"))
-           (file-name "rust-glob-0.2.11")
-           (sha256
-            (base16-string->bytevector
-             "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"))))
-       ("rust-globset"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "globset" "0.2.0"))
-           (file-name "rust-globset-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "feeb1b6840809ef5efcf7a4a990bc4e1b7ee3df8cf9e2379a75aeb2ba42ac9c3"))))
-       ("rust-hamcrest"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "hamcrest" "0.1.1"))
-           (file-name "rust-hamcrest-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "bf088f042a467089e9baa4972f57f9247e42a0cc549ba264c7a04fbb8ecb89d4"))))
-       ("rust-hex"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "hex" "0.2.0"))
-           (file-name "rust-hex-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "d6a22814455d41612f41161581c2883c0c6a1c41852729b17d5ed88f01e153aa"))))
-       ("rust-home"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "home" "0.3.0"))
-           (file-name "rust-home-0.3.0")
-           (sha256
-            (base16-string->bytevector
-             "9f25ae61099d8f3fee8b483df0bd4ecccf4b2731897aad40d50eca1b641fe6db"))))
-       ("rust-idna"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "idna" "0.1.4"))
-           (file-name "rust-idna-0.1.4")
-           (sha256
-            (base16-string->bytevector
-             "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d"))))
-       ("rust-ignore"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "ignore" "0.2.2"))
-           (file-name "rust-ignore-0.2.2")
-           (sha256
-            (base16-string->bytevector
-             "b3fcaf2365eb14b28ec7603c98c06cc531f19de9eb283d89a3dff8417c8c99f5"))))
-       ("rust-itoa"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "itoa" "0.3.4"))
-           (file-name "rust-itoa-0.3.4")
-           (sha256
-            (base16-string->bytevector
-             "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c"))))
-       ("rust-jobserver"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "jobserver" "0.1.6"))
-           (file-name "rust-jobserver-0.1.6")
-           (sha256
-            (base16-string->bytevector
-             "443ae8bc0af6c106e6e8b77e04684faecc1a5ce94e058f4c2b0a037b0ea1b133"))))
-       ("rust-kernel32-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "kernel32-sys" "0.2.2"))
-           (file-name "rust-kernel32-sys-0.2.2")
-           (sha256
-            (base16-string->bytevector
-             "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"))))
-       ("rust-lazy_static"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "lazy_static" "0.2.9"))
-           (file-name "rust-lazy_static-0.2.9")
-           (sha256
-            (base16-string->bytevector
-             "c9e5e58fa1a4c3b915a561a78a22ee0cac6ab97dca2504428bc1cb074375f8d5"))))
-       ("rust-libc"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "libc" "0.2.31"))
-           (file-name "rust-libc-0.2.31")
-           (sha256
-            (base16-string->bytevector
-             "d1419b2939a0bc44b77feb34661583c7546b532b192feab36249ab584b86856c"))))
-       ("rust-libgit2-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "libgit2-sys" "0.6.16"))
-           (file-name "rust-libgit2-sys-0.6.16")
-           (sha256
-            (base16-string->bytevector
-             "6f74b4959cef96898f5123148724fc7dee043b9a6b99f219d948851bfbe53cb2"))))
-       ("rust-libssh2-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "libssh2-sys" "0.2.6"))
-           (file-name "rust-libssh2-sys-0.2.6")
-           (sha256
-            (base16-string->bytevector
-             "0db4ec23611747ef772db1c4d650f8bd762f07b461727ec998f953c614024b75"))))
-       ("rust-libz-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "libz-sys" "1.0.17"))
-           (file-name "rust-libz-sys-1.0.17")
-           (sha256
-            (base16-string->bytevector
-             "44ebbc760fd2d2f4d93de09a0e13d97e057612052e871da9985cedcb451e6bd5"))))
-       ("rust-log"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "log" "0.3.8"))
-           (file-name "rust-log-0.3.8")
-           (sha256
-            (base16-string->bytevector
-             "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b"))))
-       ("rust-magenta"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "magenta" "0.1.1"))
-           (file-name "rust-magenta-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "4bf0336886480e671965f794bc9b6fce88503563013d1bfb7a502c81fe3ac527"))))
-       ("rust-magenta-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "magenta-sys" "0.1.1"))
-           (file-name "rust-magenta-sys-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "40d014c7011ac470ae28e2f76a02bfea4a8480f73e701353b49ad7a8d75f4699"))))
-       ("rust-matches"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "matches" "0.1.6"))
-           (file-name "rust-matches-0.1.6")
-           (sha256
-            (base16-string->bytevector
-             "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376"))))
-       ("rust-memchr"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "memchr" "0.1.11"))
-           (file-name "rust-memchr-0.1.11")
-           (sha256
-            (base16-string->bytevector
-             "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"))))
-       ("rust-memchr-1.0.1"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "memchr" "1.0.1"))
-           (file-name "rust-memchr-1.0.1")
-           (sha256
-            (base16-string->bytevector
-             "1dbccc0e46f1ea47b9f17e6d67c5a96bd27030519c519c9c91327e31275a47b4"))))
-       ("rust-miniz-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "miniz-sys" "0.1.10"))
-           (file-name "rust-miniz-sys-0.1.10")
-           (sha256
-            (base16-string->bytevector
-             "609ce024854aeb19a0ef7567d348aaa5a746b32fb72e336df7fcc16869d7e2b4"))))
-       ("rust-miow"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "miow" "0.2.1"))
-           (file-name "rust-miow-0.2.1")
-           (sha256
-            (base16-string->bytevector
-             "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"))))
-       ("rust-net2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "net2" "0.2.31"))
-           (file-name "rust-net2-0.2.31")
-           (sha256
-            (base16-string->bytevector
-             "3a80f842784ef6c9a958b68b7516bc7e35883c614004dd94959a4dca1b716c09"))))
-       ("rust-num"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num" "0.1.40"))
-           (file-name "rust-num-0.1.40")
-           (sha256
-            (base16-string->bytevector
-             "a311b77ebdc5dd4cf6449d81e4135d9f0e3b153839ac90e648a8ef538f923525"))))
-       ("rust-num-bigint"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-bigint" "0.1.40"))
-           (file-name "rust-num-bigint-0.1.40")
-           (sha256
-            (base16-string->bytevector
-             "8fd0f8dbb4c0960998958a796281d88c16fbe68d87b1baa6f31e2979e81fd0bd"))))
-       ("rust-num-complex"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-complex" "0.1.40"))
-           (file-name "rust-num-complex-0.1.40")
-           (sha256
-            (base16-string->bytevector
-             "503e668405c5492d67cf662a81e05be40efe2e6bcf10f7794a07bd9865e704e6"))))
-       ("rust-num-integer"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-integer" "0.1.35"))
-           (file-name "rust-num-integer-0.1.35")
-           (sha256
-            (base16-string->bytevector
-             "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba"))))
-       ("rust-num-iter"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-iter" "0.1.34"))
-           (file-name "rust-num-iter-0.1.34")
-           (sha256
-            (base16-string->bytevector
-             "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01"))))
-       ("rust-num-rational"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-rational" "0.1.39"))
-           (file-name "rust-num-rational-0.1.39")
-           (sha256
-            (base16-string->bytevector
-             "288629c76fac4b33556f4b7ab57ba21ae202da65ba8b77466e6d598e31990790"))))
-       ("rust-num-traits"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-traits" "0.1.40"))
-           (file-name "rust-num-traits-0.1.40")
-           (sha256
-            (base16-string->bytevector
-             "99843c856d68d8b4313b03a17e33c4bb42ae8f6610ea81b28abe076ac721b9b0"))))
-       ("rust-num_cpus"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num_cpus" "1.7.0"))
-           (file-name "rust-num_cpus-1.7.0")
-           (sha256
-            (base16-string->bytevector
-             "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d"))))
-       ("rust-openssl"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "openssl" "0.9.19"))
-           (file-name "rust-openssl-0.9.19")
-           (sha256
-            (base16-string->bytevector
-             "816914b22eb15671d62c73442a51978f311e911d6a6f6cbdafa6abce1b5038fc"))))
-       ("rust-openssl-probe"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "openssl-probe" "0.1.1"))
-           (file-name "rust-openssl-probe-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "d98df0270d404ccd3c050a41d579c52d1db15375168bb3471e04ec0f5f378daf"))))
-       ("rust-openssl-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "openssl-sys" "0.9.19"))
-           (file-name "rust-openssl-sys-0.9.19")
-           (sha256
-            (base16-string->bytevector
-             "1e4c63a7d559c1e5afa6d6a9e6fa34bbc5f800ffc9ae08b72c605420b0c4f5e8"))))
-       ("rust-percent-encoding"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "percent-encoding" "1.0.0"))
-           (file-name "rust-precent-encoding-1.0.0")
-           (sha256
-            (base16-string->bytevector
-             "de154f638187706bde41d9b4738748933d64e6b37bdbffc0b47a97d16a6ae356"))))
-       ("rust-pkg-config"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "pkg-config" "0.3.9"))
-           (file-name "rust-pkg-config-0.3.9")
-           (sha256
-            (base16-string->bytevector
-             "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903"))))
-       ("rust-psapi-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "psapi-sys" "0.1.0"))
-           (file-name "rust-psapi-sys-0.1.0")
-           (sha256
-            (base16-string->bytevector
-             "abcd5d1a07d360e29727f757a9decb3ce8bc6e0efa8969cfaad669a8317a2478"))))
-       ("rust-quote"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "quote" "0.3.15"))
-           (file-name "rust-quote-0.3.15")
-           (sha256
-            (base16-string->bytevector
-             "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"))))
-       ("rust-rand"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "rand" "0.3.16"))
-           (file-name "rust-rand-0.3.16")
-           (sha256
-            (base16-string->bytevector
-             "eb250fd207a4729c976794d03db689c9be1d634ab5a1c9da9492a13d8fecbcdf"))))
-       ("rust-redox_syscall"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "redox_syscall" "0.1.31"))
-           (file-name "rust-redox_syscall-0.1.31")
-           (sha256
-            (base16-string->bytevector
-             "8dde11f18c108289bef24469638a04dce49da56084f2d50618b226e47eb04509"))))
-       ("rust-redox_termios"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "redox_termios" "0.1.1"))
-           (file-name "rust-redox_termios-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"))))
-       ("rust-regex"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "regex" "0.1.80"))
-           (file-name "rust-regex-0.1.80")
-           (sha256
-            (base16-string->bytevector
-             "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"))))
-       ("rust-regex-0.2.2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "regex" "0.2.2"))
-           (file-name "rust-regex-0.2.2")
-           (sha256
-            (base16-string->bytevector
-             "1731164734096285ec2a5ec7fea5248ae2f5485b3feeb0115af4fda2183b2d1b"))))
-       ("rust-regex-syntax"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "regex-syntax" "0.3.9"))
-           (file-name "rust-regex-syntax-0.3.9")
-           (sha256
-            (base16-string->bytevector
-             "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"))))
-       ("rust-regex-syntax-0.4.1"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "regex-syntax" "0.4.1"))
-           (file-name "rust-regex-syntax-0.4.1")
-           (sha256
-            (base16-string->bytevector
-             "ad890a5eef7953f55427c50575c680c42841653abd2b028b68cd223d157f62db"))))
-       ("rust-rustc-demangle"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "rustc-demangle" "0.1.5"))
-           (file-name "rust-rustc-demangle-0.1.5")
-           (sha256
-            (base16-string->bytevector
-             "aee45432acc62f7b9a108cc054142dac51f979e69e71ddce7d6fc7adf29e817e"))))
-       ("rust-rustc-serialize"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "rustc-serialize" "0.3.24"))
-           (file-name "rust-rustc-serialize-0.3.24")
-           (sha256
-            (base16-string->bytevector
-             "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"))))
-       ("rust-same-file"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "same-file" "0.1.3"))
-           (file-name "rust-same-file-0.1.3")
-           (sha256
-            (base16-string->bytevector
-             "d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7"))))
-       ("rust-scoped-tls"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "scoped-tls" "0.1.0"))
-           (file-name "rust-scoped-tls-0.1.0")
-           (sha256
-            (base16-string->bytevector
-             "f417c22df063e9450888a7561788e9bd46d3bb3c1466435b4eccb903807f147d"))))
-       ("rust-scopeguard"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "scopeguard" "0.1.2"))
-           (file-name "rust-scopeguard-0.1.2")
-           (sha256
-            (base16-string->bytevector
-             "59a076157c1e2dc561d8de585151ee6965d910dd4dcb5dabb7ae3e83981a6c57"))))
-       ("rust-semver"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "semver" "0.8.0"))
-           (file-name "rust-semver-0.8.0")
-           (sha256
-            (base16-string->bytevector
-             "bee2bc909ab2d8d60dab26e8cad85b25d795b14603a0dcb627b78b9d30b6454b"))))
-       ("rust-semver-parser"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "semver-parser" "0.7.0"))
-           (file-name "rust-semver-parser-0.7.0")
-           (sha256
-            (base16-string->bytevector
-             "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"))))
-       ("rust-serde"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde" "1.0.15"))
-           (file-name "rust-serde-1.0.15")
-           (sha256
-            (base16-string->bytevector
-             "6a7046c9d4c6c522d10b2d098f9bebe2bef227e0e74044d8c1bfcf6b476af799"))))
-       ("rust-serde_derive"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde_derive" "1.0.15"))
-           (file-name "rust-serde_derive-1.0.15")
-           (sha256
-            (base16-string->bytevector
-             "1afcaae083fd1c46952a315062326bc9957f182358eb7da03b57ef1c688f7aa9"))))
-       ("rust-serde_derive_internals"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde_derive_internals" "0.16.0"))
-           (file-name "rust-serde_derive_internals-0.16.0")
-           (sha256
-            (base16-string->bytevector
-             "bd381f6d01a6616cdba8530492d453b7761b456ba974e98768a18cad2cd76f58"))))
-       ("rust-serde_ignored"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde_ignored" "0.0.4"))
-           (file-name "rust-serde_ignored-0.0.4")
-           (sha256
-            (base16-string->bytevector
-             "190e9765dcedb56be63b6e0993a006c7e3b071a016a304736e4a315dc01fb142"))))
-       ("rust-serde_json"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde_json" "1.0.3"))
-           (file-name "rust-serde_json-1.0.3")
-           (sha256
-            (base16-string->bytevector
-             "d243424e06f9f9c39e3cd36147470fd340db785825e367625f79298a6ac6b7ac"))))
-       ("rust-shell-escape"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "shell-escape" "0.1.3"))
-           (file-name "rust-shell-escape-0.1.3")
-           (sha256
-            (base16-string->bytevector
-             "dd5cc96481d54583947bfe88bf30c23d53f883c6cd0145368b69989d97b84ef8"))))
-       ("rust-socket2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "socket2" "0.2.3"))
-           (file-name "rust-socket2-0.2.3")
-           (sha256
-            (base16-string->bytevector
-             "9e76b159741052c7deaa9fd0b5ca6b5f79cecf525ed665abfe5002086c6b2791"))))
-       ("rust-strsim"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "strsim" "0.6.0"))
-           (file-name "rust-strsim-0.6.0")
-           (sha256
-            (base16-string->bytevector
-             "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"))))
-       ("rust-syn"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "syn" "0.11.11"))
-           (file-name "rust-syn-0.11.11")
-           (sha256
-            (base16-string->bytevector
-             "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"))))
-       ("rust-synom"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "synom" "0.11.3"))
-           (file-name "rust-synom-0.11.3")
-           (sha256
-            (base16-string->bytevector
-             "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"))))
-       ("rust-tar"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "tar" "0.4.13"))
-           (file-name "rust-tar-0.4.13")
-           (sha256
-            (base16-string->bytevector
-             "281285b717926caa919ad905ef89c63d75805c7d89437fb873100925a53f2b1b"))))
-       ("rust-tempdir"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "tempdir" "0.3.5"))
-           (file-name "rust-tempdir-0.3.5")
-           (sha256
-            (base16-string->bytevector
-             "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6"))))
-       ("rust-termcolor"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "termcolor" "0.3.3"))
-           (file-name "rust-termcolor-0.3.3")
-           (sha256
-            (base16-string->bytevector
-             "9065bced9c3e43453aa3d56f1e98590b8455b341d2fa191a1090c0dd0b242c75"))))
-       ("rust-termion"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "termion" "1.5.1"))
-           (file-name "rust-termion-1.5.1")
-           (sha256
-            (base16-string->bytevector
-             "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"))))
-       ("rust-thread-id"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "thread-id" "2.0.0"))
-           (file-name "rust-thread-id-2.0.0")
-           (sha256
-            (base16-string->bytevector
-             "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"))))
-       ("rust-thread_local"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "thread_local" "0.2.7"))
-           (file-name "rust-thread_local-0.2.7")
-           (sha256
-            (base16-string->bytevector
-             "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"))))
-       ("rust-thread_local-0.3.4"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "thread_local" "0.3.4"))
-           (file-name "rust-thread_local-0.3.4")
-           (sha256
-            (base16-string->bytevector
-             "1697c4b57aeeb7a536b647165a2825faddffb1d3bad386d507709bd51a90bb14"))))
-       ("rust-toml"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "toml" "0.4.5"))
-           (file-name "rust-toml-0.4.5")
-           (sha256
-            (base16-string->bytevector
-             "a7540f4ffc193e0d3c94121edb19b055670d369f77d5804db11ae053a45b6e7e"))))
-       ("rust-unicode-bidi"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "unicode-bidi" "0.3.4"))
-           (file-name "rust-unicode-bidi-0.3.4")
-           (sha256
-            (base16-string->bytevector
-             "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"))))
-       ("rust-unicode-normalization"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "unicode-normalization" "0.1.5"))
-           (file-name "rust-unicode-normalization-0.1.5")
-           (sha256
-            (base16-string->bytevector
-             "51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f"))))
-       ("rust-unicode-xid"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "unicode-xid" "0.0.4"))
-           (file-name "rust-unicode-xid-0.0.4")
-           (sha256
-            (base16-string->bytevector
-             "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"))))
-       ("rust-unreachable"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "unreachable" "1.0.0"))
-           (file-name "rust-unreachable-1.0.0")
-           (sha256
-            (base16-string->bytevector
-             "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"))))
-       ("rust-url"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "url" "1.5.1"))
-           (file-name "rust-url-1.5.1")
-           (sha256
-            (base16-string->bytevector
-             "eeb819346883532a271eb626deb43c4a1bb4c4dd47c519bd78137c3e72a4fe27"))))
-       ("rust-userenv-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "userenv-sys" "0.2.0"))
-           (file-name "rust-userenv-sys-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "71d28ea36bbd9192d75bd9fa9b39f96ddb986eaee824adae5d53b6e51919b2f3"))))
-       ("rust-utf8-ranges"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "utf8-ranges" "0.1.3"))
-           (file-name "rust-utf8-ranges-0.1.3")
-           (sha256
-            (base16-string->bytevector
-             "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"))))
-       ("rust-utf8-ranges-1.0.0"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "utf8-ranges" "1.0.0"))
-           (file-name "rust-utf8-ranges-1.0.0")
-           (sha256
-            (base16-string->bytevector
-             "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122"))))
-       ("rust-vcpkg"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "vcpkg" "0.2.2"))
-           (file-name "rust-vcpkg-0.2.2")
-           (sha256
-            (base16-string->bytevector
-             "9e0a7d8bed3178a8fb112199d466eeca9ed09a14ba8ad67718179b4fd5487d0b"))))
-       ("rust-void"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "void" "1.0.2"))
-           (file-name "rust-void-1.0.2")
-           (sha256
-            (base16-string->bytevector
-             "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"))))
-       ("rust-walkdir"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "walkdir" "1.0.7"))
-           (file-name "rust-walkdir-1.0.7")
-           (sha256
-            (base16-string->bytevector
-             "bb08f9e670fab86099470b97cd2b252d6527f0b3cc1401acdb595ffc9dd288ff"))))
-       ("rust-winapi"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "winapi" "0.2.8"))
-           (file-name "rust-winapi-0.2.8")
-           (sha256
-            (base16-string->bytevector
-             "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"))))
-       ("rust-winapi-build"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "winapi-build" "0.1.1"))
-           (file-name "rust-winapi-build-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"))))
-       ("rust-wincolor"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "wincolor" "0.1.4"))
-           (file-name "rust-wincolor-0.1.4")
-           (sha256
-            (base16-string->bytevector
-             "a39ee4464208f6430992ff20154216ab2357772ac871d994c51628d60e58b8b0"))))
-       ("rust-ws2_32-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "ws2_32-sys" "0.2.1"))
-           (file-name "rust-ws2_32-sys-0.2.1")
-           (sha256
-            (base16-string->bytevector
-             "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"))))))
+     (alist-replace "cargo-bootstrap" (list rust-1.23 "cargo")
+                    (alist-replace "rustc-bootstrap" (list rust-1.23)
+                                   (package-native-inputs rust-1.23))))
     (arguments
-     `(#:cargo ,cargo-bootstrap
-       #:rustc ,rustc ; Force to use rustc from current file
-       #:modules
-       ((ice-9 match)
-        (srfi srfi-1) ; 'every
-        (guix build utils)
-        (guix build cargo-build-system))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'unpack-dependencies
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (define (unpack source target)
-               (mkdir-p target)
-               (with-directory-excursion target
-                 (zero? (system* "tar" "xf"
-                                 source
-                                 "--strip-components=1"))))
-             (define (touch file-name)
-               (call-with-output-file file-name (const #t)))
-             (define (install-rust-library entry)
-               (match entry
-                 ((name . src)
-                  (if (string-prefix? "rust-" name)
-                      (let* ((rust-length (string-length "rust-"))
-                             (rust-name (string-drop name rust-length))
-                             (rsrc (string-append "vendor/" rust-name))
-                             (unpack-status (unpack src rsrc)))
-                        (touch (string-append rsrc "/.cargo-ok"))
-                        (generate-checksums rsrc src)
-                        unpack-status)))
-                 (_ #t)))
-             (mkdir "vendor")
-             (every install-rust-library inputs)))
-         (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "Cargo.lock"
-               (("(\"checksum .* = )\".*\"" all name)
-                (string-append name "\"" ,%cargo-reference-hash "\"")))
-             (for-each
-              (lambda (filename)
-                (use-modules (guix build cargo-build-system))
-                (delete-file filename)
-                (let* ((dir (dirname filename)))
-                  (display (string-append
-                            "patch-cargo-checksums: generate-checksums for "
-                            dir "\n"))
-                  (generate-checksums dir ,%cargo-reference-project-file)))
-              (find-files "vendor" ".cargo-checksum.json"))
-             #t))
-         (replace 'configure
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (substitute* "tests/build.rs"
-               (("/usr/bin/env") (which "env"))
-               ;; Guix llvm compiled without asmjs-unknown-emscripten at all
-               (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))
-             (substitute* "tests/death.rs"
-               ;; Stuck when built in container
-               (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))
-             (mkdir ".cargo")
-             (call-with-output-file ".cargo/config"
-               (lambda (port)
-                 (display "
-[source.crates-io]
-registry = 'https://github.com/rust-lang/crates.io-index'
-replace-with = 'vendored-sources'
-
-[source.vendored-sources]
-directory = 'vendor'
-" port)))
-             ;; Disable test for cross compilation support
-             (setenv "CFG_DISABLE_CROSS_TESTS" "1")
-             (setenv "SHELL" (which "sh"))
-             (setenv "CONFIG_SHELL" (which "sh"))
-             (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
-             #t)))))
-    (home-page "https://github.com/rust-lang/cargo")
-    (synopsis "Build tool and package manager for Rust")
-    (description "Cargo is a tool that allows Rust projects to declare their
-dependencies and ensures a reproducible build.")
-    ;; Cargo is dual licensed Apache and MIT. Also contains
-    ;; code from openssl which is GPL2 with linking exception.
-    (license (list license:asl2.0 license:expat license:gpl2))))
+     (substitute-keyword-arguments (package-arguments rust-1.23)
+       ((#:phases phases) `(modify-phases ,phases
+                             (delete 'fix-mtime-bug)))))))
diff --git a/guix/build-system/cargo.scm b/guix/build-system/cargo.scm
index c637fbb16..4a1eb0cfa 100644
--- a/guix/build-system/cargo.scm
+++ b/guix/build-system/cargo.scm
@@ -43,17 +43,11 @@
 to NAME and VERSION."
   (string-append crate-url name "/" version "/download"))
 
-(define (default-cargo)
-  "Return the default Cargo package."
+(define (default-rust)
+  "Return the default Rust package."
   ;; Lazily resolve the binding to avoid a circular dependency.
   (let ((rust (resolve-interface '(gnu packages rust))))
-    (module-ref rust 'cargo)))
-
-(define (default-rustc)
-  "Return the default Rustc package."
-  ;; Lazily resolve the binding to avoid a circular dependency.
-  (let ((rust (resolve-interface '(gnu packages rust))))
-    (module-ref rust 'rustc)))
+    (module-ref rust 'rust)))
 
 (define %cargo-build-system-modules
   ;; Build-side modules imported by default.
@@ -115,14 +109,13 @@ to NAME and VERSION."
 
 (define* (lower name
                 #:key source inputs native-inputs outputs system target
-                (cargo (default-cargo))
-                (rustc (default-rustc))
+                (rust (default-rust))
                 #:allow-other-keys
                 #:rest arguments)
   "Return a bag for NAME."
 
   (define private-keywords
-    '(#:source #:target #:cargo #:rustc #:inputs #:native-inputs #:outputs))
+    '(#:source #:target #:rust #:inputs #:native-inputs #:outputs))
 
   (and (not target) ;; TODO: support cross-compilation
        (bag
@@ -136,8 +129,8 @@ to NAME and VERSION."
 
                         ;; Keep the standard inputs of 'gnu-build-system'
                         ,@(standard-packages)))
-         (build-inputs `(("cargo" ,cargo)
-                         ("rustc" ,rustc)
+         (build-inputs `(("cargo" ,rust "cargo")
+                         ("rustc" ,rust)
                          ,@native-inputs))
          (outputs outputs)
          (build cargo-build)
-- 
2.16.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-21 19:02   ` Nikolai Merinov
@ 2018-03-24 16:26     ` Danny Milosavljevic
  2018-03-27 13:02       ` Nikolai Merinov
  0 siblings, 1 reply; 19+ messages in thread
From: Danny Milosavljevic @ 2018-03-24 16:26 UTC (permalink / raw)
  To: Nikolai Merinov; +Cc: 30831

[-- Attachment #1: Type: text/plain, Size: 555 bytes --]

Hi Nikolai,

On Thu, 22 Mar 2018 00:02:46 +0500
Nikolai Merinov <nikolai.merinov@member.fsf.org> wrote:

> I checked several times with "guix build --no-grafts --rounds=2 rust@1.24.1"
> with "guix gc" between tries, but it worked correctly. I tried on x86-64
> architecture with my patch over 79f450a120068ac1d2fc4e5b4b33ae938b604f95
> guix commit. 

Weird, works fine for me with 79f450a120068ac1d2fc4e5b4b33ae938b604f95.

But with the current master, 2cac8891510533338f6214fbd5ab9c2f6204e856, it fails
as describes (I tried again, fails).

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-22 21:01         ` Nikolai Merinov
@ 2018-03-27  7:41           ` Ludovic Courtès
  2018-03-27 12:56             ` Nikolai Merinov
  2018-03-27 13:09             ` Danny Milosavljevic
  0 siblings, 2 replies; 19+ messages in thread
From: Ludovic Courtès @ 2018-03-27  7:41 UTC (permalink / raw)
  To: Nikolai Merinov; +Cc: Ricardo Wurmus, 30831

Hello Nikolai,

Nikolai Merinov <nikolai.merinov@member.fsf.org> skribis:

> Ricardo Wurmus <rekado@elephly.net> writes:
>
>> Ludovic Courtès <ludo@gnu.org> writes:
>>
>>> Hello,
>>>
>>> Nikolai Merinov <nikolai.merinov@member.fsf.org> skribis:
>>>
>>>> Actually there is two ways to achieve this:
>>>> 1. Constantly update bootsrap binaries version.
>>>> 2. For each new release create new package. As result we'll be able to
>>>> use old rust release to build each new rust release. E.g. we can use
>>>> 1.21.0 bootstrap binaries, then build 1.22.0 rust and use it to build
>>>> 1.23.0 rust and then use it to build 1.24.1 rust.
>>>>
>>>> Which way is preferable? 
>>>
>>> Like I wrote, I would prefer option #2, so as to increase “binary
>>> diversity” and not rely on builds made by upstream.
>>>
>>> This obviously relates to <http://bootstrappable.org/>.  Ricardo, what’s
>>> your take on this?
>>
>> I agree.  In the long run, however, I’d prefer for Rust to be
>> bootstrapped through one of the alternative implementations.  Then we
>> don’t need to keep a long chain of older versions.
>>
>> Currently, however, I don’t see a way around it.
>
> Hi, I prepared proof-of-concept solution with rust-bootstrap frozed on
> 1.22.1 release.

Would it be an option to stick to 1.21?  Or is it already too difficult?
(Apologies if this was already answered previously.)  I’m asking because
I wonder how big the temptation will be to upgrade ‘rust-bootstrap’
again next time.

> Do you think suggested code with "split all code to small steps and
> remove fixed issues in new releases" is correct way to provide series
> of releases? Or it will be better to copy builder code to state it
> directly that this specific modification is tested on each rust
> release?

I’m not sure what you mean.

Danny, you probably have more experience than I do with Rust.  :-)
Thoughts?

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-27  7:41           ` Ludovic Courtès
@ 2018-03-27 12:56             ` Nikolai Merinov
  2018-03-27 13:19               ` Danny Milosavljevic
  2018-03-27 13:09             ` Danny Milosavljevic
  1 sibling, 1 reply; 19+ messages in thread
From: Nikolai Merinov @ 2018-03-27 12:56 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: Ricardo Wurmus, 30831

[-- Attachment #1: Type: text/plain, Size: 5151 bytes --]

Hi Ludovic,

In attachement you can find updated patch with rust-bootstrap 1.22.1 and
rust packages of 1.23.0 and 1.24.1 releases. I made small changes like
replacement (zero? (system* ...)) with (invoke ...) and checked
reproducability.

Please find my comments below.

Regards,
Nikolai

ludo@gnu.org (Ludovic Courtès) writes:

> Hello Nikolai,
>
> Nikolai Merinov <nikolai.merinov@member.fsf.org> skribis:
>
>> Ricardo Wurmus <rekado@elephly.net> writes:
>>
>>> Ludovic Courtès <ludo@gnu.org> writes:
>>>
>>>> Hello,
>>>>
>>>> Nikolai Merinov <nikolai.merinov@member.fsf.org> skribis:
>>>>
>>>>> Actually there is two ways to achieve this:
>>>>> 1. Constantly update bootsrap binaries version.
>>>>> 2. For each new release create new package. As result we'll be able to
>>>>> use old rust release to build each new rust release. E.g. we can use
>>>>> 1.21.0 bootstrap binaries, then build 1.22.0 rust and use it to build
>>>>> 1.23.0 rust and then use it to build 1.24.1 rust.
>>>>>
>>>>> Which way is preferable? 
>>>>
>>>> Like I wrote, I would prefer option #2, so as to increase “binary
>>>> diversity” and not rely on builds made by upstream.
>>>>
>>>> This obviously relates to <http://bootstrappable.org/>.  Ricardo, what’s
>>>> your take on this?
>>>
>>> I agree.  In the long run, however, I’d prefer for Rust to be
>>> bootstrapped through one of the alternative implementations.  Then we
>>> don’t need to keep a long chain of older versions.
>>>
>>> Currently, however, I don’t see a way around it.
>>
>> Hi, I prepared proof-of-concept solution with rust-bootstrap frozed on
>> 1.22.1 release.
>
> Would it be an option to stick to 1.21?  Or is it already too difficult?
> (Apologies if this was already answered previously.)  I’m asking because
> I wonder how big the temptation will be to upgrade ‘rust-bootstrap’
> again next time.
>

It should be easy enough to stick with 1.21 bootstrap (still we already
have package for 1.22), but:
1. We still should change code for bootstrap package to match design
where "rustc" and "cargo" installed from one package.
2. Rust 1.23 and 1.24 can use same "config.toml", while rust 1.22 have
different "config.toml". I do not know how to make it to look pretty in
first time. For additional information look below about package code
design.
3. My machine is pretty slow and testing reproducablity for three
versions in a row will take two days :-)


>> Do you think suggested code with "split all code to small steps and
>> remove fixed issues in new releases" is correct way to provide series
>> of releases? Or it will be better to copy builder code to state it
>> directly that this specific modification is tested on each rust
>> release?
>
> I’m not sure what you mean.

I talking about how to write code for packages. e.g. if we have:

  (package
    (name "rust")
    (version "1.23.0")
    ...
    (arguments
      ...
       #:phases (modify-phases %standard-phases
                  ...
                  (add-after ... 'disable-test-1)
                  (add-after ... 'disable-test-2)
                  (add-after ... 'fix-source-bug-1)
                  (add-after ... 'fix-source-bug-2)
                  (add-after ... 'fix-source-bug-3)
                  (replace 'configure ...)
                  (replace 'check ...)
                  ...)))

Then how should look package for 1.24 release?

It can be inherited from previous one and replace some of old steps

  (let ((base-rust rust-1.23))
    (package
      (inherit base-rust)
      (version "1.24.1")
      ...
      (native-inputs
       (alist-replace "cargo-bootstrap" (list base-rust "cargo")
                      (alist-replace "rustc-bootstrap" (list base-rust)
                                     (package-native-inputs base-rust))))
      (arguments (substitute-keyword-arguments (package-arguments base-rust)
                   ((#:phases phases)
                    `(modify-phases ,phases
                       (delete 'fix-source-bug-1)
                       (add-after ... 'disable-test-3)
                       (replace 'fix-source-bug-2
                         (lambda* ....))))))))

Or we should copy all steps required for each new release:

  (package
    (name "rust")
    (version "1.24.0")
    ...
    (arguments
      ...
       #:phases (modify-phases %standard-phases
                  ...
                  (add-after ... 'disable-test-1)
                  (add-after ... 'disable-test-2)
                  (add-after ... 'disable-test-3)
                  (add-after ... 'fix-source-bug-1)
                  (add-after ... 'fix-source-bug-3)
                  (replace 'configure ...)
                  (replace 'check ...)
                  ...)))

Second solution looks too verbose for me, but with first solution on
long chain of versions it will be very hard to manage which changes we
have in newest package.

>
> Danny, you probably have more experience than I do with Rust.  :-)
> Thoughts?
>
> Thanks,
> Ludo’.


[-- Attachment #2: 0001-gnu-rust-Update-rust-to-1.24.1-froze-bootstrap-on-1..patch --]
[-- Type: text/x-patch, Size: 67681 bytes --]

From 7765a42a3696027692282d36b74b68a7bff5678e Mon Sep 17 00:00:00 2001
From: Nikolai Merinov <nikolai.merinov@member.fsf.org>
Date: Wed, 14 Mar 2018 00:06:53 +0500
Subject: [PATCH] gnu: rust: Update rust to 1.24.1, froze bootstrap on 1.22.1
 release
To: guix-patches@gnu.org

* gnu/packages/rust.scm (rust-bootstrap): Froze bootstrap version on 1.22.1
rust release. Reorganize bootstrap binaries to match new "rust" package
structure with two ouputs "out" with rust compiler and "cargo" with cargo
package manager. Replace all "system*" with "invoke".
(rust-1.23): Rename "rustc" to "rust". Update sha256 for tarball. Add cargo
related dependencies. Install "cargo" as separate "rust" output. Remove
substitutes for parts that was fixed in "rustc" source code. Install
documentation to separate "doc" output. Update configuration according to
changes in "rustc" source code. Replace all "system*" with "invoke".
(rust): Create package for 1.24.1 rust release based on rust-1.23 release.
* guix/build-system/cargo.scm (default-rust): Replace "default-cargo" and
"default-rustc" functions with "default-rust" function.
(cargo-build-system): Take only one package as "rust" source. Use "rustc" from
default output of "rust" package, use "cargo" as "cargo" output of "rust"
package.

Cargo was moved from separate package to "rust" output because starting from
0.25.0 release cargo have no "Cargo.lock" anymore. According to
https://github.com/rust-lang/cargo/commit/5c9665f41c6b4d3b99d3b9f8b48a286f5f154692
commit message "cargo" used as "rust" dependency and stable version for
"cargo" provided through "Cargo.lock" file from "rust-lang/rust"
repository. As result only way to get stable version of cargo is build it from
"rust" sources.
---
 gnu/packages/rust.scm       | 1374 ++++---------------------------------------
 guix/build-system/cargo.scm |   21 +-
 2 files changed, 127 insertions(+), 1268 deletions(-)

diff --git a/gnu/packages/rust.scm b/gnu/packages/rust.scm
index 7d0eb7087..70140579b 100644
--- a/gnu/packages/rust.scm
+++ b/gnu/packages/rust.scm
@@ -3,7 +3,7 @@
 ;;; Copyright © 2016 Eric Le Bihan <eric.le.bihan.dev@free.fr>
 ;;; Copyright © 2016 Nils Gillmann <ng0@n0.is>
 ;;; Copyright © 2017 Ben Woodcroft <donttrustben@gmail.com>
-;;; Copyright © 2017 Nikolai Merinov <nikolai.merinov@member.fsf.org>
+;;; Copyright © 2017, 2018 Nikolai Merinov <nikolai.merinov@member.fsf.org>
 ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
 ;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
@@ -46,71 +46,48 @@
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system trivial)
   #:use-module (guix download)
-  #:use-module (guix base16)      ;for generated "cargo" native-inputs
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
+  #:use-module ((guix build utils) #:select (alist-replace))
+  #:use-module (guix utils)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-26))
 
-;; Should be one less than the current released version.
-(define %rust-bootstrap-binaries-version "1.21.0")
-
-(define %rust-bootstrap-binaries
-  (origin
-    (method url-fetch)
-    (uri (string-append
-          "https://static.rust-lang.org/dist/"
-          "rust-" %rust-bootstrap-binaries-version
-          "-" %host-type ".tar.gz"))
-    (sha256
-     (base32
-      (match %host-type
-        ("i686-unknown-linux-gnu"
-         "1vnvqwz30hvyjcfr1f602lg43v2vlqjr3yhb5vr8xnrcc07yvjmp")
-        ("x86_64-unknown-linux-gnu"
-         "1s0866qcy0645bqhsbs3pvk2hi52ps8jzs7x096w0as033h707ml")
-        ("armv7-unknown-linux-gnueabihf"
-         "1ml8fjq2b6j2vn1j314w93pf4wjl97n1mbz609h3i7md0zqscvs1")
-        ("aarch64-unknown-linux-gnu"
-         "1hv4m2m7xjcph39r6baryfg23hjcr4sbsrfnd1lh0wn67k2fc7j9")
-        ("mips64el-unknown-linux-gnuabi64"
-         "0p7fzkfcqg5yvj86v434z351dp7s7pgns8nzxj0fz3hmbfbvlvn9")
-        (_ "")))))) ; Catch-all for other systems.
-
 (define %cargo-reference-project-file "/dev/null")
 (define %cargo-reference-hash
   "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
 
-(define (increment-rust-version rust-version major patch)
-  (match (string-split rust-version #\.)
-    (("1" minor _)
-     (string-append (number->string major) "."
-                    (number->string (+ (string->number minor) 1)) "."
-                    (number->string patch)))))
-
-(define* (cargo-version rustc-version #:optional (patch 0))
-  ;; Computes the cargo version that matches the rustc version.
-  ;; This has so far continued to follow a predictable pattern:
-  ;; https://github.com/rust-lang/cargo/blob/50a46f47/README.md#releases
-  (increment-rust-version rustc-version 0 patch))
-
-(define* (rustc-version bootstrap-version #:optional (patch 0))
-  ;; Computes the rustc version that can be compiled from a given
-  ;; other rustc version. The patch argument is for selecting
-  ;; a stability or security fix. 1.11.0 -> 1.12.1 -> 1.13.0
-  (increment-rust-version bootstrap-version 1 patch))
-
-(define rustc-bootstrap
+(define rust-bootstrap
   (package
-    (name "rustc-bootstrap")
-    (version %rust-bootstrap-binaries-version)
-    (source %rust-bootstrap-binaries)
+    (name "rust-bootstrap")
+    (version "1.22.1")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append
+                    "https://static.rust-lang.org/dist/"
+                    "rust-" version "-" %host-type ".tar.gz"))
+              (sha256
+               (base32
+                (match %host-type
+                  ("i686-unknown-linux-gnu"
+                   "15zqbx86nm13d5vq2gm69b7av4vg479f74b5by64hs3bcwwm08pr")
+                  ("x86_64-unknown-linux-gnu"
+                   "1yll78x6b3abnvgjf2b66gvp6mmcb9y9jdiqcwhmgc0z0i0fix4c")
+                  ("armv7-unknown-linux-gnueabihf"
+                   "138a8l528kzp5wyk1mgjaxs304ac5ms8vlpq0ggjaznm6bn2j7a5")
+                  ("aarch64-unknown-linux-gnu"
+                   "0z6m9m1rx4d96nvybbfmpscq4dv616m615ijy16d5wh2vx0p4na8")
+                  ("mips64el-unknown-linux-gnuabi64"
+                   "07k4pcv7jvfa48cscdj8752lby7m7xdl88v3a6na1vs675lhgja2")
+                  (_ ""))))))
     (build-system gnu-build-system)
     (native-inputs
      `(("patchelf" ,patchelf)))
     (inputs
-     `(("gcc:lib" ,(canonical-package gcc) "lib")
+     `(("gcc" ,(canonical-package gcc))
+       ("gcc:lib" ,(canonical-package gcc) "lib")
        ("zlib" ,zlib)))
+    (outputs '("out" "cargo"))
     (arguments
      `(#:tests? #f
        #:strip-binaries? #f
@@ -121,115 +98,63 @@
          (replace 'install
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
+                    (cargo-out (assoc-ref outputs "cargo"))
                     (gcc:lib (assoc-ref inputs "gcc:lib"))
                     (libc (assoc-ref inputs "libc"))
                     (zlib (assoc-ref inputs "zlib"))
                     (ld-so (string-append libc ,(glibc-dynamic-linker)))
                     (rpath (string-append out "/lib:" zlib "/lib:"
                                           libc "/lib:" gcc:lib "/lib"))
+                    (cargo-rpath (string-append cargo-out "/lib:" libc "/lib:"
+                                                gcc:lib "/lib"))
                     (rustc (string-append out "/bin/rustc"))
-                    (rustdoc (string-append out "/bin/rustdoc")))
-               (system* "bash" "install.sh"
+                    (rustdoc (string-append out "/bin/rustdoc"))
+                    (cargo (string-append cargo-out "/bin/cargo"))
+                    (gcc (assoc-ref inputs "gcc")))
+               ;; Install rustc/rustdoc
+               (invoke "bash" "install.sh"
                         (string-append "--prefix=" out)
                         (string-append "--components=rustc,"
                                        "rust-std-" %host-type))
+               ;; Instal cargo
+               (invoke "bash" "install.sh"
+                        (string-append "--prefix=" cargo-out)
+                        (string-append "--components=cargo"))
                (for-each (lambda (file)
-                           (system* "patchelf" "--set-rpath" rpath file))
+                           (invoke "patchelf" "--set-rpath" rpath file))
                          (cons* rustc rustdoc (find-files out "\\.so$")))
+               (invoke "patchelf" "--set-rpath" cargo-rpath cargo)
                (for-each (lambda (file)
-                           (system* "patchelf" "--set-interpreter" ld-so file))
-                         (list rustc rustdoc))))))))
-    (home-page "https://www.rust-lang.org")
-    (synopsis "Prebuilt rust compiler")
-    (description "This package provides a pre-built @command{rustc} compiler,
-which can in turn be used to build the final Rust compiler.")
-    (license license:asl2.0)))
-
-(define cargo-bootstrap
-  (package
-    (name "cargo-bootstrap")
-    (version (cargo-version %rust-bootstrap-binaries-version 1))
-    (source %rust-bootstrap-binaries)
-    (build-system gnu-build-system)
-    (native-inputs
-     `(("patchelf" ,patchelf)))
-    (inputs
-     `(("gcc:lib" ,(canonical-package gcc) "lib")))
-    (arguments
-     `(#:tests? #f
-       #:strip-binaries? #f
-       #:phases
-       (modify-phases %standard-phases
-         (delete 'configure)
-         (delete 'build)
-         (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (let* ((out (assoc-ref outputs "out"))
-                    (gcc:lib (assoc-ref inputs "gcc:lib"))
-                    (libc (assoc-ref inputs "libc"))
-                    (ld-so (string-append libc ,(glibc-dynamic-linker)))
-                    (rpath (string-append out "/lib:" libc "/lib:"
-                                          gcc:lib "/lib"))
-                    (cargo (string-append out "/bin/cargo")))
-               (system* "bash" "install.sh"
-                        (string-append "--prefix=" out)
-                        "--components=cargo")
-               (system* "patchelf"
-                        "--set-interpreter" ld-so
-                        "--set-rpath" rpath
-                        cargo)))))))
+                           (invoke "patchelf" "--set-interpreter" ld-so file))
+                         (list rustc rustdoc cargo))
+               ;; Rust requires a C toolchain for linking. The prebuilt
+               ;; binaries expect a compiler called cc. Thus symlink gcc
+               ;; to cc.
+               (symlink (string-append gcc "/bin/gcc")
+                        (string-append out "/bin/cc"))
+               #t))))))
     (home-page "https://www.rust-lang.org")
-    (synopsis "Prebuilt cargo package manager")
-    (description "This package provides a pre-built @command{cargo} package
-manager, which is required to build itself.")
+    (synopsis "Prebuilt rust compiler and cargo package manager")
+    (description "This package provides a pre-built @command{rustc} compiler
+and a pre-built @command{cargo} package manaer, which can
+in turn be used to build the final Rust.")
     (license license:asl2.0)))
 
-(define rust-bootstrap
-  (package
-    (name "rust-bootstrap")
-    (version %rust-bootstrap-binaries-version)
-    (source #f)
-    (build-system trivial-build-system)
-    (propagated-inputs
-     `(("rustc-bootstrap" ,rustc-bootstrap)
-       ("cargo-bootstrap" ,cargo-bootstrap)
-       ("gcc" ,(canonical-package gcc))))
-    (arguments
-     `(#:modules ((guix build utils))
-       #:builder
-       (begin
-         (use-modules (guix build utils))
-         (let ((out (assoc-ref %outputs "out"))
-               (gcc (assoc-ref %build-inputs "gcc")))
-           (mkdir-p (string-append out "/bin"))
-           ;; Rust requires a C toolchain for linking. The prebuilt
-           ;; binaries expect a compiler called cc. Thus symlink gcc
-           ;; to cc.
-           (symlink (string-append gcc "/bin/gcc")
-                    (string-append out "/bin/cc"))))))
-    (home-page "https://www.rust-lang.org")
-    (synopsis "Rust bootstrapping meta package")
-    (description "Meta package for a rust environment. Provides pre-compiled
-rustc-bootstrap and cargo-bootstrap packages.")
-    (license license:asl2.0)))
 \f
-(define-public rustc
+(define (rust-source version hash)
+  (origin
+    (method url-fetch)
+    (uri (string-append "https://static.rust-lang.org/dist/"
+                        "rustc-" version "-src.tar.gz"))
+    (sha256 (base32 hash))
+    (modules '((guix build utils)))
+    (snippet '(begin (delete-file-recursively "src/llvm") #t))))
+
+(define-public rust-1.23
   (package
-    (name "rustc")
-    (version (rustc-version %rust-bootstrap-binaries-version 1))
-    (source (origin
-              (method url-fetch)
-              (uri (string-append
-                    "https://static.rust-lang.org/dist/"
-                    "rustc-" version "-src.tar.gz"))
-              (sha256
-               (base32
-                "1lrzzp0nh7s61wgfs2h6ilaqi6iq89f1pd1yaf65l87bssyl4ylb"))
-              (modules '((guix build utils)))
-              (snippet
-               `(begin
-                  (delete-file-recursively "src/llvm")
-                  #t))))
+    (name "rust")
+    (version "1.23.0")
+    (source (rust-source version "14fb8vhjzsxlbi6yrn1r6fl5dlbdd1m92dn5zj5gmzfwf4w9ar3l"))
     (build-system gnu-build-system)
     (native-inputs
      `(("bison" ,bison) ; For the tests
@@ -239,11 +164,16 @@ rustc-bootstrap and cargo-bootstrap packages.")
        ("git" ,git)
        ("procps" ,procps) ; For the tests
        ("python-2" ,python-2)
-       ("rust-bootstrap" ,rust-bootstrap)
+       ("rustc-bootstrap" ,rust-bootstrap)
+       ("cargo-bootstrap" ,rust-bootstrap "cargo")
+       ("pkg-config" ,pkg-config) ; For "cargo"
        ("which" ,which)))
     (inputs
      `(("jemalloc" ,jemalloc-4.5.0)
-       ("llvm" ,llvm-3.9.1)))
+       ("llvm" ,llvm-3.9.1)
+       ("openssl" ,openssl)
+       ("libcurl" ,curl))) ; For "cargo"
+    (outputs '("out" "doc" "cargo"))
     (arguments
      `(#:imported-modules ,%cargo-build-system-modules ;for `generate-checksums'
        #:phases
@@ -258,9 +188,6 @@ rustc-bootstrap and cargo-bootstrap packages.")
          (add-after 'unpack 'patch-tests
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((bash (assoc-ref inputs "bash")))
-               (substitute* "src/build_helper/lib.rs"
-                 ;; In same folder as gcc there is only "gcc-ar" utility
-                 (("file\\.push_str\\(\"ar\"\\);") "file.push_str(\"gcc-ar\");"))
                (substitute* "src/libstd/process.rs"
                  ;; The newline is intentional.
                  ;; There's a line length "tidy" check in Rust which would
@@ -276,15 +203,18 @@ rustc-bootstrap and cargo-bootstrap packages.")
                ;; Our ld-wrapper cannot process non-UTF8 bytes in LIBRARY_PATH.
                ;; <https://lists.gnu.org/archive/html/guix-devel/2017-06/msg00193.html>
                (delete-file-recursively "src/test/run-make/linker-output-non-utf8")
-               (substitute* "src/build_helper/lib.rs"
-                 ;; Bug in Rust code.
-                 ;; Current implementation assume that if dst not exist then it's mtime
-                 ;; is 0, but in same time "src" have 0 mtime in guix build!
-                 (("let threshold = mtime\\(dst\\);")
-                  "if !dst.exists() {\nreturn false\n}\n let threshold = mtime(dst);"))
                #t)))
+         (add-after 'patch-tests 'fix-mtime-bug
+           (lambda* _
+             (substitute* "src/build_helper/lib.rs"
+               ;; Bug in Rust code.
+               ;; Current implementation assume that if dst not exist then it's mtime
+               ;; is 0, but in same time "src" have 0 mtime in guix build!
+               (("let threshold = mtime\\(dst\\);")
+                "if !dst.exists() {\nreturn false\n}\n let threshold = mtime(dst);"))
+             #t))
          (add-after 'patch-source-shebangs 'patch-cargo-checksums
-           (lambda* (#:key inputs #:allow-other-keys)
+           (lambda* _
              (substitute* "src/Cargo.lock"
                (("(\"checksum .* = )\".*\"" all name)
                 (string-append name "\"" ,%cargo-reference-hash "\"")))
@@ -302,6 +232,7 @@ rustc-bootstrap and cargo-bootstrap packages.")
          (replace 'configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let* ((out (assoc-ref outputs "out"))
+                    (doc (assoc-ref outputs "doc"))
                     (gcc (assoc-ref inputs "gcc"))
                     (gdb (assoc-ref inputs "gdb"))
                     (binutils (assoc-ref inputs "binutils"))
@@ -317,15 +248,18 @@ rustc-bootstrap and cargo-bootstrap packages.")
 [build]
 cargo = \"" cargo "/bin/cargo" "\"
 rustc = \"" rustc "/bin/rustc" "\"
+docs = true
 python = \"" python "/bin/python2" "\"
 gdb = \"" gdb "/bin/gdb" "\"
 vendor = true
 submodules = false
 [install]
 prefix = \"" out "\"
+docdir = \"" doc "/share/doc/rust" "\"
+sysconfdir = \"etc\"
+localstatedir = \"var/lib\"
 [rust]
 default-linker = \"" gcc "/bin/gcc" "\"
-default-ar = \"" binutils "/bin/ar" "\"
 channel = \"stable\"
 rpath = true
 # There is 2 failed codegen tests:
@@ -336,12 +270,13 @@ codegen-tests = false
 llvm-config = \"" llvm "/bin/llvm-config" "\"
 cc = \"" gcc "/bin/gcc" "\"
 cxx = \"" gcc "/bin/g++" "\"
+ar = \"" binutils "/bin/ar" "\"
 jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
 [dist]
 ") port)))
                #t)))
          (add-before 'build 'reset-timestamps-after-changes
-           (lambda* (#:key inputs outputs #:allow-other-keys)
+           (lambda* _
              (define ref (stat "README.md"))
              (for-each
               (lambda (filename)
@@ -349,14 +284,21 @@ jemalloc = \"" jemalloc "/lib/libjemalloc_pic.a" "\"
               (find-files "." #:directories? #t))
              #t))
          (replace 'build
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (zero? (system* "./x.py" "build"))))
+           (lambda* _
+             (invoke "./x.py" "build")
+             (invoke "./x.py" "build" "src/tools/cargo")))
          (replace 'check
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (zero? (system* "./x.py" "test"))))
+           (lambda* _
+             (invoke "./x.py" "test")))
          (replace 'install
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (zero? (system* "./x.py" "install"))))
+           (lambda* (#:key outputs #:allow-other-keys)
+             (invoke "./x.py" "install")
+             (substitute* "config.toml"
+               ;; replace prefix to specific output
+               (("prefix = \"[^\"]*\"")
+                (string-append "prefix = \"" (assoc-ref outputs "cargo") "\"")))
+             (invoke "./x.py" "install" "cargo")
+             #t))
          (add-after 'install 'wrap-rustc
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((out (assoc-ref outputs "out"))
@@ -376,1095 +318,19 @@ safety and thread safety guarantees.")
     ;; Dual licensed.
     (license (list license:asl2.0 license:expat))))
 
-;; This tries very hard not to get into a cyclic dependency like this:
-;;   cargo <- cargo-build-system <- cargo.
-(define-public cargo
-  (package
-    (name "cargo")
-    (version (cargo-version (rustc-version %rust-bootstrap-binaries-version) 0))
-    (source (origin
-              (method url-fetch)
-              (uri (string-append "https://github.com/rust-lang/cargo/archive/"
-                                  version ".tar.gz"))
-              (file-name (string-append name "-" version ".tar.gz"))
-              (sha256
-               (base32
-                "0kr7rml7v2bm7zl8jcb3056h63zpyy9m08s212i8vfwxf6lf5fzl"))))
-    (build-system cargo-build-system)
-    (propagated-inputs
-     `(("cmake" ,cmake)
-       ("pkg-config" ,pkg-config)))
-    (inputs
-     `(("curl" ,curl)
-       ("libgit2" ,libgit2)
-       ("libssh2" ,libssh2)
-       ("openssl" ,openssl)
-       ("python-2" ,python-2)
-       ("zlib" ,zlib)))
-    (native-inputs
-     `(("git" ,git) ; required for tests
-       ;; Next dependencies generated with next command:
-       ;; cat Cargo.lock | awk '
-       ;;   /^"checksum/
-       ;;   { oname=name=$2; vers=$3; hash=$6;
-       ;;     if (ns[name] != 1) { ns[name]=1; } else { name = name "-" vers; }
-       ;;     print "       (\"rust-" name "\"";
-       ;;     print "        ,(origin";
-       ;;     print "           (method url-fetch)";
-       ;;     print "           (uri (crate-uri \"" oname "\" \"" vers "\"))";
-       ;;     print "           (file-name \"rust-" oname "\-\" vers "\")
-       ;;     print "           (sha256";
-       ;;     print "            (base16-string->bytevector";
-       ;;     print "             " hash "))))"
-       ;;   }'
-       ("rust-advapi32-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "advapi32-sys" "0.2.0"))
-           (file-name "rust-advapi32-sys-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "e06588080cb19d0acb6739808aafa5f26bfb2ca015b2b6370028b44cf7cb8a9a"))))
-       ("rust-aho-corasick"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "aho-corasick" "0.5.3"))
-           (file-name "rust-aho-corasick-0.5.3")
-           (sha256
-            (base16-string->bytevector
-             "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66"))))
-       ("rust-aho-corasick-0.6.3"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "aho-corasick" "0.6.3"))
-           (file-name "rust-aho-corasick-0.6.3")
-           (sha256
-            (base16-string->bytevector
-             "500909c4f87a9e52355b26626d890833e9e1d53ac566db76c36faa984b889699"))))
-       ("rust-atty"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "atty" "0.2.3"))
-           (file-name "rust-atty-0.2.3")
-           (sha256
-            (base16-string->bytevector
-             "21e50800ec991574876040fff8ee46b136a53e985286fbe6a3bdfe6421b78860"))))
-       ("rust-backtrace"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "backtrace" "0.3.3"))
-           (file-name "rust-backtrace-0.3.3")
-           (sha256
-            (base16-string->bytevector
-             "99f2ce94e22b8e664d95c57fff45b98a966c2252b60691d0b7aeeccd88d70983"))))
-       ("rust-backtrace-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "backtrace-sys" "0.1.14"))
-           (file-name "rust-backtrace-sys-0.1.14")
-           (sha256
-            (base16-string->bytevector
-             "c63ea141ef8fdb10409d0f5daf30ac51f84ef43bff66f16627773d2a292cd189"))))
-       ("rust-bitflags"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "bitflags" "0.7.0"))
-           (file-name "rust-bitflags-0.7.0")
-           (sha256
-            (base16-string->bytevector
-             "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d"))))
-       ("rust-bitflags-0.9.1"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "bitflags" "0.9.1"))
-           (file-name "rust-bitflags-0.9.1")
-           (sha256
-            (base16-string->bytevector
-             "4efd02e230a02e18f92fc2735f44597385ed02ad8f831e7c1c1156ee5e1ab3a5"))))
-       ("rust-bufstream"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "bufstream" "0.1.3"))
-           (file-name "rust-bufstream-0.1.3")
-           (sha256
-            (base16-string->bytevector
-             "f2f382711e76b9de6c744cc00d0497baba02fb00a787f088c879f01d09468e32"))))
-       ("rust-cc"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "cc" "1.0.0"))
-           (file-name "rust-cc-1.0.0")
-           (sha256
-            (base16-string->bytevector
-             "7db2f146208d7e0fbee761b09cd65a7f51ccc38705d4e7262dad4d73b12a76b1"))))
-       ("rust-cfg-if"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "cfg-if" "0.1.2"))
-           (file-name "rust-cfg-if-0.1.2")
-           (sha256
-            (base16-string->bytevector
-             "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"))))
-       ("rust-cmake"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "cmake" "0.1.26"))
-           (file-name "rust-cmake-0.1.26")
-           (sha256
-            (base16-string->bytevector
-             "357c07e7a1fc95732793c1edb5901e1a1f305cfcf63a90eb12dbd22bdb6b789d"))))
-       ("rust-commoncrypto"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "commoncrypto" "0.2.0"))
-           (file-name "rust-commoncrypto-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "d056a8586ba25a1e4d61cb090900e495952c7886786fc55f909ab2f819b69007"))))
-       ("rust-commoncrypto-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "commoncrypto-sys" "0.2.0"))
-           (file-name "rust-commoncrypto-sys-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "1fed34f46747aa73dfaa578069fd8279d2818ade2b55f38f22a9401c7f4083e2"))))
-       ("rust-conv"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "conv" "0.3.3"))
-           (file-name "rust-conv-0.3.3")
-           (sha256
-            (base16-string->bytevector
-             "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299"))))
-       ("rust-core-foundation"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "core-foundation" "0.4.4"))
-           (file-name "rust-core-foundation-0.4.4")
-           (sha256
-            (base16-string->bytevector
-             "5909502e547762013619f4c4e01cc7393c20fe2d52d7fa471c1210adb2320dc7"))))
-       ("rust-core-foundation-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "core-foundation-sys" "0.4.4"))
-           (file-name "rust-core-foundation-sys-0.4.4")
-           (sha256
-            (base16-string->bytevector
-             "bc9fb3d6cb663e6fd7cf1c63f9b144ee2b1e4a78595a0451dd34bff85b9a3387"))))
-       ("rust-crossbeam"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "crossbeam" "0.2.10"))
-           (file-name "rust-crossbeam-0.2.10")
-           (sha256
-            (base16-string->bytevector
-             "0c5ea215664ca264da8a9d9c3be80d2eaf30923c259d03e870388eb927508f97"))))
-       ("rust-crossbeam-0.3.0"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "crossbeam" "0.3.0"))
-           (file-name "rust-crossbeam-0.3.0")
-           (sha256
-            (base16-string->bytevector
-             "8837ab96533202c5b610ed44bc7f4183e7957c1c8f56e8cc78bb098593c8ba0a"))))
-       ("rust-crypto-hash"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "crypto-hash" "0.3.0"))
-           (file-name "rust-crypto-hash-0.3.0")
-           (sha256
-            (base16-string->bytevector
-             "34903878eec1694faf53cae8473a088df333181de421d4d3d48061d6559fe602"))))
-       ("rust-curl"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "curl" "0.4.8"))
-           (file-name "rust-curl-0.4.8")
-           (sha256
-            (base16-string->bytevector
-             "7034c534a1d7d22f7971d6088aa9d281d219ef724026c3428092500f41ae9c2c"))))
-       ("rust-curl-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "curl-sys" "0.3.15"))
-           (file-name "rust-curl-sys-0.3.15")
-           (sha256
-            (base16-string->bytevector
-             "4bee31aa3a079d5f3ff9579ea4dcfb1b1a17a40886f5f467436d383e78134b55"))))
-       ("rust-custom_derive"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "custom_derive" "0.1.7"))
-           (file-name "rust-custom_derive-0.1.7")
-           (sha256
-            (base16-string->bytevector
-             "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9"))))
-       ("rust-dbghelp-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "dbghelp-sys" "0.2.0"))
-           (file-name "rust-dbghelp-sys-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "97590ba53bcb8ac28279161ca943a924d1fd4a8fb3fa63302591647c4fc5b850"))))
-       ("rust-docopt"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "docopt" "0.8.1"))
-           (file-name "rust-docopt-0.8.1")
-           (sha256
-            (base16-string->bytevector
-             "3b5b93718f8b3e5544fcc914c43de828ca6c6ace23e0332c6080a2977b49787a"))))
-       ("rust-dtoa"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "dtoa" "0.4.2"))
-           (file-name "rust-dtoa-0.4.2")
-           (sha256
-            (base16-string->bytevector
-             "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab"))))
-       ("rust-env_logger"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "env_logger" "0.4.3"))
-           (file-name "rust-env_logger-0.4.3")
-           (sha256
-            (base16-string->bytevector
-             "3ddf21e73e016298f5cb37d6ef8e8da8e39f91f9ec8b0df44b7deb16a9f8cd5b"))))
-       ("rust-error-chain"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "error-chain" "0.11.0"))
-           (file-name "rust-error-chain-0.11.0")
-           (sha256
-            (base16-string->bytevector
-             "ff511d5dc435d703f4971bc399647c9bc38e20cb41452e3b9feb4765419ed3f3"))))
-       ("rust-filetime"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "filetime" "0.1.12"))
-           (file-name "rust-filetime-0.1.12")
-           (sha256
-            (base16-string->bytevector
-             "6ab199bf38537c6f38792669e081e0bb278b9b7405bba2642e4e5d15bf732c0e"))))
-       ("rust-flate2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "flate2" "0.2.20"))
-           (file-name "rust-flate2-0.2.20")
-           (sha256
-            (base16-string->bytevector
-             "e6234dd4468ae5d1e2dbb06fe2b058696fdc50a339c68a393aefbf00bc81e423"))))
-       ("rust-fnv"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "fnv" "1.0.5"))
-           (file-name "rust-fnv-1.0.5")
-           (sha256
-            (base16-string->bytevector
-             "6cc484842f1e2884faf56f529f960cc12ad8c71ce96cc7abba0a067c98fee344"))))
-       ("rust-foreign-types"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "foreign-types" "0.2.0"))
-           (file-name "rust-foreign-types-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "3e4056b9bd47f8ac5ba12be771f77a0dae796d1bbaaf5fd0b9c2d38b69b8a29d"))))
-       ("rust-fs2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "fs2" "0.4.2"))
-           (file-name "rust-fs2-0.4.2")
-           (sha256
-            (base16-string->bytevector
-             "9ab76cfd2aaa59b7bf6688ad9ba15bbae64bff97f04ea02144cfd3443e5c2866"))))
-       ("rust-git2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "git2" "0.6.8"))
-           (file-name "rust-git2-0.6.8")
-           (sha256
-            (base16-string->bytevector
-             "0c1c0203d653f4140241da0c1375a404f0a397249ec818cd2076c6280c50f6fa"))))
-       ("rust-git2-curl"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "git2-curl" "0.7.0"))
-           (file-name "rust-git2-curl-0.7.0")
-           (sha256
-            (base16-string->bytevector
-             "68676bc784bf0bef83278898929bf64a251e87c0340723d0b93fa096c9c5bf8e"))))
-       ("rust-glob"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "glob" "0.2.11"))
-           (file-name "rust-glob-0.2.11")
-           (sha256
-            (base16-string->bytevector
-             "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb"))))
-       ("rust-globset"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "globset" "0.2.0"))
-           (file-name "rust-globset-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "feeb1b6840809ef5efcf7a4a990bc4e1b7ee3df8cf9e2379a75aeb2ba42ac9c3"))))
-       ("rust-hamcrest"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "hamcrest" "0.1.1"))
-           (file-name "rust-hamcrest-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "bf088f042a467089e9baa4972f57f9247e42a0cc549ba264c7a04fbb8ecb89d4"))))
-       ("rust-hex"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "hex" "0.2.0"))
-           (file-name "rust-hex-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "d6a22814455d41612f41161581c2883c0c6a1c41852729b17d5ed88f01e153aa"))))
-       ("rust-home"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "home" "0.3.0"))
-           (file-name "rust-home-0.3.0")
-           (sha256
-            (base16-string->bytevector
-             "9f25ae61099d8f3fee8b483df0bd4ecccf4b2731897aad40d50eca1b641fe6db"))))
-       ("rust-idna"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "idna" "0.1.4"))
-           (file-name "rust-idna-0.1.4")
-           (sha256
-            (base16-string->bytevector
-             "014b298351066f1512874135335d62a789ffe78a9974f94b43ed5621951eaf7d"))))
-       ("rust-ignore"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "ignore" "0.2.2"))
-           (file-name "rust-ignore-0.2.2")
-           (sha256
-            (base16-string->bytevector
-             "b3fcaf2365eb14b28ec7603c98c06cc531f19de9eb283d89a3dff8417c8c99f5"))))
-       ("rust-itoa"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "itoa" "0.3.4"))
-           (file-name "rust-itoa-0.3.4")
-           (sha256
-            (base16-string->bytevector
-             "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c"))))
-       ("rust-jobserver"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "jobserver" "0.1.6"))
-           (file-name "rust-jobserver-0.1.6")
-           (sha256
-            (base16-string->bytevector
-             "443ae8bc0af6c106e6e8b77e04684faecc1a5ce94e058f4c2b0a037b0ea1b133"))))
-       ("rust-kernel32-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "kernel32-sys" "0.2.2"))
-           (file-name "rust-kernel32-sys-0.2.2")
-           (sha256
-            (base16-string->bytevector
-             "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"))))
-       ("rust-lazy_static"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "lazy_static" "0.2.9"))
-           (file-name "rust-lazy_static-0.2.9")
-           (sha256
-            (base16-string->bytevector
-             "c9e5e58fa1a4c3b915a561a78a22ee0cac6ab97dca2504428bc1cb074375f8d5"))))
-       ("rust-libc"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "libc" "0.2.31"))
-           (file-name "rust-libc-0.2.31")
-           (sha256
-            (base16-string->bytevector
-             "d1419b2939a0bc44b77feb34661583c7546b532b192feab36249ab584b86856c"))))
-       ("rust-libgit2-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "libgit2-sys" "0.6.16"))
-           (file-name "rust-libgit2-sys-0.6.16")
-           (sha256
-            (base16-string->bytevector
-             "6f74b4959cef96898f5123148724fc7dee043b9a6b99f219d948851bfbe53cb2"))))
-       ("rust-libssh2-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "libssh2-sys" "0.2.6"))
-           (file-name "rust-libssh2-sys-0.2.6")
-           (sha256
-            (base16-string->bytevector
-             "0db4ec23611747ef772db1c4d650f8bd762f07b461727ec998f953c614024b75"))))
-       ("rust-libz-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "libz-sys" "1.0.17"))
-           (file-name "rust-libz-sys-1.0.17")
-           (sha256
-            (base16-string->bytevector
-             "44ebbc760fd2d2f4d93de09a0e13d97e057612052e871da9985cedcb451e6bd5"))))
-       ("rust-log"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "log" "0.3.8"))
-           (file-name "rust-log-0.3.8")
-           (sha256
-            (base16-string->bytevector
-             "880f77541efa6e5cc74e76910c9884d9859683118839d6a1dc3b11e63512565b"))))
-       ("rust-magenta"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "magenta" "0.1.1"))
-           (file-name "rust-magenta-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "4bf0336886480e671965f794bc9b6fce88503563013d1bfb7a502c81fe3ac527"))))
-       ("rust-magenta-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "magenta-sys" "0.1.1"))
-           (file-name "rust-magenta-sys-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "40d014c7011ac470ae28e2f76a02bfea4a8480f73e701353b49ad7a8d75f4699"))))
-       ("rust-matches"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "matches" "0.1.6"))
-           (file-name "rust-matches-0.1.6")
-           (sha256
-            (base16-string->bytevector
-             "100aabe6b8ff4e4a7e32c1c13523379802df0772b82466207ac25b013f193376"))))
-       ("rust-memchr"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "memchr" "0.1.11"))
-           (file-name "rust-memchr-0.1.11")
-           (sha256
-            (base16-string->bytevector
-             "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20"))))
-       ("rust-memchr-1.0.1"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "memchr" "1.0.1"))
-           (file-name "rust-memchr-1.0.1")
-           (sha256
-            (base16-string->bytevector
-             "1dbccc0e46f1ea47b9f17e6d67c5a96bd27030519c519c9c91327e31275a47b4"))))
-       ("rust-miniz-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "miniz-sys" "0.1.10"))
-           (file-name "rust-miniz-sys-0.1.10")
-           (sha256
-            (base16-string->bytevector
-             "609ce024854aeb19a0ef7567d348aaa5a746b32fb72e336df7fcc16869d7e2b4"))))
-       ("rust-miow"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "miow" "0.2.1"))
-           (file-name "rust-miow-0.2.1")
-           (sha256
-            (base16-string->bytevector
-             "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"))))
-       ("rust-net2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "net2" "0.2.31"))
-           (file-name "rust-net2-0.2.31")
-           (sha256
-            (base16-string->bytevector
-             "3a80f842784ef6c9a958b68b7516bc7e35883c614004dd94959a4dca1b716c09"))))
-       ("rust-num"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num" "0.1.40"))
-           (file-name "rust-num-0.1.40")
-           (sha256
-            (base16-string->bytevector
-             "a311b77ebdc5dd4cf6449d81e4135d9f0e3b153839ac90e648a8ef538f923525"))))
-       ("rust-num-bigint"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-bigint" "0.1.40"))
-           (file-name "rust-num-bigint-0.1.40")
-           (sha256
-            (base16-string->bytevector
-             "8fd0f8dbb4c0960998958a796281d88c16fbe68d87b1baa6f31e2979e81fd0bd"))))
-       ("rust-num-complex"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-complex" "0.1.40"))
-           (file-name "rust-num-complex-0.1.40")
-           (sha256
-            (base16-string->bytevector
-             "503e668405c5492d67cf662a81e05be40efe2e6bcf10f7794a07bd9865e704e6"))))
-       ("rust-num-integer"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-integer" "0.1.35"))
-           (file-name "rust-num-integer-0.1.35")
-           (sha256
-            (base16-string->bytevector
-             "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba"))))
-       ("rust-num-iter"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-iter" "0.1.34"))
-           (file-name "rust-num-iter-0.1.34")
-           (sha256
-            (base16-string->bytevector
-             "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01"))))
-       ("rust-num-rational"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-rational" "0.1.39"))
-           (file-name "rust-num-rational-0.1.39")
-           (sha256
-            (base16-string->bytevector
-             "288629c76fac4b33556f4b7ab57ba21ae202da65ba8b77466e6d598e31990790"))))
-       ("rust-num-traits"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num-traits" "0.1.40"))
-           (file-name "rust-num-traits-0.1.40")
-           (sha256
-            (base16-string->bytevector
-             "99843c856d68d8b4313b03a17e33c4bb42ae8f6610ea81b28abe076ac721b9b0"))))
-       ("rust-num_cpus"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "num_cpus" "1.7.0"))
-           (file-name "rust-num_cpus-1.7.0")
-           (sha256
-            (base16-string->bytevector
-             "514f0d73e64be53ff320680ca671b64fe3fb91da01e1ae2ddc99eb51d453b20d"))))
-       ("rust-openssl"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "openssl" "0.9.19"))
-           (file-name "rust-openssl-0.9.19")
-           (sha256
-            (base16-string->bytevector
-             "816914b22eb15671d62c73442a51978f311e911d6a6f6cbdafa6abce1b5038fc"))))
-       ("rust-openssl-probe"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "openssl-probe" "0.1.1"))
-           (file-name "rust-openssl-probe-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "d98df0270d404ccd3c050a41d579c52d1db15375168bb3471e04ec0f5f378daf"))))
-       ("rust-openssl-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "openssl-sys" "0.9.19"))
-           (file-name "rust-openssl-sys-0.9.19")
-           (sha256
-            (base16-string->bytevector
-             "1e4c63a7d559c1e5afa6d6a9e6fa34bbc5f800ffc9ae08b72c605420b0c4f5e8"))))
-       ("rust-percent-encoding"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "percent-encoding" "1.0.0"))
-           (file-name "rust-precent-encoding-1.0.0")
-           (sha256
-            (base16-string->bytevector
-             "de154f638187706bde41d9b4738748933d64e6b37bdbffc0b47a97d16a6ae356"))))
-       ("rust-pkg-config"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "pkg-config" "0.3.9"))
-           (file-name "rust-pkg-config-0.3.9")
-           (sha256
-            (base16-string->bytevector
-             "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903"))))
-       ("rust-psapi-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "psapi-sys" "0.1.0"))
-           (file-name "rust-psapi-sys-0.1.0")
-           (sha256
-            (base16-string->bytevector
-             "abcd5d1a07d360e29727f757a9decb3ce8bc6e0efa8969cfaad669a8317a2478"))))
-       ("rust-quote"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "quote" "0.3.15"))
-           (file-name "rust-quote-0.3.15")
-           (sha256
-            (base16-string->bytevector
-             "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a"))))
-       ("rust-rand"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "rand" "0.3.16"))
-           (file-name "rust-rand-0.3.16")
-           (sha256
-            (base16-string->bytevector
-             "eb250fd207a4729c976794d03db689c9be1d634ab5a1c9da9492a13d8fecbcdf"))))
-       ("rust-redox_syscall"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "redox_syscall" "0.1.31"))
-           (file-name "rust-redox_syscall-0.1.31")
-           (sha256
-            (base16-string->bytevector
-             "8dde11f18c108289bef24469638a04dce49da56084f2d50618b226e47eb04509"))))
-       ("rust-redox_termios"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "redox_termios" "0.1.1"))
-           (file-name "rust-redox_termios-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"))))
-       ("rust-regex"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "regex" "0.1.80"))
-           (file-name "rust-regex-0.1.80")
-           (sha256
-            (base16-string->bytevector
-             "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f"))))
-       ("rust-regex-0.2.2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "regex" "0.2.2"))
-           (file-name "rust-regex-0.2.2")
-           (sha256
-            (base16-string->bytevector
-             "1731164734096285ec2a5ec7fea5248ae2f5485b3feeb0115af4fda2183b2d1b"))))
-       ("rust-regex-syntax"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "regex-syntax" "0.3.9"))
-           (file-name "rust-regex-syntax-0.3.9")
-           (sha256
-            (base16-string->bytevector
-             "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957"))))
-       ("rust-regex-syntax-0.4.1"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "regex-syntax" "0.4.1"))
-           (file-name "rust-regex-syntax-0.4.1")
-           (sha256
-            (base16-string->bytevector
-             "ad890a5eef7953f55427c50575c680c42841653abd2b028b68cd223d157f62db"))))
-       ("rust-rustc-demangle"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "rustc-demangle" "0.1.5"))
-           (file-name "rust-rustc-demangle-0.1.5")
-           (sha256
-            (base16-string->bytevector
-             "aee45432acc62f7b9a108cc054142dac51f979e69e71ddce7d6fc7adf29e817e"))))
-       ("rust-rustc-serialize"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "rustc-serialize" "0.3.24"))
-           (file-name "rust-rustc-serialize-0.3.24")
-           (sha256
-            (base16-string->bytevector
-             "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"))))
-       ("rust-same-file"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "same-file" "0.1.3"))
-           (file-name "rust-same-file-0.1.3")
-           (sha256
-            (base16-string->bytevector
-             "d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7"))))
-       ("rust-scoped-tls"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "scoped-tls" "0.1.0"))
-           (file-name "rust-scoped-tls-0.1.0")
-           (sha256
-            (base16-string->bytevector
-             "f417c22df063e9450888a7561788e9bd46d3bb3c1466435b4eccb903807f147d"))))
-       ("rust-scopeguard"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "scopeguard" "0.1.2"))
-           (file-name "rust-scopeguard-0.1.2")
-           (sha256
-            (base16-string->bytevector
-             "59a076157c1e2dc561d8de585151ee6965d910dd4dcb5dabb7ae3e83981a6c57"))))
-       ("rust-semver"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "semver" "0.8.0"))
-           (file-name "rust-semver-0.8.0")
-           (sha256
-            (base16-string->bytevector
-             "bee2bc909ab2d8d60dab26e8cad85b25d795b14603a0dcb627b78b9d30b6454b"))))
-       ("rust-semver-parser"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "semver-parser" "0.7.0"))
-           (file-name "rust-semver-parser-0.7.0")
-           (sha256
-            (base16-string->bytevector
-             "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"))))
-       ("rust-serde"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde" "1.0.15"))
-           (file-name "rust-serde-1.0.15")
-           (sha256
-            (base16-string->bytevector
-             "6a7046c9d4c6c522d10b2d098f9bebe2bef227e0e74044d8c1bfcf6b476af799"))))
-       ("rust-serde_derive"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde_derive" "1.0.15"))
-           (file-name "rust-serde_derive-1.0.15")
-           (sha256
-            (base16-string->bytevector
-             "1afcaae083fd1c46952a315062326bc9957f182358eb7da03b57ef1c688f7aa9"))))
-       ("rust-serde_derive_internals"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde_derive_internals" "0.16.0"))
-           (file-name "rust-serde_derive_internals-0.16.0")
-           (sha256
-            (base16-string->bytevector
-             "bd381f6d01a6616cdba8530492d453b7761b456ba974e98768a18cad2cd76f58"))))
-       ("rust-serde_ignored"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde_ignored" "0.0.4"))
-           (file-name "rust-serde_ignored-0.0.4")
-           (sha256
-            (base16-string->bytevector
-             "190e9765dcedb56be63b6e0993a006c7e3b071a016a304736e4a315dc01fb142"))))
-       ("rust-serde_json"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "serde_json" "1.0.3"))
-           (file-name "rust-serde_json-1.0.3")
-           (sha256
-            (base16-string->bytevector
-             "d243424e06f9f9c39e3cd36147470fd340db785825e367625f79298a6ac6b7ac"))))
-       ("rust-shell-escape"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "shell-escape" "0.1.3"))
-           (file-name "rust-shell-escape-0.1.3")
-           (sha256
-            (base16-string->bytevector
-             "dd5cc96481d54583947bfe88bf30c23d53f883c6cd0145368b69989d97b84ef8"))))
-       ("rust-socket2"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "socket2" "0.2.3"))
-           (file-name "rust-socket2-0.2.3")
-           (sha256
-            (base16-string->bytevector
-             "9e76b159741052c7deaa9fd0b5ca6b5f79cecf525ed665abfe5002086c6b2791"))))
-       ("rust-strsim"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "strsim" "0.6.0"))
-           (file-name "rust-strsim-0.6.0")
-           (sha256
-            (base16-string->bytevector
-             "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"))))
-       ("rust-syn"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "syn" "0.11.11"))
-           (file-name "rust-syn-0.11.11")
-           (sha256
-            (base16-string->bytevector
-             "d3b891b9015c88c576343b9b3e41c2c11a51c219ef067b264bd9c8aa9b441dad"))))
-       ("rust-synom"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "synom" "0.11.3"))
-           (file-name "rust-synom-0.11.3")
-           (sha256
-            (base16-string->bytevector
-             "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6"))))
-       ("rust-tar"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "tar" "0.4.13"))
-           (file-name "rust-tar-0.4.13")
-           (sha256
-            (base16-string->bytevector
-             "281285b717926caa919ad905ef89c63d75805c7d89437fb873100925a53f2b1b"))))
-       ("rust-tempdir"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "tempdir" "0.3.5"))
-           (file-name "rust-tempdir-0.3.5")
-           (sha256
-            (base16-string->bytevector
-             "87974a6f5c1dfb344d733055601650059a3363de2a6104819293baff662132d6"))))
-       ("rust-termcolor"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "termcolor" "0.3.3"))
-           (file-name "rust-termcolor-0.3.3")
-           (sha256
-            (base16-string->bytevector
-             "9065bced9c3e43453aa3d56f1e98590b8455b341d2fa191a1090c0dd0b242c75"))))
-       ("rust-termion"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "termion" "1.5.1"))
-           (file-name "rust-termion-1.5.1")
-           (sha256
-            (base16-string->bytevector
-             "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"))))
-       ("rust-thread-id"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "thread-id" "2.0.0"))
-           (file-name "rust-thread-id-2.0.0")
-           (sha256
-            (base16-string->bytevector
-             "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03"))))
-       ("rust-thread_local"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "thread_local" "0.2.7"))
-           (file-name "rust-thread_local-0.2.7")
-           (sha256
-            (base16-string->bytevector
-             "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5"))))
-       ("rust-thread_local-0.3.4"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "thread_local" "0.3.4"))
-           (file-name "rust-thread_local-0.3.4")
-           (sha256
-            (base16-string->bytevector
-             "1697c4b57aeeb7a536b647165a2825faddffb1d3bad386d507709bd51a90bb14"))))
-       ("rust-toml"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "toml" "0.4.5"))
-           (file-name "rust-toml-0.4.5")
-           (sha256
-            (base16-string->bytevector
-             "a7540f4ffc193e0d3c94121edb19b055670d369f77d5804db11ae053a45b6e7e"))))
-       ("rust-unicode-bidi"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "unicode-bidi" "0.3.4"))
-           (file-name "rust-unicode-bidi-0.3.4")
-           (sha256
-            (base16-string->bytevector
-             "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"))))
-       ("rust-unicode-normalization"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "unicode-normalization" "0.1.5"))
-           (file-name "rust-unicode-normalization-0.1.5")
-           (sha256
-            (base16-string->bytevector
-             "51ccda9ef9efa3f7ef5d91e8f9b83bbe6955f9bf86aec89d5cce2c874625920f"))))
-       ("rust-unicode-xid"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "unicode-xid" "0.0.4"))
-           (file-name "rust-unicode-xid-0.0.4")
-           (sha256
-            (base16-string->bytevector
-             "8c1f860d7d29cf02cb2f3f359fd35991af3d30bac52c57d265a3c461074cb4dc"))))
-       ("rust-unreachable"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "unreachable" "1.0.0"))
-           (file-name "rust-unreachable-1.0.0")
-           (sha256
-            (base16-string->bytevector
-             "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"))))
-       ("rust-url"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "url" "1.5.1"))
-           (file-name "rust-url-1.5.1")
-           (sha256
-            (base16-string->bytevector
-             "eeb819346883532a271eb626deb43c4a1bb4c4dd47c519bd78137c3e72a4fe27"))))
-       ("rust-userenv-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "userenv-sys" "0.2.0"))
-           (file-name "rust-userenv-sys-0.2.0")
-           (sha256
-            (base16-string->bytevector
-             "71d28ea36bbd9192d75bd9fa9b39f96ddb986eaee824adae5d53b6e51919b2f3"))))
-       ("rust-utf8-ranges"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "utf8-ranges" "0.1.3"))
-           (file-name "rust-utf8-ranges-0.1.3")
-           (sha256
-            (base16-string->bytevector
-             "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f"))))
-       ("rust-utf8-ranges-1.0.0"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "utf8-ranges" "1.0.0"))
-           (file-name "rust-utf8-ranges-1.0.0")
-           (sha256
-            (base16-string->bytevector
-             "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122"))))
-       ("rust-vcpkg"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "vcpkg" "0.2.2"))
-           (file-name "rust-vcpkg-0.2.2")
-           (sha256
-            (base16-string->bytevector
-             "9e0a7d8bed3178a8fb112199d466eeca9ed09a14ba8ad67718179b4fd5487d0b"))))
-       ("rust-void"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "void" "1.0.2"))
-           (file-name "rust-void-1.0.2")
-           (sha256
-            (base16-string->bytevector
-             "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"))))
-       ("rust-walkdir"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "walkdir" "1.0.7"))
-           (file-name "rust-walkdir-1.0.7")
-           (sha256
-            (base16-string->bytevector
-             "bb08f9e670fab86099470b97cd2b252d6527f0b3cc1401acdb595ffc9dd288ff"))))
-       ("rust-winapi"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "winapi" "0.2.8"))
-           (file-name "rust-winapi-0.2.8")
-           (sha256
-            (base16-string->bytevector
-             "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"))))
-       ("rust-winapi-build"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "winapi-build" "0.1.1"))
-           (file-name "rust-winapi-build-0.1.1")
-           (sha256
-            (base16-string->bytevector
-             "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"))))
-       ("rust-wincolor"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "wincolor" "0.1.4"))
-           (file-name "rust-wincolor-0.1.4")
-           (sha256
-            (base16-string->bytevector
-             "a39ee4464208f6430992ff20154216ab2357772ac871d994c51628d60e58b8b0"))))
-       ("rust-ws2_32-sys"
-        ,(origin
-           (method url-fetch)
-           (uri (crate-uri "ws2_32-sys" "0.2.1"))
-           (file-name "rust-ws2_32-sys-0.2.1")
-           (sha256
-            (base16-string->bytevector
-             "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"))))))
-    (arguments
-     `(#:cargo ,cargo-bootstrap
-       #:rustc ,rustc ; Force to use rustc from current file
-       #:modules
-       ((ice-9 match)
-        (srfi srfi-1) ; 'every
-        (guix build utils)
-        (guix build cargo-build-system))
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'unpack 'unpack-dependencies
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (define (unpack source target)
-               (mkdir-p target)
-               (with-directory-excursion target
-                 (zero? (system* "tar" "xf"
-                                 source
-                                 "--strip-components=1"))))
-             (define (touch file-name)
-               (call-with-output-file file-name (const #t)))
-             (define (install-rust-library entry)
-               (match entry
-                 ((name . src)
-                  (if (string-prefix? "rust-" name)
-                      (let* ((rust-length (string-length "rust-"))
-                             (rust-name (string-drop name rust-length))
-                             (rsrc (string-append "vendor/" rust-name))
-                             (unpack-status (unpack src rsrc)))
-                        (touch (string-append rsrc "/.cargo-ok"))
-                        (generate-checksums rsrc src)
-                        unpack-status)))
-                 (_ #t)))
-             (mkdir "vendor")
-             (every install-rust-library inputs)))
-         (add-after 'patch-generated-file-shebangs 'patch-cargo-checksums
-           (lambda* (#:key inputs #:allow-other-keys)
-             (substitute* "Cargo.lock"
-               (("(\"checksum .* = )\".*\"" all name)
-                (string-append name "\"" ,%cargo-reference-hash "\"")))
-             (for-each
-              (lambda (filename)
-                (use-modules (guix build cargo-build-system))
-                (delete-file filename)
-                (let* ((dir (dirname filename)))
-                  (display (string-append
-                            "patch-cargo-checksums: generate-checksums for "
-                            dir "\n"))
-                  (generate-checksums dir ,%cargo-reference-project-file)))
-              (find-files "vendor" ".cargo-checksum.json"))
-             #t))
-         (replace 'configure
-           (lambda* (#:key inputs outputs #:allow-other-keys)
-             (substitute* "tests/build.rs"
-               (("/usr/bin/env") (which "env"))
-               ;; Guix llvm compiled without asmjs-unknown-emscripten at all
-               (("fn wasm32_final_outputs") "#[ignore]\nfn wasm32_final_outputs"))
-             (substitute* "tests/death.rs"
-               ;; Stuck when built in container
-               (("fn ctrl_c_kills_everyone") "#[ignore]\nfn ctrl_c_kills_everyone"))
-             (mkdir ".cargo")
-             (call-with-output-file ".cargo/config"
-               (lambda (port)
-                 (display "
-[source.crates-io]
-registry = 'https://github.com/rust-lang/crates.io-index'
-replace-with = 'vendored-sources'
-
-[source.vendored-sources]
-directory = 'vendor'
-" port)))
-             ;; Disable test for cross compilation support
-             (setenv "CFG_DISABLE_CROSS_TESTS" "1")
-             (setenv "SHELL" (which "sh"))
-             (setenv "CONFIG_SHELL" (which "sh"))
-             (setenv "CC" (string-append (assoc-ref inputs "gcc") "/bin/gcc"))
-             #t)))))
-    (home-page "https://github.com/rust-lang/cargo")
-    (synopsis "Build tool and package manager for Rust")
-    (description "Cargo is a tool that allows Rust projects to declare their
-dependencies and ensures a reproducible build.")
-    ;; Cargo is dual licensed Apache and MIT. Also contains
-    ;; code from openssl which is GPL2 with linking exception.
-    (license (list license:asl2.0 license:expat license:gpl2))))
+(define-public rust
+  (let ((base-rust rust-1.23))
+    (package
+      (inherit base-rust)
+      (version "1.24.1")
+      (source
+       (rust-source version
+                    "1vv10x2h9kq7fxh2v01damdq8pvlp5acyh1kzcda9sfjx12kv99y"))
+      (native-inputs
+       (alist-replace "cargo-bootstrap" (list base-rust "cargo")
+                      (alist-replace "rustc-bootstrap" (list base-rust)
+                                     (package-native-inputs base-rust))))
+      (arguments
+       (substitute-keyword-arguments (package-arguments base-rust)
+         ((#:phases phases) `(modify-phases ,phases
+                               (delete 'fix-mtime-bug))))))))
diff --git a/guix/build-system/cargo.scm b/guix/build-system/cargo.scm
index c637fbb16..4a1eb0cfa 100644
--- a/guix/build-system/cargo.scm
+++ b/guix/build-system/cargo.scm
@@ -43,17 +43,11 @@
 to NAME and VERSION."
   (string-append crate-url name "/" version "/download"))
 
-(define (default-cargo)
-  "Return the default Cargo package."
+(define (default-rust)
+  "Return the default Rust package."
   ;; Lazily resolve the binding to avoid a circular dependency.
   (let ((rust (resolve-interface '(gnu packages rust))))
-    (module-ref rust 'cargo)))
-
-(define (default-rustc)
-  "Return the default Rustc package."
-  ;; Lazily resolve the binding to avoid a circular dependency.
-  (let ((rust (resolve-interface '(gnu packages rust))))
-    (module-ref rust 'rustc)))
+    (module-ref rust 'rust)))
 
 (define %cargo-build-system-modules
   ;; Build-side modules imported by default.
@@ -115,14 +109,13 @@ to NAME and VERSION."
 
 (define* (lower name
                 #:key source inputs native-inputs outputs system target
-                (cargo (default-cargo))
-                (rustc (default-rustc))
+                (rust (default-rust))
                 #:allow-other-keys
                 #:rest arguments)
   "Return a bag for NAME."
 
   (define private-keywords
-    '(#:source #:target #:cargo #:rustc #:inputs #:native-inputs #:outputs))
+    '(#:source #:target #:rust #:inputs #:native-inputs #:outputs))
 
   (and (not target) ;; TODO: support cross-compilation
        (bag
@@ -136,8 +129,8 @@ to NAME and VERSION."
 
                         ;; Keep the standard inputs of 'gnu-build-system'
                         ,@(standard-packages)))
-         (build-inputs `(("cargo" ,cargo)
-                         ("rustc" ,rustc)
+         (build-inputs `(("cargo" ,rust "cargo")
+                         ("rustc" ,rust)
                          ,@native-inputs))
          (outputs outputs)
          (build cargo-build)
-- 
2.16.2


^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-24 16:26     ` Danny Milosavljevic
@ 2018-03-27 13:02       ` Nikolai Merinov
  2018-03-30 13:48         ` bug#30831: " Danny Milosavljevic
  0 siblings, 1 reply; 19+ messages in thread
From: Nikolai Merinov @ 2018-03-27 13:02 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: 30831

Hi Danny,

I checked last version of my patch over
d591989b42088a358f33d6cf68f12efc2ad4403c (master as on March 24) and
looks that build is reproducable. It will be helpful if you'll be able
to check this patch also:
https://debbugs.gnu.org/cgi/bugreport.cgi?att=1;msg=38;bug=30831;filename=0001-gnu-rust-Update-rust-to-1.24.1-froze-bootstrap-on-1..patch 

Regards,
Nikolai

Danny Milosavljevic <dannym@scratchpost.org> writes:

> Hi Nikolai,
>
> On Thu, 22 Mar 2018 00:02:46 +0500
> Nikolai Merinov <nikolai.merinov@member.fsf.org> wrote:
>
>> I checked several times with "guix build --no-grafts --rounds=2 rust@1.24.1"
>> with "guix gc" between tries, but it worked correctly. I tried on x86-64
>> architecture with my patch over 79f450a120068ac1d2fc4e5b4b33ae938b604f95
>> guix commit. 
>
> Weird, works fine for me with 79f450a120068ac1d2fc4e5b4b33ae938b604f95.
>
> But with the current master, 2cac8891510533338f6214fbd5ab9c2f6204e856, it fails
> as describes (I tried again, fails).

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-27  7:41           ` Ludovic Courtès
  2018-03-27 12:56             ` Nikolai Merinov
@ 2018-03-27 13:09             ` Danny Milosavljevic
  1 sibling, 0 replies; 19+ messages in thread
From: Danny Milosavljevic @ 2018-03-27 13:09 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: Ricardo Wurmus, 30831

[-- Attachment #1: Type: text/plain, Size: 381 bytes --]

> Would it be an option to stick to 1.21?  Or is it already too difficult?
> (Apologies if this was already answered previously.)  I’m asking because
> I wonder how big the temptation will be to upgrade ‘rust-bootstrap’
> again next time.

Note: I hope that mrust (A Rust compiler written in C++) is released soon
so we won't have these bootstrap binaries any longer.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-27 12:56             ` Nikolai Merinov
@ 2018-03-27 13:19               ` Danny Milosavljevic
  2018-03-27 18:08                 ` Marius Bakke
  0 siblings, 1 reply; 19+ messages in thread
From: Danny Milosavljevic @ 2018-03-27 13:19 UTC (permalink / raw)
  To: Nikolai Merinov; +Cc: Ricardo Wurmus, 30831

[-- Attachment #1: Type: text/plain, Size: 986 bytes --]

Hi Nikolai,

I think the incremental (first) version is the best one since you can see
which bugs are worked around by us and which are fixed per release at a glance.

But really it doesn't matter much which.

> Second solution looks too verbose for me, but with first solution on
> long chain of versions it will be very hard to manage which changes we
> have in newest package.

I hope we won't have a long chain of cumulative Rust versions in Guix.  I know
that Rust upstream likes to do this chain of Rust1 -> Rust2 -> Rust3 -> Rust4
but that's not really scalable - especially since even one Rust takes a day
to compile.  We should try to get mrust [1] to work and use it to compile just
the newest Rust.  If it doesn't work we can still fall back to one of the
other ways later.

(What Mozilla recommends is we compile Rust1, use Rust2 to compile Rust3, use
Rust3 to compile Rust4, likewise for each new release)

[1] https://github.com/thepowersgang/mrustc

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-27 13:19               ` Danny Milosavljevic
@ 2018-03-27 18:08                 ` Marius Bakke
  2018-03-27 19:56                   ` Ricardo Wurmus
  2018-03-30 23:51                   ` Danny Milosavljevic
  0 siblings, 2 replies; 19+ messages in thread
From: Marius Bakke @ 2018-03-27 18:08 UTC (permalink / raw)
  To: Danny Milosavljevic, Nikolai Merinov; +Cc: Ricardo Wurmus, 30831

[-- Attachment #1: Type: text/plain, Size: 1291 bytes --]

Danny Milosavljevic <dannym@scratchpost.org> writes:

> Hi Nikolai,
>
> I think the incremental (first) version is the best one since you can see
> which bugs are worked around by us and which are fixed per release at a glance.
>
> But really it doesn't matter much which.
>
>> Second solution looks too verbose for me, but with first solution on
>> long chain of versions it will be very hard to manage which changes we
>> have in newest package.
>
> I hope we won't have a long chain of cumulative Rust versions in Guix.  I know
> that Rust upstream likes to do this chain of Rust1 -> Rust2 -> Rust3 -> Rust4
> but that's not really scalable - especially since even one Rust takes a day
> to compile.  We should try to get mrust [1] to work and use it to compile just
> the newest Rust.  If it doesn't work we can still fall back to one of the
> other ways later.
>
> (What Mozilla recommends is we compile Rust1, use Rust2 to compile Rust3, use
> Rust3 to compile Rust4, likewise for each new release)

I think we should heed upstreams advice in that case.  A long bootstrap
chain is really only a problem during 'core-updates', no?

IIUC mrustc only targets x86_64 currently, so I don't expect it to
become viable for Guix in a good while.

> [1] https://github.com/thepowersgang/mrustc

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-27 18:08                 ` Marius Bakke
@ 2018-03-27 19:56                   ` Ricardo Wurmus
  2018-03-30 23:51                   ` Danny Milosavljevic
  1 sibling, 0 replies; 19+ messages in thread
From: Ricardo Wurmus @ 2018-03-27 19:56 UTC (permalink / raw)
  To: Marius Bakke; +Cc: 30831


Marius Bakke <mbakke@fastmail.com> writes:

>> (What Mozilla recommends is we compile Rust1, use Rust2 to compile Rust3, use
>> Rust3 to compile Rust4, likewise for each new release)
>
> I think we should heed upstreams advice in that case.  A long bootstrap
> chain is really only a problem during 'core-updates', no?

It’s a problem for people building from source and it makes for a
brittle bootstrap because any of the packages could break.  Having a
long bootstrap chain to debug on core-updates is no fun — I’m saying
this as someone who has just fixed problems in the relatively simple
bootstrap chain for Java.

> IIUC mrustc only targets x86_64 currently, so I don't expect it to
> become viable for Guix in a good while.

This is a problem, but I do hope that eventually we will be able to use
mrust to bypass an ever-growing chain.

--
Ricardo

^ permalink raw reply	[flat|nested] 19+ messages in thread

* bug#30831: [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-27 13:02       ` Nikolai Merinov
@ 2018-03-30 13:48         ` Danny Milosavljevic
  0 siblings, 0 replies; 19+ messages in thread
From: Danny Milosavljevic @ 2018-03-30 13:48 UTC (permalink / raw)
  To: Nikolai Merinov; +Cc: 30831-done

[-- Attachment #1: Type: text/plain, Size: 616 bytes --]

Hi Nikolai,

On Tue, 27 Mar 2018 18:02:58 +0500
Nikolai Merinov <nikolai.merinov@member.fsf.org> wrote:

> I checked last version of my patch over
> d591989b42088a358f33d6cf68f12efc2ad4403c (master as on March 24) and
> looks that build is reproducable. It will be helpful if you'll be able
> to check this patch also:
> https://debbugs.gnu.org/cgi/bugreport.cgi?att=1;msg=38;bug=30831;filename=0001-gnu-rust-Update-rust-to-1.24.1-froze-bootstrap-on-1..patch 

I did now - it works for me and is reproducible.

I've thus fixed up the commit message a little and pushed this patch to master.

Thanks!

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1
  2018-03-27 18:08                 ` Marius Bakke
  2018-03-27 19:56                   ` Ricardo Wurmus
@ 2018-03-30 23:51                   ` Danny Milosavljevic
  1 sibling, 0 replies; 19+ messages in thread
From: Danny Milosavljevic @ 2018-03-30 23:51 UTC (permalink / raw)
  To: Marius Bakke; +Cc: Ricardo Wurmus, 30831

[-- Attachment #1: Type: text/plain, Size: 417 bytes --]

Hi Marius,

On Tue, 27 Mar 2018 20:08:01 +0200
Marius Bakke <mbakke@fastmail.com> wrote:

> IIUC mrustc only targets x86_64 currently, so I don't expect it to
> become viable for Guix in a good while.

I've checked the source code and it seems there's support for ARM in the works.

There's an old issue report at <https://github.com/thepowersgang/mrustc/issues/39>.

I've commented there - let's see.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2018-03-30 23:52 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-13 19:06 [bug#30831] [PATCH] gnu: rust: Update rust from 1.22.1 release to 1.24.1 Nikolai Merinov
2018-03-17 21:22 ` Ludovic Courtès
2018-03-19 12:26   ` Nikolai Merinov
2018-03-19 16:23     ` Ludovic Courtès
2018-03-20 10:56       ` Ricardo Wurmus
2018-03-22 21:01         ` Nikolai Merinov
2018-03-27  7:41           ` Ludovic Courtès
2018-03-27 12:56             ` Nikolai Merinov
2018-03-27 13:19               ` Danny Milosavljevic
2018-03-27 18:08                 ` Marius Bakke
2018-03-27 19:56                   ` Ricardo Wurmus
2018-03-30 23:51                   ` Danny Milosavljevic
2018-03-27 13:09             ` Danny Milosavljevic
2018-03-18 18:58 ` Danny Milosavljevic
2018-03-21 19:02   ` Nikolai Merinov
2018-03-24 16:26     ` Danny Milosavljevic
2018-03-27 13:02       ` Nikolai Merinov
2018-03-30 13:48         ` bug#30831: " Danny Milosavljevic
2018-03-22  7:20 ` [bug#30831] building rust on aarch64 Efraim Flashner

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.