summary refs log tree commit diff
path: root/pkgs/stdenv/generic
diff options
context:
space:
mode:
authorVladimír Čunát <v@cunat.cz>2021-07-11 16:02:17 +0200
committerVladimír Čunát <v@cunat.cz>2021-07-16 10:00:29 +0200
commit6f239d7309690153b181479735d9a254dfa2fcc3 (patch)
tree01d72db565360854dc9fefe5d8d1796bde5e3a7a /pkgs/stdenv/generic
parent3ea417e47f70a6b8e668afe340e137b517cc8d82 (diff)
downloadnixpkgs-6f239d7309690153b181479735d9a254dfa2fcc3.tar
nixpkgs-6f239d7309690153b181479735d9a254dfa2fcc3.tar.gz
nixpkgs-6f239d7309690153b181479735d9a254dfa2fcc3.tar.bz2
nixpkgs-6f239d7309690153b181479735d9a254dfa2fcc3.tar.lz
nixpkgs-6f239d7309690153b181479735d9a254dfa2fcc3.tar.xz
nixpkgs-6f239d7309690153b181479735d9a254dfa2fcc3.tar.zst
nixpkgs-6f239d7309690153b181479735d9a254dfa2fcc3.zip
Revert "setup.sh: fatal: This word should yield a string, but it contains an array"
This reverts commit bf99a819a16089a8df03cc06262f06b31dfb683c.
It caused regressions in some packages; see:
https://github.com/NixOS/nixpkgs/commit/bf99a819a160
Diffstat (limited to 'pkgs/stdenv/generic')
-rw-r--r--pkgs/stdenv/generic/setup.sh17
1 files changed, 10 insertions, 7 deletions
diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh
index 3515439337c..4ae561fbca0 100644
--- a/pkgs/stdenv/generic/setup.sh
+++ b/pkgs/stdenv/generic/setup.sh
@@ -368,13 +368,16 @@ findInputs() {
     local var="${!varRef}"
     unset -v varVar varRef
 
-    # var is a reference to an array and can sometimes be undefined
-    # so checking the array with "${!var}[@]" does not work
-    # check if $pkgs is in the var ref array
-    # TODO(@Ericson2314): Restore using associative array
-    if [[ "${var}[*]" = *" $pkg "* ]]; then
-        return 0
-    fi
+    # TODO(@Ericson2314): Restore using associative array once Darwin
+    # nix-shell doesn't use impure bash. This should replace the O(n)
+    # case with an O(1) hash map lookup, assuming bash is implemented
+    # well :D.
+    local varSlice="${var}[*]"
+    # ${..-} to hack around old bash empty array problem
+    case "${!varSlice-}" in
+        *" $pkg "*) return 0 ;;
+    esac
+    unset -v varSlice
 
     eval "$var"'+=("$pkg")'