summary refs log tree commit diff
path: root/pkgs/stdenv/generic
diff options
context:
space:
mode:
authorhappysalada <raphael@megzari.com>2021-06-22 10:23:51 +0900
committerRaphael Megzari <raphael@megzari.com>2021-07-06 09:27:18 +0900
commitac27528177b35e45aa5c2dc0dcd40e06c6c41b05 (patch)
tree4528de872607c276c2dd6fc39f15da2c78f357af /pkgs/stdenv/generic
parentc335a18ea5c46ce6d8e8053c079295950ad7bb9e (diff)
downloadnixpkgs-ac27528177b35e45aa5c2dc0dcd40e06c6c41b05.tar
nixpkgs-ac27528177b35e45aa5c2dc0dcd40e06c6c41b05.tar.gz
nixpkgs-ac27528177b35e45aa5c2dc0dcd40e06c6c41b05.tar.bz2
nixpkgs-ac27528177b35e45aa5c2dc0dcd40e06c6c41b05.tar.lz
nixpkgs-ac27528177b35e45aa5c2dc0dcd40e06c6c41b05.tar.xz
nixpkgs-ac27528177b35e45aa5c2dc0dcd40e06c6c41b05.tar.zst
nixpkgs-ac27528177b35e45aa5c2dc0dcd40e06c6c41b05.zip
setup.sh: arithmetic fixes
this one is a little more controversial
see https://github.com/oilshell/oil/issues/864
for more information
Diffstat (limited to 'pkgs/stdenv/generic')
-rw-r--r--pkgs/stdenv/generic/setup.sh54
1 files changed, 27 insertions, 27 deletions
diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh
index ebdc2cdba84..563e32f07ab 100644
--- a/pkgs/stdenv/generic/setup.sh
+++ b/pkgs/stdenv/generic/setup.sh
@@ -348,14 +348,14 @@ declare -a allPlatOffsets=(-1 0 1)
 # implements.
 findInputs() {
     local -r pkg="$1"
-    local -ri hostOffset="$2"
-    local -ri targetOffset="$3"
+    local -r hostOffset="$2"
+    local -r targetOffset="$3"
 
     # Sanity check
-    (( "$hostOffset" <= "$targetOffset" )) || exit -1
+    (( "$hostOffset" <= "$targetOffset" )) || exit 1
 
-    local varVar="${pkgAccumVarVars[$hostOffset + 1]}"
-    local varRef="$varVar[\$targetOffset - \$hostOffset]"
+    local varVar="${pkgAccumVarVars[$(( hostOffset + 1 ))]}"
+    local varRef="${varVar}[$(( targetOffset - hostOffset ))]"
     local var="${!varRef}"
     unset -v varVar varRef
 
@@ -363,7 +363,7 @@ findInputs() {
     # 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[*]"
+    local varSlice="${var}[*]"
     # ${..-} to hack around old bash empty array problem
     case "${!varSlice-}" in
         *" $pkg "*) return 0 ;;
@@ -380,28 +380,28 @@ findInputs() {
     # The current package's host and target offset together
     # provide a <=-preserving homomorphism from the relative
     # offsets to current offset
-    local -i mapOffsetResult
+    local mapOffsetResult
     function mapOffset() {
-        local -ri inputOffset="$1"
+        local -r inputOffset="$1"
         if (( "$inputOffset" <= 0 )); then
-            local -ri outputOffset="$inputOffset + $hostOffset"
+            local -r outputOffset=$(( inputOffset + hostOffset ))
         else
-            local -ri outputOffset="$inputOffset - 1 + $targetOffset"
+            local -r outputOffset=$(( inputOffset - 1 + targetOffset ))
         fi
         mapOffsetResult="$outputOffset"
     }
 
     # Host offset relative to that of the package whose immediate
     # dependencies we are currently exploring.
-    local -i relHostOffset
+    local relHostOffset
     for relHostOffset in "${allPlatOffsets[@]}"; do
         # `+ 1` so we start at 0 for valid index
-        local files="${propagatedDepFilesVars[$relHostOffset + 1]}"
+        local files="${propagatedDepFilesVars[$(( relHostOffset + 1 ))]}"
 
         # Host offset relative to the package currently being
         # built---as absolute an offset as will be used.
         mapOffset relHostOffset
-        local -i hostOffsetNext="$mapOffsetResult"
+        local hostOffsetNext="$mapOffsetResult"
 
         # Ensure we're in bounds relative to the package currently
         # being built.
@@ -409,18 +409,18 @@ findInputs() {
 
         # Target offset relative to the *host* offset of the package
         # whose immediate dependencies we are currently exploring.
-        local -i relTargetOffset
+        local relTargetOffset
         for relTargetOffset in "${allPlatOffsets[@]}"; do
             (( "$relHostOffset" <= "$relTargetOffset" )) || continue
 
-            local fileRef="${files}[$relTargetOffset - $relHostOffset]"
+            local fileRef="${files}[$(( relTargetOffset - relHostOffset ))]"
             local file="${!fileRef}"
             unset -v fileRef
 
             # Target offset relative to the package currently being
             # built.
             mapOffset relTargetOffset
-            local -i targetOffsetNext="$mapOffsetResult"
+            local targetOffsetNext="$mapOffsetResult"
 
             # Once again, ensure we're in bounds relative to the
             # package currently being built.
@@ -474,11 +474,11 @@ done
 # Add package to the future PATH and run setup hooks
 activatePackage() {
     local pkg="$1"
-    local -ri hostOffset="$2"
-    local -ri targetOffset="$3"
+    local -r hostOffset="$2"
+    local -r targetOffset="$3"
 
     # Sanity check
-    (( "$hostOffset" <= "$targetOffset" )) || exit -1
+    (( "$hostOffset" <= "$targetOffset" )) || exit 1
 
     if [ -f "$pkg" ]; then
         source "$pkg"
@@ -509,14 +509,14 @@ activatePackage() {
 }
 
 _activatePkgs() {
-    local -i hostOffset targetOffset
+    local hostOffset targetOffset
     local pkg
 
     for hostOffset in "${allPlatOffsets[@]}"; do
-        local pkgsVar="${pkgAccumVarVars[$hostOffset + 1]}"
+        local pkgsVar="${pkgAccumVarVars[$(( hostOffset + 1 ))]}"
         for targetOffset in "${allPlatOffsets[@]}"; do
             (( "$hostOffset" <= "$targetOffset" )) || continue
-            local pkgsRef="${pkgsVar}[$targetOffset - $hostOffset]"
+            local pkgsRef="${pkgsVar}[$(( targetOffset - hostOffset ))]"
             local pkgsSlice="${!pkgsRef}[@]"
             for pkg in ${!pkgsSlice+"${!pkgsSlice}"}; do
                 activatePackage "$pkg" "$hostOffset" "$targetOffset"
@@ -537,15 +537,15 @@ _activatePkgs
 # with this information to the relevant env hook array, but bash
 # doesn't have closures, so it's easier to just pass this in.
 _addToEnv() {
-    local -i depHostOffset depTargetOffset
+    local depHostOffset depTargetOffset
     local pkg
 
     for depHostOffset in "${allPlatOffsets[@]}"; do
-        local hookVar="${pkgHookVarVars[$depHostOffset + 1]}"
-        local pkgsVar="${pkgAccumVarVars[$depHostOffset + 1]}"
+        local hookVar="${pkgHookVarVars[$(( depHostOffset + 1 ))]}"
+        local pkgsVar="${pkgAccumVarVars[$(( depHostOffset + 1 ))]}"
         for depTargetOffset in "${allPlatOffsets[@]}"; do
             (( "$depHostOffset" <= "$depTargetOffset" )) || continue
-            local hookRef="${hookVar}[$depTargetOffset - $depHostOffset]"
+            local hookRef="${hookVar}[$(( depTargetOffset - depHostOffset ))]"
             if [[ -z "${strictDeps-}" ]]; then
 
                 # Keep track of which packages we have visited before.
@@ -570,7 +570,7 @@ _addToEnv() {
                     visitedPkgs+=" $pkg"
                 done
             else
-                local pkgsRef="${pkgsVar}[$depTargetOffset - $depHostOffset]"
+                local pkgsRef="${pkgsVar}[$(( depTargetOffset - depHostOffset ))]"
                 local pkgsSlice="${!pkgsRef}[@]"
                 for pkg in ${!pkgsSlice+"${!pkgsSlice}"}; do
                     runHook "${!hookRef}" "$pkg"