diff --git a/pkgs/development/haskell-modules/generic-builder.nix b/pkgs/development/haskell-modules/generic-builder.nix index e097fd5af33e..a8da63493a43 100644 --- a/pkgs/development/haskell-modules/generic-builder.nix +++ b/pkgs/development/haskell-modules/generic-builder.nix @@ -211,7 +211,7 @@ stdenv.mkDerivation ({ configureFlags="${concatStringsSep " " defaultConfigureFlags} $configureFlags" # nativePkgs defined in stdenv/setup.hs - for p in $nativePkgs; do + for p in "''${!nativePkgs[@]}"; do if [ -d "$p/lib/${ghc.name}/package.conf.d" ]; then cp -f "$p/lib/${ghc.name}/package.conf.d/"*.conf $packageConfDir/ continue diff --git a/pkgs/development/interpreters/python/wrap.sh b/pkgs/development/interpreters/python/wrap.sh index 1c74e612b559..4b9b2024981a 100644 --- a/pkgs/development/interpreters/python/wrap.sh +++ b/pkgs/development/interpreters/python/wrap.sh @@ -86,7 +86,7 @@ wrapPythonProgramsIn() { _addToPythonPath() { local dir="$1" # Stop if we've already visited here. - if [ -n "${pythonPathsSeen[$dir]}" ]; then return; fi + [ -n "${pythonPathsSeen[$dir]}" ] || return 0 pythonPathsSeen[$dir]=1 # addToSearchPath is defined in stdenv/generic/setup.sh. It will have # the effect of calling `export program_X=$dir/...:$program_X`. diff --git a/pkgs/servers/x11/xorg/builder.sh b/pkgs/servers/x11/xorg/builder.sh index 055886374df4..3a8cf6fa6c8e 100644 --- a/pkgs/servers/x11/xorg/builder.sh +++ b/pkgs/servers/x11/xorg/builder.sh @@ -18,14 +18,14 @@ postInstall() { for r in $requires; do if test -n "$crossConfig"; then - for p in $crossPkgs; do + for p in "${!crossPkgs[@]}"; do if test -e $p/lib/pkgconfig/$r.pc; then echo " found requisite $r in $p" propagatedBuildInputs="$propagatedBuildInputs $p" fi done else - for p in $nativePkgs; do + for p in "${!nativePkgs[@]}"; do if test -e $p/lib/pkgconfig/$r.pc; then echo " found requisite $r in $p" propagatedNativeBuildInputs="$propagatedNativeBuildInputs $p" diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index de94565ed6d7..e90c7e03473b 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -275,17 +275,14 @@ runHook addInputsHook # Recursively find all build inputs. findInputs() { - local pkg="$1" + local pkg=$1 local var=$2 + local -n varDeref=$var local propagatedBuildInputsFile=$3 - case ${!var} in - *\ $pkg\ *) - return 0 - ;; - esac - - eval $var="'${!var} $pkg '" + # Stop if we've already added this one + [[ -z "${varDeref["$pkg"]}" ]] || return 0 + varDeref["$pkg"]=1 if ! [ -e "$pkg" ]; then echo "build input $pkg does not exist" >&2 @@ -296,8 +293,8 @@ findInputs() { source "$pkg" fi - if [ -d $1/bin ]; then - addToSearchPath _PATH $1/bin + if [ -d "$pkg/bin" ]; then + addToSearchPath _PATH "$pkg/bin" fi if [ -f "$pkg/nix-support/setup-hook" ]; then @@ -317,19 +314,19 @@ findInputs() { if [ -z "$crossConfig" ]; then # Not cross-compiling - both buildInputs (and variants like propagatedBuildInputs) # are handled identically to nativeBuildInputs - nativePkgs="" + declare -gA nativePkgs for i in $nativeBuildInputs $buildInputs \ $defaultNativeBuildInputs $defaultBuildInputs \ $propagatedNativeBuildInputs $propagatedBuildInputs; do findInputs $i nativePkgs propagated-native-build-inputs done else - crossPkgs="" + declare -gA crossPkgs for i in $buildInputs $defaultBuildInputs $propagatedBuildInputs; do findInputs $i crossPkgs propagated-build-inputs done - nativePkgs="" + declare -gA nativePkgs for i in $nativeBuildInputs $defaultNativeBuildInputs $propagatedNativeBuildInputs; do findInputs $i nativePkgs propagated-native-build-inputs done @@ -345,7 +342,7 @@ _addToNativeEnv() { runHook envHook "$pkg" } -for i in $nativePkgs; do +for i in "${!nativePkgs[@]}"; do _addToNativeEnv $i done @@ -356,7 +353,7 @@ _addToCrossEnv() { runHook crossEnvHook "$pkg" } -for i in $crossPkgs; do +for i in "${!crossPkgs[@]}"; do _addToCrossEnv $i done