mirror of
https://github.com/m-labs/artiq.git
synced 2024-12-27 04:08:27 +08:00
Sebastien Bourdeauducq
e024fa89e5
Causes problem with hydra when building against release nixpkgs, where the sb0 maintainer entry is not present yet.
118 lines
3.9 KiB
Nix
118 lines
3.9 KiB
Nix
{ stdenv, makeWrapper, bash, buildRustPackage, curl, darwin
|
|
, version
|
|
, src
|
|
, platform
|
|
, versionType
|
|
}:
|
|
|
|
let
|
|
inherit (stdenv.lib) optionalString;
|
|
inherit (darwin.apple_sdk.frameworks) Security;
|
|
|
|
bootstrapping = versionType == "bootstrap";
|
|
|
|
installComponents
|
|
= "rustc,rust-std-${platform}"
|
|
+ (optionalString bootstrapping ",cargo")
|
|
;
|
|
in
|
|
|
|
rec {
|
|
inherit buildRustPackage;
|
|
|
|
rustc = stdenv.mkDerivation rec {
|
|
name = "rustc-${versionType}-${version}";
|
|
|
|
inherit version;
|
|
inherit src;
|
|
|
|
meta = with stdenv.lib; {
|
|
homepage = http://www.rust-lang.org/;
|
|
description = "A safe, concurrent, practical language";
|
|
#maintainers = with maintainers; [ sb0 ];
|
|
license = [ licenses.mit licenses.asl20 ];
|
|
};
|
|
|
|
buildInputs = [ bash ] ++ stdenv.lib.optional stdenv.isDarwin Security;
|
|
|
|
postPatch = ''
|
|
patchShebangs .
|
|
'';
|
|
|
|
installPhase = ''
|
|
./install.sh --prefix=$out \
|
|
--components=${installComponents}
|
|
|
|
${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"
|
|
patchelf \
|
|
--set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
|
|
"$out/bin/cargo"
|
|
''}
|
|
|
|
${optionalString (stdenv.isDarwin && bootstrapping) ''
|
|
install_name_tool -change /usr/lib/libresolv.9.dylib '${darwin.libresolv}/lib/libresolv.9.dylib' "$out/bin/rustc"
|
|
install_name_tool -change /usr/lib/libresolv.9.dylib '${darwin.libresolv}/lib/libresolv.9.dylib' "$out/bin/rustdoc"
|
|
install_name_tool -change /usr/lib/libiconv.2.dylib '${darwin.libiconv}/lib/libiconv.2.dylib' "$out/bin/cargo"
|
|
install_name_tool -change /usr/lib/libresolv.9.dylib '${darwin.libresolv}/lib/libresolv.9.dylib' "$out/bin/cargo"
|
|
install_name_tool -change /usr/lib/libcurl.4.dylib '${stdenv.lib.getLib curl}/lib/libcurl.4.dylib' "$out/bin/cargo"
|
|
for f in $out/lib/lib*.dylib; do
|
|
install_name_tool -change /usr/lib/libresolv.9.dylib '${darwin.libresolv}/lib/libresolv.9.dylib' "$f"
|
|
done
|
|
''}
|
|
|
|
# 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 down. For details, see
|
|
# https://github.com/rust-lang/rust/issues/34722#issuecomment-232164943
|
|
'';
|
|
};
|
|
|
|
cargo = stdenv.mkDerivation rec {
|
|
name = "cargo-${versionType}-${version}";
|
|
|
|
inherit version;
|
|
inherit src;
|
|
|
|
meta = with stdenv.lib; {
|
|
homepage = http://www.rust-lang.org/;
|
|
description = "A safe, concurrent, practical language";
|
|
#maintainers = with maintainers; [ sb0 ];
|
|
license = [ licenses.mit licenses.asl20 ];
|
|
};
|
|
|
|
buildInputs = [ makeWrapper bash ] ++ stdenv.lib.optional stdenv.isDarwin Security;
|
|
|
|
postPatch = ''
|
|
patchShebangs .
|
|
'';
|
|
|
|
installPhase = ''
|
|
patchShebangs ./install.sh
|
|
./install.sh --prefix=$out \
|
|
--components=cargo
|
|
|
|
${optionalString (stdenv.isLinux && bootstrapping) ''
|
|
patchelf \
|
|
--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 '${darwin.libiconv}/lib/libiconv.2.dylib' "$out/bin/cargo"
|
|
install_name_tool -change /usr/lib/libresolv.9.dylib '${darwin.libresolv}/lib/libresolv.9.dylib' "$out/bin/cargo"
|
|
install_name_tool -change /usr/lib/libcurl.4.dylib '${stdenv.lib.getLib curl}/lib/libcurl.4.dylib' "$out/bin/cargo"
|
|
''}
|
|
|
|
wrapProgram "$out/bin/cargo" \
|
|
--suffix PATH : "${rustc}/bin"
|
|
'';
|
|
};
|
|
}
|