From 62fc8859c10dd18b005b9bcaa0b429103d7661d9 Mon Sep 17 00:00:00 2001 From: Vladimír Čunát Date: Sun, 8 May 2016 19:37:37 +0200 Subject: stdenv substituteAll: use yet another implementation It turned out that process substitution fed into a while-cycle isn't recognized during darwin bootstrap: http://hydra.nixos.org/build/35382446/nixlog/1/raw Also fix broken NIX_DEBUG output, noticed by abbradar. --- pkgs/stdenv/generic/setup.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'pkgs/stdenv/generic') diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index 3e156b579bc4..10fc4873afa3 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -398,7 +398,7 @@ substitute() { content="${content%X}" for ((n = 2; n < ${#params[*]}; n += 1)); do - p=${params[$n]} + p="${params[$n]}" if [ "$p" = --replace ]; then pattern="${params[$((n + 1))]}" @@ -448,13 +448,18 @@ substituteAll() { local -a args=() # We need to be careful due to vars with multi-line contents or weird names. - while IFS= read -r -d '' varName; do + local IFS== + local varNames="$(env -0 | cut -z -d= -f1 | grep -z -v '^[_A-Z]' | tr '\000' '=')" + local varName + for varName in $varNames; do if [ "$NIX_DEBUG" = "1" ]; then - echo "@varName@ -> '${varName}'" + echo "@${varName}@ -> '${!varName}'" fi args+=("--subst-var" "$varName") - done < <(env -0 | cut -z -d= -f1 | grep -z -v '^[_A-Z]') + done + # restore default $IFS for the child + IFS=$' \t\n' substitute "$input" "$output" "${args[@]}" } -- cgit 1.4.1