From d00775c1d9a3acbff2d121fbae54691a7f07d18a Mon Sep 17 00:00:00 2001 From: Thomas Gerbet Date: Sun, 18 Aug 2024 14:18:02 +0200 Subject: [PATCH] stdenv: create `env-vars` file before writing data to it This fixes the regression introduced by c47a1e701df7f00352b8cf401fa79c0d2f5fcc59 on Darwin. The creation of the file using `install` and process substitution does not work on Darwin, you get the following complain: ``` install: skipping file '/dev/fd/63', as it was replaced while being copied ``` Fixes #335016 --- pkgs/stdenv/generic/setup.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index ef645e4e513e..1b4f7a89d358 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -1121,7 +1121,13 @@ substituteAllInPlace() { # the environment used for building. dumpVars() { if [ "${noDumpEnvVars:-0}" != 1 ]; then - install -m 0600 <(export 2>/dev/null) "$NIX_BUILD_TOP/env-vars" || true + # On darwin, install(1) cannot be called with /dev/stdin or fd from process substitution + # so first we create the file and then write to it + # See https://github.com/NixOS/nixpkgs/issues/335016 + { + install -m 0600 /dev/null "$NIX_BUILD_TOP/env-vars" && + export 2>/dev/null >| "$NIX_BUILD_TOP/env-vars" + } || true fi }