From 0de6275003170cb82e5f9a3bdfb649ff22b8b12a Mon Sep 17 00:00:00 2001 From: Jude Taylor Date: Tue, 28 Apr 2020 07:51:39 -0700 Subject: [PATCH] pkgsStatic: fix eval on Darwin --- pkgs/stdenv/adapters.nix | 4 ++-- pkgs/stdenv/cross/default.nix | 2 ++ pkgs/top-level/static.nix | 9 ++++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix index 8b23d3dadd2..03ae3cb8f0e 100644 --- a/pkgs/stdenv/adapters.nix +++ b/pkgs/stdenv/adapters.nix @@ -15,7 +15,7 @@ rec { # Used to override packages in stdenv like Make. Should not be used # for other dependencies. overrideInStdenv = stdenv: pkgs: - stdenv.override (prev: { allowedRequisites = null; extraBuildInputs = prev.extraBuildInputs or [] ++ pkgs; }); + stdenv.override (prev: { allowedRequisites = null; extraBuildInputs = (prev.extraBuildInputs or []) ++ pkgs; }); # Override the setup script of stdenv. Useful for testing new @@ -34,7 +34,7 @@ rec { makeStaticBinaries = stdenv: let stdenv' = if stdenv.hostPlatform.libc != "glibc" then stdenv else stdenv.override (prev: { - extraBuildInputs = prev.extraBuildInputs or [] ++ [ + extraBuildInputs = (prev.extraBuildInputs or []) ++ [ stdenv.glibc.static ]; }); diff --git a/pkgs/stdenv/cross/default.nix b/pkgs/stdenv/cross/default.nix index cc49af7de3b..5dbbdf778ea 100644 --- a/pkgs/stdenv/cross/default.nix +++ b/pkgs/stdenv/cross/default.nix @@ -63,6 +63,8 @@ in lib.init bootStages ++ [ # `tryEval` wouldn't catch, wrecking accessing previous stages # when there is a C compiler and everything should be fine. then throw "no C compiler provided for this platform" + else if crossSystem.isDarwin + then buildPackages.llvmPackages.clang else if crossSystem.useLLVM or false then buildPackages.llvmPackages_8.lldClang else buildPackages.gcc; diff --git a/pkgs/top-level/static.nix b/pkgs/top-level/static.nix index c7db64b99f6..b372af12b79 100644 --- a/pkgs/top-level/static.nix +++ b/pkgs/top-level/static.nix @@ -14,15 +14,18 @@ self: super: let inherit (super.stdenvAdapters) makeStaticBinaries makeStaticLibraries propagateBuildInputs; - inherit (super.lib) foldl optional flip id composeExtensions optionalAttrs; + inherit (super.lib) foldl optional flip id composeExtensions optionalAttrs optionalString; inherit (super) makeSetupHook; # Best effort static binaries. Will still be linked to libSystem, # but more portable than Nix store binaries. - makeStaticDarwin = stdenv: stdenv // { + makeStaticDarwin = stdenv_: let stdenv = stdenv_.override { + # extraBuildInputs are dropped in cross.nix, but darwin still needs them + extraBuildInputs = [ self.buildPackages.darwin.CF ]; + }; in stdenv // { mkDerivation = args: stdenv.mkDerivation (args // { NIX_CFLAGS_LINK = toString (args.NIX_CFLAGS_LINK or "") - + " -static-libgcc"; + + optionalString stdenv.cc.isGNU " -static-libgcc"; nativeBuildInputs = (args.nativeBuildInputs or []) ++ [ (makeSetupHook { substitutions = { libsystem = "${stdenv.cc.libc}/lib/libSystem.B.dylib";