summary refs log tree commit diff
path: root/pkgs/development
diff options
context:
space:
mode:
authorMoritz Ulrich <moritz@tarn-vedra.de>2016-06-16 09:42:23 +0200
committerGitHub <noreply@github.com>2016-06-16 09:42:23 +0200
commite72282be846d2dd892cbc70999a43bff93c520f7 (patch)
tree746e6fa89b7ba5abb41f91d123bcb3c859148011 /pkgs/development
parent52c7f863c23b6b07309a084014dd6904a566070a (diff)
parent54f80775cb58b3aa784b323b1eddb14e45d86fc4 (diff)
downloadnixlib-e72282be846d2dd892cbc70999a43bff93c520f7.tar
nixlib-e72282be846d2dd892cbc70999a43bff93c520f7.tar.gz
nixlib-e72282be846d2dd892cbc70999a43bff93c520f7.tar.bz2
nixlib-e72282be846d2dd892cbc70999a43bff93c520f7.tar.lz
nixlib-e72282be846d2dd892cbc70999a43bff93c520f7.tar.xz
nixlib-e72282be846d2dd892cbc70999a43bff93c520f7.tar.zst
nixlib-e72282be846d2dd892cbc70999a43bff93c520f7.zip
Merge pull request #16052 from dvc94ch/rust-cross
Rust and cargo improvements
Diffstat (limited to 'pkgs/development')
-rw-r--r--pkgs/development/compilers/rust/beta.nix27
-rw-r--r--pkgs/development/compilers/rust/bootstrap.nix78
-rw-r--r--pkgs/development/compilers/rust/cargo.nix64
-rw-r--r--pkgs/development/compilers/rust/default.nix33
-rw-r--r--pkgs/development/compilers/rust/head.nix27
-rw-r--r--pkgs/development/compilers/rust/patches/disable-lockfile-check.patch (renamed from pkgs/development/compilers/rustc/patches/disable-lockfile-check.patch)0
-rw-r--r--pkgs/development/compilers/rust/patches/grsec.patch (renamed from pkgs/development/compilers/rustc/patches/grsec.patch)0
-rw-r--r--pkgs/development/compilers/rust/patches/remove-uneeded-git.patch (renamed from pkgs/development/compilers/rustc/patches/remove-uneeded-git.patch)0
-rw-r--r--pkgs/development/compilers/rust/patches/use-rustc-1.9.0.patch (renamed from pkgs/development/compilers/rustc/patches/use-rustc-1.9.0.patch)0
-rwxr-xr-xpkgs/development/compilers/rust/print-hashes.sh17
-rw-r--r--pkgs/development/compilers/rust/rustc.nix (renamed from pkgs/development/compilers/rustc/generic.nix)40
-rw-r--r--pkgs/development/compilers/rust/snapshot.nix (renamed from pkgs/development/compilers/rustc/bootstrap.nix)39
-rw-r--r--pkgs/development/compilers/rustc/beta.nix12
-rw-r--r--pkgs/development/compilers/rustc/head.nix13
-rw-r--r--pkgs/development/compilers/rustc/stable.nix13
-rw-r--r--pkgs/development/tools/build-managers/cargo/common.nix38
-rw-r--r--pkgs/development/tools/build-managers/cargo/default.nix49
-rw-r--r--pkgs/development/tools/build-managers/cargo/head.nix39
-rw-r--r--pkgs/development/tools/build-managers/cargo/snapshot.nix55
-rw-r--r--pkgs/development/tools/rust/racer/default.nix4
-rw-r--r--pkgs/development/tools/rust/racerd/default.nix2
21 files changed, 284 insertions, 266 deletions
diff --git a/pkgs/development/compilers/rust/beta.nix b/pkgs/development/compilers/rust/beta.nix
new file mode 100644
index 000000000000..4b4ee89f981b
--- /dev/null
+++ b/pkgs/development/compilers/rust/beta.nix
@@ -0,0 +1,27 @@
+{ stdenv, callPackage, rustPlatform,
+  targets ? [], targetToolchains ? [], targetPatches ? [] }:
+
+rec {
+  rustc = callPackage ./rustc.nix {
+    shortVersion = "beta-1.10.0";
+    forceBundledLLVM = false;
+    configureFlags = [ "--release-channel=beta" ];
+    srcRev = "d18e321abeecc69e4d1bf9cafba4fba53ddf267d";
+    srcSha = "1ck8mbjrq0bzq5xzwgaqdilakwm2ab0xpzqibjycds62ad4yw774";
+    patches = [ ./patches/disable-lockfile-check.patch ]
+      ++ stdenv.lib.optional stdenv.needsPax ./patches/grsec.patch;
+    inherit targets;
+    inherit targetPatches;
+    inherit targetToolchains;
+    inherit rustPlatform;
+  };
+
+  cargo = callPackage ./cargo.nix rec {
+    version = "0.10.0";
+    srcRev = "refs/tags/${version}";
+    srcSha = "06scvx5qh60mgvlpvri9ig4np2fsnicsfd452fi9w983dkxnz4l2";
+    depsSha256 = "0js4697n7v93wnqnpvamhp446w58llj66za5hkd6wannmc0gsy3b";
+    inherit rustc; # the rustc that will be wrapped by cargo
+    inherit rustPlatform; # used to build cargo
+  };
+}
diff --git a/pkgs/development/compilers/rust/bootstrap.nix b/pkgs/development/compilers/rust/bootstrap.nix
new file mode 100644
index 000000000000..300f69294532
--- /dev/null
+++ b/pkgs/development/compilers/rust/bootstrap.nix
@@ -0,0 +1,78 @@
+{ stdenv, fetchurl, makeWrapper, cacert, zlib }:
+
+let
+  platform =
+    if stdenv.system == "i686-linux"
+    then "i686-unknown-linux-gnu"
+    else if stdenv.system == "x86_64-linux"
+    then "x86_64-unknown-linux-gnu"
+    else if stdenv.system == "i686-darwin"
+    then "i686-apple-darwin"
+    else if stdenv.system == "x86_64-darwin"
+    then "x86_64-apple-darwin"
+    else abort "missing boostrap url for platform ${stdenv.system}";
+
+  # fetch hashes by running `print-hashes.sh 1.9.0`
+  bootstrapHash =
+    if stdenv.system == "i686-linux"
+    then "dd4d9bf1b9393867eb18d00431e8fb733894984f2c7b5154bc1b64d045077b45"
+    else if stdenv.system == "x86_64-linux"
+    then "288ff13efa2577e81c77fc2cb6e2b49b1ed0ceab51b4fa12f7efb87039ac49b7"
+    else if stdenv.system == "i686-darwin"
+    then "4d4d4b256d6bd6ae2527cf61007b2553de200f0a1910b7ad41e4f51d2b21e536"
+    else if stdenv.system == "x86_64-darwin"
+    then "d59b5509e69c1cace20a57072e3b3ecefdbfd8c7e95657b0ff2ac10aa1dfebe6"
+    else throw "missing boostrap hash for platform ${stdenv.system}";
+
+  src = fetchurl {
+     url = "https://static.rust-lang.org/dist/rust-${version}-${platform}.tar.gz";
+     sha256 = bootstrapHash;
+  };
+
+  version = "1.9.0";
+in
+
+rec {
+  rustc = stdenv.mkDerivation rec {
+    name = "rustc-bootstrap-${version}";
+
+    inherit version;
+    inherit src;
+
+    buildInputs = [ makeWrapper ];
+    phases = ["unpackPhase" "installPhase"];
+
+    installPhase = ''
+      ./install.sh --prefix=$out \
+        --components=rustc,rust-std-${platform},rust-docs
+
+      patchelf \
+        --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+        "$out/bin/rustc"
+
+      wrapProgram "$out/bin/rustc"
+    '';
+  };
+
+  cargo = stdenv.mkDerivation rec {
+    name = "cargo-bootstrap-${version}";
+
+    inherit version;
+    inherit src;
+
+    buildInputs = [ makeWrapper zlib rustc ];
+    phases = ["unpackPhase" "installPhase"];
+
+    installPhase = ''
+      ./install.sh --prefix=$out \
+        --components=cargo
+
+      patchelf \
+        --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+        "$out/bin/cargo"
+
+      wrapProgram "$out/bin/cargo" \
+        --suffix PATH : "${rustc}/bin"
+    '';
+  };
+}
diff --git a/pkgs/development/compilers/rust/cargo.nix b/pkgs/development/compilers/rust/cargo.nix
new file mode 100644
index 000000000000..fc4bf732cf6b
--- /dev/null
+++ b/pkgs/development/compilers/rust/cargo.nix
@@ -0,0 +1,64 @@
+{ stdenv, fetchgit, file, curl, pkgconfig, python, openssl, cmake, zlib
+, makeWrapper, libiconv, cacert, rustPlatform, rustc
+, version, srcRev, srcSha, depsSha256 }:
+
+rustPlatform.buildRustPackage rec {
+  name = "cargo-${version}";
+  inherit version;
+
+  src = fetchgit {
+    url = "https://github.com/rust-lang/cargo";
+    rev = srcRev;
+    sha256 = srcSha;
+  };
+
+  inherit depsSha256;
+
+  passthru.rustc = rustc;
+
+  buildInputs = [ file curl pkgconfig python openssl cmake zlib makeWrapper ]
+    ++ stdenv.lib.optional stdenv.isDarwin libiconv;
+
+  configurePhase = ''
+    ./configure --enable-optimize --prefix=$out --local-cargo=${rustPlatform.rust.cargo}/bin/cargo
+  '';
+
+  buildPhase = "make";
+
+  installPhase = ''
+    make install
+    ${postInstall}
+  '';
+
+  postInstall = ''
+    rm "$out/lib/rustlib/components" \
+       "$out/lib/rustlib/install.log" \
+       "$out/lib/rustlib/rust-installer-version" \
+       "$out/lib/rustlib/uninstall.sh" \
+       "$out/lib/rustlib/manifest-cargo"
+
+    wrapProgram "$out/bin/cargo" \
+      --suffix PATH : "${rustc}/bin" \
+      --run "export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt" \
+      ${stdenv.lib.optionalString stdenv.isDarwin ''--suffix DYLD_LIBRARY_PATH : "${rustc}/lib"''}
+  '';
+
+  checkPhase = ''
+    # Export SSL_CERT_FILE as without it one test fails with SSL verification error
+    export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
+    # Disable cross compilation tests
+    export CFG_DISABLE_CROSS_TESTS=1
+    cargo test
+  '';
+
+  # Disable check phase as there are failures (author_prefers_cargo test fails)
+  doCheck = false;
+
+  meta = with stdenv.lib; {
+    homepage = http://crates.io;
+    description = "Downloads your Rust project's dependencies and builds your project";
+    maintainers = with maintainers; [ wizeman retrry ];
+    license = [ licenses.mit licenses.asl20 ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/pkgs/development/compilers/rust/default.nix b/pkgs/development/compilers/rust/default.nix
new file mode 100644
index 000000000000..d1e7460fa54c
--- /dev/null
+++ b/pkgs/development/compilers/rust/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, callPackage, recurseIntoAttrs, makeRustPlatform,
+  targets ? [], targetToolchains ? [], targetPatches ? [] }:
+
+let
+  rustPlatform = recurseIntoAttrs (makeRustPlatform (callPackage ./bootstrap.nix {}) rustPlatform);
+  rustSnapshotPlatform = recurseIntoAttrs (makeRustPlatform (callPackage ./snapshot.nix {}) rustPlatform);
+in
+
+rec {
+  rustc = callPackage ./rustc.nix {
+    shortVersion = "1.9.0";
+    isRelease = true;
+    forceBundledLLVM = false;
+    configureFlags = [ "--release-channel=stable" ];
+    srcRev = "e4e8b666850a763fdf1c3c2c142856ab51e32779";
+    srcSha = "1pz4qx70mqv78fxm4w1mq7csk5pssq4qmr2vwwb5v8hyx03caff8";
+    patches = [ ./patches/remove-uneeded-git.patch ]
+      ++ stdenv.lib.optional stdenv.needsPax ./patches/grsec.patch;
+    inherit targets;
+    inherit targetPatches;
+    inherit targetToolchains;
+    rustPlatform = rustSnapshotPlatform;
+  };
+
+  cargo = callPackage ./cargo.nix rec {
+    version = "0.10.0";
+    srcRev = "refs/tags/${version}";
+    srcSha = "06scvx5qh60mgvlpvri9ig4np2fsnicsfd452fi9w983dkxnz4l2";
+    depsSha256 = "0js4697n7v93wnqnpvamhp446w58llj66za5hkd6wannmc0gsy3b";
+    inherit rustc; # the rustc that will be wrapped by cargo
+    inherit rustPlatform; # used to build cargo
+  };
+}
diff --git a/pkgs/development/compilers/rust/head.nix b/pkgs/development/compilers/rust/head.nix
new file mode 100644
index 000000000000..bbfe5c9a1529
--- /dev/null
+++ b/pkgs/development/compilers/rust/head.nix
@@ -0,0 +1,27 @@
+{ stdenv, callPackage, rustPlatform,
+  targets ? [], targetToolchains ? [], targetPatches ? [] }:
+
+rec {
+  rustc = callPackage ./rustc.nix {
+    shortVersion = "master-1.11.0";
+    forceBundledLLVM = false;
+    srcRev = "298730e7032cd55809423773da397cd5c7d827d4";
+    srcSha = "0hyz5j1z75sjkgsifzgxviv3b1lhgaz8wqwvmq80xx5vd78yd0c1";
+    patches = [ ./patches/disable-lockfile-check.patch
+                ./patches/use-rustc-1.9.0.patch ]
+      ++ stdenv.lib.optional stdenv.needsPax ./patches/grsec.patch;
+    inherit targets;
+    inherit targetPatches;
+    inherit targetToolchains;
+    inherit rustPlatform;
+  };
+
+  cargo = callPackage ./cargo.nix rec {
+    version = "2016.06.07";
+    srcRev = "3e70312a2a4ebedace131fc63bb8f27463c5db28";
+    srcSha = "0nibzyfjkiqfnq0c00hhqvs856l5qls8wds252p97q5q92yvp40f";
+    depsSha256 = "1xbb33aqnf5yyws6gjys9w8kznbh9rh6hw8mpg1hhq1ahipc2j1f";
+    inherit rustc; # the rustc that will be wrapped by cargo
+    inherit rustPlatform; # used to build cargo
+  };
+}
diff --git a/pkgs/development/compilers/rustc/patches/disable-lockfile-check.patch b/pkgs/development/compilers/rust/patches/disable-lockfile-check.patch
index 0c01cb1a7f19..0c01cb1a7f19 100644
--- a/pkgs/development/compilers/rustc/patches/disable-lockfile-check.patch
+++ b/pkgs/development/compilers/rust/patches/disable-lockfile-check.patch
diff --git a/pkgs/development/compilers/rustc/patches/grsec.patch b/pkgs/development/compilers/rust/patches/grsec.patch
index b97b40c24091..b97b40c24091 100644
--- a/pkgs/development/compilers/rustc/patches/grsec.patch
+++ b/pkgs/development/compilers/rust/patches/grsec.patch
diff --git a/pkgs/development/compilers/rustc/patches/remove-uneeded-git.patch b/pkgs/development/compilers/rust/patches/remove-uneeded-git.patch
index 3c68d777f885..3c68d777f885 100644
--- a/pkgs/development/compilers/rustc/patches/remove-uneeded-git.patch
+++ b/pkgs/development/compilers/rust/patches/remove-uneeded-git.patch
diff --git a/pkgs/development/compilers/rustc/patches/use-rustc-1.9.0.patch b/pkgs/development/compilers/rust/patches/use-rustc-1.9.0.patch
index 150306744be6..150306744be6 100644
--- a/pkgs/development/compilers/rustc/patches/use-rustc-1.9.0.patch
+++ b/pkgs/development/compilers/rust/patches/use-rustc-1.9.0.patch
diff --git a/pkgs/development/compilers/rust/print-hashes.sh b/pkgs/development/compilers/rust/print-hashes.sh
new file mode 100755
index 000000000000..4d1d20066b85
--- /dev/null
+++ b/pkgs/development/compilers/rust/print-hashes.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+PLATFORMS="i686-unknown-linux-gnu x86_64-unknown-linux-gnu i686-apple-darwin x86_64-apple-darwin"
+BASEURL="https://static.rust-lang.org/dist"
+VERSION=$1
+
+if [[ -z  $VERSION ]]
+then
+    echo "No version supplied"
+    exit -1
+fi
+
+for PLATFORM in $PLATFORMS
+do
+    URL="$BASEURL/rust-$VERSION-$PLATFORM.tar.gz.sha256"
+    curl $URL
+done
diff --git a/pkgs/development/compilers/rustc/generic.nix b/pkgs/development/compilers/rust/rustc.nix
index 09d8ad8bf00f..b1b33d57bb25 100644
--- a/pkgs/development/compilers/rustc/generic.nix
+++ b/pkgs/development/compilers/rust/rustc.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchurl, fetchgit, fetchzip, file, python2, tzdata, procps
-, llvm, jemalloc, ncurses, darwin, binutils, rustc
+, llvm, jemalloc, ncurses, darwin, binutils, rustPlatform, git
 
 , isRelease ? false
 , shortVersion
@@ -7,22 +7,11 @@
 , srcSha, srcRev
 , configureFlags ? []
 , patches
+, targets
+, targetPatches
+, targetToolchains
 } @ args:
 
-/* Rust's build process has a few quirks :
-
-- The Rust compiler is written is Rust, so it requires a bootstrap
-  compiler, which is downloaded during the build. To make the build
-  pure, we download it ourself before and put it where it is
-  expected. Once the language is stable (1.0) , we might want to
-  switch it to use nix's packaged rust compiler. This might not be possible
-  as the compiler is highly coupled to the bootstrap.
-
-NOTE : some derivation depend on rust. When updating this, please make
-sure those derivations still compile. (racer, for example).
-
-*/
-
 let
     version = if isRelease then
         "${shortVersion}"
@@ -35,15 +24,7 @@ let
 
     llvmShared = llvm.override { enableSharedLibraries = true; };
 
-    target = if stdenv.system == "i686-linux"
-      then "i686-unknown-linux-gnu"
-      else if stdenv.system == "x86_64-linux"
-      then "x86_64-unknown-linux-gnu"
-      else if stdenv.system == "i686-darwin"
-      then "i686-apple-darwin"
-      else if stdenv.system == "x86_64-darwin"
-      then "x86_64-apple-darwin"
-      else abort "no snapshot to bootstrap for this platform (missing target triple)";
+    target = builtins.replaceStrings [" "] [","] (builtins.toString targets);
 
     meta = with stdenv.lib; {
       homepage = http://www.rust-lang.org/;
@@ -71,13 +52,15 @@ stdenv.mkDerivation {
 
   # We need rust to build rust. If we don't provide it, configure will try to download it.
   configureFlags = configureFlags
-                ++ [ "--enable-local-rust" "--local-rust-root=${rustc}" "--enable-rpath" ]
+                ++ [ "--enable-local-rust" "--local-rust-root=${rustPlatform.rust.rustc}" "--enable-rpath" ]
                 # ++ [ "--jemalloc-root=${jemalloc}/lib"
                 ++ [ "--default-linker=${stdenv.cc}/bin/cc" "--default-ar=${binutils.out}/bin/ar" ]
                 ++ stdenv.lib.optional (stdenv.cc.cc ? isClang) "--enable-clang"
+                ++ stdenv.lib.optional (targets != []) "--target=${target}"
                 ++ stdenv.lib.optional (!forceBundledLLVM) "--llvm-root=${llvmShared}";
 
-  inherit patches;
+  patches = patches ++ targetPatches;
+  passthru.target = target;
 
   postPatch = ''
     substituteInPlace src/rust-installer/gen-install-script.sh \
@@ -112,8 +95,8 @@ stdenv.mkDerivation {
   '';
 
   # ps is needed for one of the test cases
-  nativeBuildInputs = [ file python2 procps rustc ];
-  buildInputs = [ ncurses ]
+  nativeBuildInputs = [ file python2 procps rustPlatform.rust.rustc git ];
+  buildInputs = [ ncurses ] ++ targetToolchains
     ++ stdenv.lib.optional (!forceBundledLLVM) llvmShared;
 
   # https://github.com/rust-lang/rust/issues/30181
@@ -125,4 +108,5 @@ stdenv.mkDerivation {
   preCheck = "export TZDIR=${tzdata}/share/zoneinfo";
 
   doCheck = true;
+  dontSetConfigureCross = true;
 }
diff --git a/pkgs/development/compilers/rustc/bootstrap.nix b/pkgs/development/compilers/rust/snapshot.nix
index 8bff511459dc..47f271b18e06 100644
--- a/pkgs/development/compilers/rustc/bootstrap.nix
+++ b/pkgs/development/compilers/rust/snapshot.nix
@@ -1,4 +1,8 @@
-{ stdenv, fetchurl }:
+/* NOTE: Rust 1.9.0 is the last version that uses snapshots
+         This file can be deleted after the 1.10.0 release and bootstrap.nix
+         can be used instead
+*/
+{ stdenv, fetchurl, callPackage }:
 
 let
   platform = if stdenv.system == "i686-linux"
@@ -17,7 +21,6 @@ let
     https://github.com/rust-lang/rust/blob/{$shortVersion}/src/snapshots.txt
     with the set you want at the top. Make sure this is the latest snapshot
     for the tagged release and not a snapshot in the current HEAD.
-    NOTE: Rust 1.9.0 is the last version that uses snapshots
   */
 
   snapshotHashLinux686 = "0e0e4448b80d0a12b75485795244bb3857a0a7ef";
@@ -40,19 +43,23 @@ let
   snapshotName = "rust-stage0-${snapshotDate}-${snapshotRev}-${platform}-${snapshotHash}.tar.bz2";
 in
 
-stdenv.mkDerivation {
-  name = "rust-bootstrap";
-  src = fetchurl {
-    url = "http://static.rust-lang.org/stage0-snapshots/${snapshotName}";
-    sha1 = snapshotHash;
+rec {
+  rustc = stdenv.mkDerivation {
+    name = "rustc-snapshot";
+    src = fetchurl {
+      url = "http://static.rust-lang.org/stage0-snapshots/${snapshotName}";
+      sha1 = snapshotHash;
+    };
+    dontStrip = true;
+    installPhase = ''
+      mkdir -p "$out"
+      cp -r bin "$out/bin"
+    '' + stdenv.lib.optionalString stdenv.isLinux ''
+      patchelf --interpreter "${stdenv.glibc.out}/lib/${stdenv.cc.dynamicLinker}" \
+               --set-rpath "${stdenv.cc.cc.lib}/lib/:${stdenv.cc.cc.lib}/lib64/" \
+               "$out/bin/rustc"
+    '';
   };
-  dontStrip = true;
-  installPhase = ''
-    mkdir -p "$out"
-    cp -r bin "$out/bin"
-  '' + stdenv.lib.optionalString stdenv.isLinux ''
-    patchelf --interpreter "${stdenv.glibc.out}/lib/${stdenv.cc.dynamicLinker}" \
-             --set-rpath "${stdenv.cc.cc.lib}/lib/:${stdenv.cc.cc.lib}/lib64/" \
-             "$out/bin/rustc"
-  '';
+
+  cargo = null;
 }
diff --git a/pkgs/development/compilers/rustc/beta.nix b/pkgs/development/compilers/rustc/beta.nix
deleted file mode 100644
index 7dbd8ae7a695..000000000000
--- a/pkgs/development/compilers/rustc/beta.nix
+++ /dev/null
@@ -1,12 +0,0 @@
-{ stdenv, callPackage, rustcStable }:
-
-callPackage ./generic.nix {
-  shortVersion = "beta-1.10.0";
-  forceBundledLLVM = false;
-  configureFlags = [ "--release-channel=beta" ];
-  srcRev = "39f3c16cca889ef3f1719d9177e3315258222a65";
-  srcSha = "01bx6616lslp2mbj4h8bb6m042fs0y1z8g0jgpxvbk3fbhzwafrx";
-  patches = [ ./patches/disable-lockfile-check.patch ] ++
-    stdenv.lib.optional stdenv.needsPax ./patches/grsec.patch;
-  rustc = rustcStable;
-}
diff --git a/pkgs/development/compilers/rustc/head.nix b/pkgs/development/compilers/rustc/head.nix
deleted file mode 100644
index 8d9373eb3c3d..000000000000
--- a/pkgs/development/compilers/rustc/head.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-# Please make sure to check if rustfmt still builds when updating nightly
-{ stdenv, callPackage, rustcStable }:
-
-callPackage ./generic.nix {
-  shortVersion = "master-1.11.0";
-  forceBundledLLVM = false;
-  srcRev = "298730e7032cd55809423773da397cd5c7d827d4";
-  srcSha = "0hyz5j1z75sjkgsifzgxviv3b1lhgaz8wqwvmq80xx5vd78yd0c1";
-  patches = [ ./patches/disable-lockfile-check.patch
-              ./patches/use-rustc-1.9.0.patch ] ++
-    stdenv.lib.optional stdenv.needsPax ./patches/grsec.patch;
-  rustc = rustcStable;
-}
diff --git a/pkgs/development/compilers/rustc/stable.nix b/pkgs/development/compilers/rustc/stable.nix
deleted file mode 100644
index 596ef2d0cb7a..000000000000
--- a/pkgs/development/compilers/rustc/stable.nix
+++ /dev/null
@@ -1,13 +0,0 @@
-{ stdenv, callPackage }:
-
-callPackage ./generic.nix {
-  shortVersion = "1.9.0";
-  isRelease = true;
-  forceBundledLLVM = false;
-  configureFlags = [ "--release-channel=stable" ];
-  srcRev = "e4e8b666850a763fdf1c3c2c142856ab51e32779";
-  srcSha = "1pz4qx70mqv78fxm4w1mq7csk5pssq4qmr2vwwb5v8hyx03caff8";
-  patches = [ ./patches/remove-uneeded-git.patch ]
-    ++ stdenv.lib.optional stdenv.needsPax ./patches/grsec.patch;
-  rustc = callPackage ./bootstrap.nix {};
-}
diff --git a/pkgs/development/tools/build-managers/cargo/common.nix b/pkgs/development/tools/build-managers/cargo/common.nix
deleted file mode 100644
index 649664793192..000000000000
--- a/pkgs/development/tools/build-managers/cargo/common.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{stdenv, version, rustc}:
-
-{
-  inherit version;
-
-  name = "cargo-${version}";
-
-  postInstall = ''
-    rm "$out/lib/rustlib/components" \
-       "$out/lib/rustlib/install.log" \
-       "$out/lib/rustlib/rust-installer-version" \
-       "$out/lib/rustlib/uninstall.sh" \
-       "$out/lib/rustlib/manifest-cargo"
-
-     wrapProgram "$out/bin/cargo" --suffix PATH : "${rustc}/bin" \
-       ${stdenv.lib.optionalString stdenv.isDarwin ''--suffix DYLD_LIBRARY_PATH : "${rustc}/lib"''}
-  '';
-
-  platform = if stdenv.system == "i686-linux"
-    then "i686-unknown-linux-gnu"
-    else if stdenv.system == "x86_64-linux"
-    then "x86_64-unknown-linux-gnu"
-    else if stdenv.system == "i686-darwin"
-    then "i686-apple-darwin"
-    else if stdenv.system == "x86_64-darwin"
-    then "x86_64-apple-darwin"
-    else throw "no snapshot to bootstrap for this platform (missing platform url suffix)";
-
-  passthru.rustc = rustc;
-
-  meta = with stdenv.lib; {
-    homepage = http://crates.io;
-    description = "Downloads your Rust project's dependencies and builds your project";
-    maintainers = with maintainers; [ wizeman retrry ];
-    license = [ licenses.mit licenses.asl20 ];
-    platforms = platforms.linux ++ platforms.darwin;
-  };
-}
diff --git a/pkgs/development/tools/build-managers/cargo/default.nix b/pkgs/development/tools/build-managers/cargo/default.nix
deleted file mode 100644
index 54909ce3b704..000000000000
--- a/pkgs/development/tools/build-managers/cargo/default.nix
+++ /dev/null
@@ -1,49 +0,0 @@
-{ stdenv, lib, cacert, fetchgit, rustPlatform, file, curl, python, pkgconfig, openssl
-, cmake, zlib, makeWrapper
-# Darwin dependencies
-, libiconv }:
-
-with rustPlatform;
-
-with ((import ./common.nix) {
-  inherit stdenv rustc;
-  version = "0.10.0";
-});
-
-buildRustPackage rec {
-  inherit name version meta passthru;
-
-  # Needs to use fetchgit instead of fetchFromGitHub to fetch submodules
-  src = fetchgit {
-    url = "git://github.com/rust-lang/cargo";
-    rev = "refs/tags/${version}";
-    sha256 = "06scvx5qh60mgvlpvri9ig4np2fsnicsfd452fi9w983dkxnz4l2";
-  };
-
-  depsSha256 = "0js4697n7v93wnqnpvamhp446w58llj66za5hkd6wannmc0gsy3b";
-
-  buildInputs = [ file curl pkgconfig python openssl cmake zlib makeWrapper ]
-    ++ lib.optional stdenv.isDarwin libiconv;
-
-  configurePhase = ''
-    ./configure --enable-optimize --prefix=$out --local-cargo=${cargo}/bin/cargo
-  '';
-
-  buildPhase = "make";
-
-  checkPhase = ''
-    # Export SSL_CERT_FILE as without it one test fails with SSL verification error
-    export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt
-    # Disable cross compilation tests
-    export CFG_DISABLE_CROSS_TESTS=1
-    cargo test
-  '';
-
-  # Disable check phase as there are failures (author_prefers_cargo test fails)
-  doCheck = false;
-
-  installPhase = ''
-    make install
-    ${postInstall}
-  '';
-}
diff --git a/pkgs/development/tools/build-managers/cargo/head.nix b/pkgs/development/tools/build-managers/cargo/head.nix
deleted file mode 100644
index 475e2ab962c8..000000000000
--- a/pkgs/development/tools/build-managers/cargo/head.nix
+++ /dev/null
@@ -1,39 +0,0 @@
-{ stdenv, fetchgit, rustPlatform, file, curl, python, pkgconfig, openssl
-, cmake, zlib, makeWrapper }:
-
-with rustPlatform;
-
-with ((import ./common.nix) {
-  inherit stdenv rustc;
-  version = "2016-03-20";
-});
-
-buildRustPackage rec {
-  inherit name version meta passthru;
-
-  # Needs to use fetchgit instead of fetchFromGitHub to fetch submodules
-  src = fetchgit {
-    url = "git://github.com/rust-lang/cargo";
-    rev = "7d79da08238e3d47e0bc4406155bdcc45ccb8c82";
-    sha256 = "190qdii53s4vk940yzs2iizhfs22y2v8bzw051bl6bk9bs3y4fdd";
-  };
-
-  depsSha256 = "1xbb33aqnf5yyws6gjys9w8kznbh9rh6hw8mpg1hhq1ahipc2j1f";
-
-  buildInputs = [ file curl pkgconfig python openssl cmake zlib makeWrapper ];
-
-  configurePhase = ''
-    ./configure --enable-optimize --prefix=$out --local-cargo=${cargo}/bin/cargo
-  '';
-
-  buildPhase = "make";
-
-  # Disable check phase as there are lots of failures (some probably due to
-  # trying to access the network).
-  doCheck = false;
-
-  installPhase = ''
-    make install
-    ${postInstall}
-  '';
-}
diff --git a/pkgs/development/tools/build-managers/cargo/snapshot.nix b/pkgs/development/tools/build-managers/cargo/snapshot.nix
deleted file mode 100644
index 62539c2c7328..000000000000
--- a/pkgs/development/tools/build-managers/cargo/snapshot.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-{ stdenv, fetchurl, zlib, makeWrapper, rustc }:
-
-/* Cargo binary snapshot */
-
-let snapshotDate = "2016-01-31";
-in
-
-with ((import ./common.nix) {
-  inherit stdenv rustc;
-  version = "snapshot-${snapshotDate}";
-});
-
-let snapshotHash = if stdenv.system == "i686-linux"
-      then "7e2f9c82e1af5aa43ef3ee2692b985a5f2398f0a"
-      else if stdenv.system == "x86_64-linux"
-      then "4c03a3fd2474133c7ad6d8bb5f6af9915ca5292a"
-      else if stdenv.system == "i686-darwin"
-      then "4d84d31449a5926f9e7ceb344540d6e5ea530b88"
-      else if stdenv.system == "x86_64-darwin"
-      then "f8baef5b0b3e6f9825be1f1709594695ac0f0abc"
-      else throw "no snapshot for platform ${stdenv.system}";
-    snapshotName = "cargo-nightly-${platform}.tar.gz";
-in
-
-stdenv.mkDerivation {
-  inherit name version meta passthru;
-
-  src = fetchurl {
-    url = "https://static-rust-lang-org.s3.amazonaws.com/cargo-dist/${snapshotDate}/${snapshotName}";
-    sha1 = snapshotHash;
-  };
-
-  buildInputs = [ makeWrapper ];
-
-  dontStrip = true;
-
-  __propagatedImpureHostDeps = [
-    "/usr/lib/libiconv.2.dylib"
-    "/usr/lib/libssl.0.9.8.dylib"
-    "/usr/lib/libcurl.4.dylib"
-    "/System/Library/Frameworks/GSS.framework/GSS"
-    "/System/Library/Frameworks/GSS.framework/Versions/Current"
-    "/System/Library/PrivateFrameworks/Heimdal.framework/Heimdal"
-    "/System/Library/PrivateFrameworks/Heimdal.framework/Versions/Current"
-  ];
-
-  installPhase = ''
-    mkdir -p "$out"
-    ./install.sh "--prefix=$out"
-  '' + (if stdenv.isLinux then ''
-    patchelf --interpreter "${stdenv.glibc.out}/lib/${stdenv.cc.dynamicLinker}" \
-             --set-rpath "${stdenv.cc.cc.lib}/lib/:${stdenv.cc.cc.lib}/lib64/:${zlib.out}/lib" \
-             "$out/bin/cargo"
-  '' else "") + postInstall;
-}
diff --git a/pkgs/development/tools/rust/racer/default.nix b/pkgs/development/tools/rust/racer/default.nix
index 76f5354d596d..0f4477c9b3ff 100644
--- a/pkgs/development/tools/rust/racer/default.nix
+++ b/pkgs/development/tools/rust/racer/default.nix
@@ -17,13 +17,13 @@ buildRustPackage rec {
   buildInputs = [ makeWrapper ];
 
   preCheck = ''
-    export RUST_SRC;_PATH="${rustc.src}/src"
+    export RUST_SRC;_PATH="${rustPlatform.rust.rustc.src}/src"
   '';
 
   installPhase = ''
     mkdir -p $out/bin
     cp -p target/release/racer $out/bin/
-    wrapProgram $out/bin/racer --set RUST_SRC_PATH "${rustc.src}/src"
+    wrapProgram $out/bin/racer --set RUST_SRC_PATH "${rustPlatform.rust.rustc.src}/src"
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/tools/rust/racerd/default.nix b/pkgs/development/tools/rust/racerd/default.nix
index a5a3418388d6..d1e3ba8b0cb7 100644
--- a/pkgs/development/tools/rust/racerd/default.nix
+++ b/pkgs/development/tools/rust/racerd/default.nix
@@ -17,7 +17,7 @@ buildRustPackage rec {
 
   buildInputs = [ makeWrapper ];
 
-  RUST_SRC_PATH = ''${rustc.src}/src'';
+  RUST_SRC_PATH = ''${rustPlatform.rust.rustc.src}/src'';
 
   installPhase = ''
     mkdir -p $out/bin