From c72b22c420587ff15e6212a7ba022dbd2c75b8ae Mon Sep 17 00:00:00 2001 From: Daiderd Jordan Date: Wed, 1 Nov 2017 15:37:04 +0100 Subject: [PATCH] rust-bootstrap: cleanup darwin expressions --- .../compilers/rust/binaryBuild.nix | 63 +++++++++++-------- pkgs/development/compilers/rust/bootstrap.nix | 7 +-- 2 files changed, 41 insertions(+), 29 deletions(-) diff --git a/pkgs/development/compilers/rust/binaryBuild.nix b/pkgs/development/compilers/rust/binaryBuild.nix index 37b06555bdbd..e67b305106e1 100644 --- a/pkgs/development/compilers/rust/binaryBuild.nix +++ b/pkgs/development/compilers/rust/binaryBuild.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, makeWrapper, cacert, zlib, buildRustPackage, curl +{ stdenv, fetchurl, makeWrapper, cacert, zlib, buildRustPackage, curl, darwin , version , src , platform @@ -6,12 +6,32 @@ }: let - inherit (stdenv.lib) optionalString; - - needsPatchelf = stdenv.isLinux; + inherit (stdenv.lib) getLib optionalString; + inherit (darwin) libiconv; + inherit (darwin.apple_sdk.frameworks) Security; bootstrapping = versionType == "bootstrap"; + patchBootstrapCargo = '' + ${optionalString (stdenv.isLinux && bootstrapping) '' + patchelf \ + --set-rpath "${stdenv.lib.makeLibraryPath [ curl zlib ]}" \ + --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ + "$out/bin/cargo" + ''} + ${optionalString (stdenv.isDarwin && bootstrapping) '' + install_name_tool \ + -change /usr/lib/libiconv.2.dylib '${getLib libiconv}/lib/libiconv.2.dylib' \ + "$out/bin/cargo" + install_name_tool \ + -change /usr/lib/libcurl.4.dylib '${getLib curl}/lib/libcurl.4.dylib' \ + "$out/bin/cargo" + install_name_tool \ + -change /usr/lib/libz.1.dylib '${getLib zlib}/lib/libz.1.dylib' \ + "$out/bin/cargo" + ''} + ''; + installComponents = "rustc,rust-std-${platform}" + (optionalString bootstrapping ",rust-docs,cargo") @@ -34,35 +54,31 @@ rec { license = [ licenses.mit licenses.asl20 ]; }; - phases = ["unpackPhase" "installPhase"]; + phases = ["unpackPhase" "installPhase" "fixupPhase"]; + + propagatedBuildInputs = stdenv.lib.optional stdenv.isDarwin Security; installPhase = '' ./install.sh --prefix=$out \ --components=${installComponents} - ${optionalString (needsPatchelf && bootstrapping) '' - patchelf \ - --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ - "$out/bin/rustdoc" - patchelf \ - --set-rpath "${stdenv.lib.makeLibraryPath [ curl zlib ]}" \ - --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ - "$out/bin/cargo" - ''} - - ${optionalString needsPatchelf '' + ${optionalString (stdenv.isLinux && bootstrapping) '' patchelf \ --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ "$out/bin/rustc" + patchelf \ + --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ + "$out/bin/rustdoc" + ''} + + ${patchBootstrapCargo} # Do NOT, I repeat, DO NOT use `wrapProgram` on $out/bin/rustc # (or similar) here. It causes strange effects where rustc loads # the wrong libraries in a bootstrap-build causing failures that # are very hard to track dow. For details, see # https://github.com/rust-lang/rust/issues/34722#issuecomment-232164943 - ''} ''; - }; cargo = stdenv.mkDerivation rec { @@ -78,19 +94,16 @@ rec { license = [ licenses.mit licenses.asl20 ]; }; + phases = ["unpackPhase" "installPhase" "fixupPhase"]; + buildInputs = [ makeWrapper ]; - phases = ["unpackPhase" "installPhase"]; + propagatedBuildInputs = stdenv.lib.optional stdenv.isDarwin Security; installPhase = '' ./install.sh --prefix=$out \ --components=cargo - ${optionalString needsPatchelf '' - patchelf \ - --set-rpath "${stdenv.lib.makeLibraryPath [ curl zlib ]}" \ - --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \ - "$out/bin/cargo" - ''} + ${patchBootstrapCargo} wrapProgram "$out/bin/cargo" \ --suffix PATH : "${rustc}/bin" diff --git a/pkgs/development/compilers/rust/bootstrap.nix b/pkgs/development/compilers/rust/bootstrap.nix index fbcac09fc458..14995005e123 100644 --- a/pkgs/development/compilers/rust/bootstrap.nix +++ b/pkgs/development/compilers/rust/bootstrap.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, makeWrapper, cacert, zlib, curl }: +{ stdenv, fetchurl, callPackage }: let # Note: the version MUST be one version prior to the version we're @@ -29,9 +29,8 @@ let sha256 = hashes."${platform}"; }; -in import ./binaryBuild.nix - { inherit stdenv fetchurl makeWrapper cacert zlib curl; +in callPackage ./binaryBuild.nix + { inherit version src platform; buildRustPackage = null; - inherit version src platform; versionType = "bootstrap"; }