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