Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at 17.09 2.7 kB view raw
1{ stdenv, fetchurl, makeWrapper, cacert, zlib, buildRustPackage, curl 2, version 3, src 4, platform 5, versionType 6}: 7 8let 9 inherit (stdenv.lib) optionalString; 10 11 needsPatchelf = stdenv.isLinux; 12 13 bootstrapping = versionType == "bootstrap"; 14 15 installComponents 16 = "rustc,rust-std-${platform}" 17 + (optionalString bootstrapping ",rust-docs,cargo") 18 ; 19in 20 21rec { 22 inherit buildRustPackage; 23 24 rustc = stdenv.mkDerivation rec { 25 name = "rustc-${versionType}-${version}"; 26 27 inherit version; 28 inherit src; 29 30 meta = with stdenv.lib; { 31 homepage = http://www.rust-lang.org/; 32 description = "A safe, concurrent, practical language"; 33 maintainers = with maintainers; [ qknight ]; 34 license = [ licenses.mit licenses.asl20 ]; 35 }; 36 37 phases = ["unpackPhase" "installPhase"]; 38 39 installPhase = '' 40 ./install.sh --prefix=$out \ 41 --components=${installComponents} 42 43 ${optionalString (needsPatchelf && bootstrapping) '' 44 patchelf \ 45 --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ 46 "$out/bin/rustdoc" 47 patchelf \ 48 --set-rpath "${stdenv.lib.makeLibraryPath [ curl zlib ]}" \ 49 --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ 50 "$out/bin/cargo" 51 ''} 52 53 ${optionalString needsPatchelf '' 54 patchelf \ 55 --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ 56 "$out/bin/rustc" 57 58 # Do NOT, I repeat, DO NOT use `wrapProgram` on $out/bin/rustc 59 # (or similar) here. It causes strange effects where rustc loads 60 # the wrong libraries in a bootstrap-build causing failures that 61 # are very hard to track dow. For details, see 62 # https://github.com/rust-lang/rust/issues/34722#issuecomment-232164943 63 ''} 64 ''; 65 66 }; 67 68 cargo = stdenv.mkDerivation rec { 69 name = "cargo-${versionType}-${version}"; 70 71 inherit version; 72 inherit src; 73 74 meta = with stdenv.lib; { 75 homepage = http://www.rust-lang.org/; 76 description = "A safe, concurrent, practical language"; 77 maintainers = with maintainers; [ qknight ]; 78 license = [ licenses.mit licenses.asl20 ]; 79 }; 80 81 buildInputs = [ makeWrapper ]; 82 phases = ["unpackPhase" "installPhase"]; 83 84 installPhase = '' 85 ./install.sh --prefix=$out \ 86 --components=cargo 87 88 ${optionalString needsPatchelf '' 89 patchelf \ 90 --set-rpath "${stdenv.lib.makeLibraryPath [ curl zlib ]}" \ 91 --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ 92 "$out/bin/cargo" 93 ''} 94 95 wrapProgram "$out/bin/cargo" \ 96 --suffix PATH : "${rustc}/bin" 97 ''; 98 }; 99}