at 18.03-beta 4.0 kB view raw
1{ stdenv, fetchurl, makeWrapper, bash, cacert, zlib, buildRustPackage, curl, darwin 2, version 3, src 4, platform 5, versionType 6}: 7 8let 9 inherit (stdenv.lib) getLib optionalString; 10 inherit (darwin) libiconv; 11 inherit (darwin.apple_sdk.frameworks) Security; 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 buildInputs = [ bash ] ++ stdenv.lib.optional stdenv.isDarwin Security; 38 39 postPatch = '' 40 patchShebangs . 41 ''; 42 43 installPhase = '' 44 ./install.sh --prefix=$out \ 45 --components=${installComponents} 46 47 ${optionalString (stdenv.isLinux && bootstrapping) '' 48 patchelf \ 49 --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ 50 "$out/bin/rustc" 51 patchelf \ 52 --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ 53 "$out/bin/rustdoc" 54 patchelf \ 55 --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ 56 "$out/bin/cargo" 57 ''} 58 59 ${optionalString (stdenv.isDarwin && bootstrapping) '' 60 install_name_tool -change /usr/lib/libresolv.9.dylib '${darwin.libresolv}/lib/libresolv.9.dylib' "$out/bin/rustc" 61 install_name_tool -change /usr/lib/libresolv.9.dylib '${darwin.libresolv}/lib/libresolv.9.dylib' "$out/bin/rustdoc" 62 install_name_tool -change /usr/lib/libiconv.2.dylib '${darwin.libiconv}/lib/libiconv.2.dylib' "$out/bin/cargo" 63 install_name_tool -change /usr/lib/libresolv.9.dylib '${darwin.libresolv}/lib/libresolv.9.dylib' "$out/bin/cargo" 64 install_name_tool -change /usr/lib/libcurl.4.dylib '${stdenv.lib.getLib curl}/lib/libcurl.4.dylib' "$out/bin/cargo" 65 for f in $out/lib/lib*.dylib; do 66 install_name_tool -change /usr/lib/libresolv.9.dylib '${darwin.libresolv}/lib/libresolv.9.dylib' "$f" 67 done 68 ''} 69 70 # Do NOT, I repeat, DO NOT use `wrapProgram` on $out/bin/rustc 71 # (or similar) here. It causes strange effects where rustc loads 72 # the wrong libraries in a bootstrap-build causing failures that 73 # are very hard to track dow. For details, see 74 # https://github.com/rust-lang/rust/issues/34722#issuecomment-232164943 75 ''; 76 }; 77 78 cargo = stdenv.mkDerivation rec { 79 name = "cargo-${versionType}-${version}"; 80 81 inherit version; 82 inherit src; 83 84 meta = with stdenv.lib; { 85 homepage = http://www.rust-lang.org/; 86 description = "A safe, concurrent, practical language"; 87 maintainers = with maintainers; [ qknight ]; 88 license = [ licenses.mit licenses.asl20 ]; 89 }; 90 91 buildInputs = [ makeWrapper bash ] ++ stdenv.lib.optional stdenv.isDarwin Security; 92 93 postPatch = '' 94 patchShebangs . 95 ''; 96 97 installPhase = '' 98 patchShebangs ./install.sh 99 ./install.sh --prefix=$out \ 100 --components=cargo 101 102 ${optionalString (stdenv.isLinux && bootstrapping) '' 103 patchelf \ 104 --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ 105 "$out/bin/cargo" 106 ''} 107 108 ${optionalString (stdenv.isDarwin && bootstrapping) '' 109 install_name_tool -change /usr/lib/libiconv.2.dylib '${darwin.libiconv}/lib/libiconv.2.dylib' "$out/bin/cargo" 110 install_name_tool -change /usr/lib/libresolv.9.dylib '${darwin.libresolv}/lib/libresolv.9.dylib' "$out/bin/cargo" 111 install_name_tool -change /usr/lib/libcurl.4.dylib '${stdenv.lib.getLib curl}/lib/libcurl.4.dylib' "$out/bin/cargo" 112 ''} 113 114 wrapProgram "$out/bin/cargo" \ 115 --suffix PATH : "${rustc}/bin" 116 ''; 117 }; 118}