pkgs/stdenv/generic/setup.sh: fix unbound variables and pass ShellCheck checks (#298831)

* pkgs/stdenv/generic/setup.sh: supress ShellCheck error about Bash array indexing syntax

* pkgs/stdenv/generic/setup.sh: loop by per-line read

* pkgs/stdenv/generic/setup.sh: fix variable quoting

* pkgs/stdenv/generic/setup.sh: separate declaration and assignment

authored by Yueh-Shun Li and committed by GitHub c65cf1b9 0d7af056

+25 -11
+25 -11
pkgs/stdenv/generic/setup.sh
··· 355 local -n nameref="$name" 356 case "$name" in 357 *Array) 358 flagsArray+=( ${nameref+"${nameref[@]}"} ) ;; 359 *) 360 flagsArray+=( ${nameref-} ) ;; 361 esac 362 done ··· 576 # Sanity check 577 (( hostOffset <= targetOffset )) || exit 1 578 579 local varVar="${pkgAccumVarVars[hostOffset + 1]}" 580 local varRef="$varVar[$((targetOffset - hostOffset))]" 581 local var="${!varRef}" 582 unset -v varVar varRef ··· 585 # nix-shell doesn't use impure bash. This should replace the O(n) 586 # case with an O(1) hash map lookup, assuming bash is implemented 587 # well :D. 588 local varSlice="$var[*]" 589 # ${..-} to hack around old bash empty array problem 590 case "${!varSlice-}" in ··· 999 # so some substitutions such as name don't have to be in the env attrset 1000 # when __structuredAttrs is enabled 1001 export system pname name version 1002 - for varName in $(awk 'BEGIN { for (v in ENVIRON) if (v ~ /^[a-z][a-zA-Z0-9_]*$/) print v }'); do 1003 if (( "${NIX_DEBUG:-0}" >= 1 )); then 1004 printf "@%s@ -> %q\n" "${varName}" "${!varName}" >&2 1005 fi 1006 args+=("--subst-var" "$varName") 1007 - done 1008 } 1009 1010 substituteAllStream() { ··· 1175 if [ -n "$__structuredAttrs" ]; then 1176 srcsArray=( "${srcs[@]}" ) 1177 else 1178 srcsArray=( $srcs ) 1179 fi 1180 ··· 1242 1243 local -a patchesArray 1244 if [ -n "$__structuredAttrs" ]; then 1245 patchesArray=( ${patches:+"${patches[@]}"} ) 1246 else 1247 patchesArray=( ${patches:-} ) 1248 fi 1249 ··· 1269 if [ -n "$__structuredAttrs" ]; then 1270 flagsArray=( "${patchFlags[@]:--p1}" ) 1271 else 1272 - # shellcheck disable=SC2086 1273 flagsArray=( ${patchFlags:--p1} ) 1274 fi 1275 # "2>&1" is a hack to make patch fail if the decompressor fails (nonexistent patch, etc.) ··· 1382 # shellcheck disable=SC2086 1383 local flagsArray=( 1384 ${enableParallelBuilding:+-j${NIX_BUILD_CORES}} 1385 - SHELL=$SHELL 1386 ) 1387 _accumFlagsArray makeFlags makeFlagsArray buildFlags buildFlagsArray 1388 ··· 1407 if [[ -z "${checkTarget:-}" ]]; then 1408 #TODO(@oxij): should flagsArray influence make -n? 1409 if make -n ${makefile:+-f $makefile} check >/dev/null 2>&1; then 1410 - checkTarget=check 1411 elif make -n ${makefile:+-f $makefile} test >/dev/null 2>&1; then 1412 - checkTarget=test 1413 fi 1414 fi 1415 ··· 1420 # shellcheck disable=SC2086 1421 local flagsArray=( 1422 ${enableParallelChecking:+-j${NIX_BUILD_CORES}} 1423 - SHELL=$SHELL 1424 ) 1425 1426 _accumFlagsArray makeFlags makeFlagsArray 1427 if [ -n "$__structuredAttrs" ]; then 1428 flagsArray+=( "${checkFlags[@]:-VERBOSE=y}" ) 1429 else 1430 flagsArray+=( ${checkFlags:-VERBOSE=y} ) 1431 fi 1432 _accumFlagsArray checkFlagsArray 1433 flagsArray+=( ${checkTarget} ) 1434 1435 echoCmd 'check flags' "${flagsArray[@]}" ··· 1461 # shellcheck disable=SC2086 1462 local flagsArray=( 1463 ${enableParallelInstalling:+-j${NIX_BUILD_CORES}} 1464 - SHELL=$SHELL 1465 ) 1466 _accumFlagsArray makeFlags makeFlagsArray installFlags installFlagsArray 1467 if [ -n "$__structuredAttrs" ]; then 1468 flagsArray+=( "${installTargets[@]:-install}" ) 1469 else 1470 flagsArray+=( ${installTargets:-install} ) 1471 fi 1472 ··· 1548 # shellcheck disable=SC2086 1549 local flagsArray=( 1550 ${enableParallelChecking:+-j${NIX_BUILD_CORES}} 1551 - SHELL=$SHELL 1552 ) 1553 1554 _accumFlagsArray makeFlags makeFlagsArray \ 1555 installCheckFlags installCheckFlagsArray 1556 flagsArray+=( ${installCheckTarget:-installcheck} ) 1557 1558 echoCmd 'installcheck flags' "${flagsArray[@]}" ··· 1569 1570 local flagsArray=() 1571 _accumFlagsArray distFlags distFlagsArray 1572 flagsArray+=( ${distTarget:-dist} ) 1573 1574 echo 'dist flags: %q' "${flagsArray[@]}" ··· 1627 showPhaseHeader "$curPhase" 1628 dumpVars 1629 1630 - local startTime=$(date +"%s") 1631 1632 # Evaluate the variable named $curPhase if it exists, otherwise the 1633 # function named $curPhase. 1634 eval "${!curPhase:-$curPhase}" 1635 1636 - local endTime=$(date +"%s") 1637 1638 showPhaseFooter "$curPhase" "$startTime" "$endTime" 1639
··· 355 local -n nameref="$name" 356 case "$name" in 357 *Array) 358 + # shellcheck disable=SC2206 359 flagsArray+=( ${nameref+"${nameref[@]}"} ) ;; 360 *) 361 + # shellcheck disable=SC2206 362 flagsArray+=( ${nameref-} ) ;; 363 esac 364 done ··· 578 # Sanity check 579 (( hostOffset <= targetOffset )) || exit 1 580 581 + # shellcheck disable=SC1087 582 local varVar="${pkgAccumVarVars[hostOffset + 1]}" 583 + # shellcheck disable=SC1087 584 local varRef="$varVar[$((targetOffset - hostOffset))]" 585 local var="${!varRef}" 586 unset -v varVar varRef ··· 589 # nix-shell doesn't use impure bash. This should replace the O(n) 590 # case with an O(1) hash map lookup, assuming bash is implemented 591 # well :D. 592 + # shellcheck disable=SC1087 593 local varSlice="$var[*]" 594 # ${..-} to hack around old bash empty array problem 595 case "${!varSlice-}" in ··· 1004 # so some substitutions such as name don't have to be in the env attrset 1005 # when __structuredAttrs is enabled 1006 export system pname name version 1007 + while IFS='' read -r varName; do 1008 if (( "${NIX_DEBUG:-0}" >= 1 )); then 1009 printf "@%s@ -> %q\n" "${varName}" "${!varName}" >&2 1010 fi 1011 args+=("--subst-var" "$varName") 1012 + done < <(awk 'BEGIN { for (v in ENVIRON) if (v ~ /^[a-z][a-zA-Z0-9_]*$/) print v }') 1013 } 1014 1015 substituteAllStream() { ··· 1180 if [ -n "$__structuredAttrs" ]; then 1181 srcsArray=( "${srcs[@]}" ) 1182 else 1183 + # shellcheck disable=SC2206 1184 srcsArray=( $srcs ) 1185 fi 1186 ··· 1248 1249 local -a patchesArray 1250 if [ -n "$__structuredAttrs" ]; then 1251 + # shellcheck disable=SC2206 1252 patchesArray=( ${patches:+"${patches[@]}"} ) 1253 else 1254 + # shellcheck disable=SC2206 1255 patchesArray=( ${patches:-} ) 1256 fi 1257 ··· 1277 if [ -n "$__structuredAttrs" ]; then 1278 flagsArray=( "${patchFlags[@]:--p1}" ) 1279 else 1280 + # shellcheck disable=SC2086,SC2206 1281 flagsArray=( ${patchFlags:--p1} ) 1282 fi 1283 # "2>&1" is a hack to make patch fail if the decompressor fails (nonexistent patch, etc.) ··· 1390 # shellcheck disable=SC2086 1391 local flagsArray=( 1392 ${enableParallelBuilding:+-j${NIX_BUILD_CORES}} 1393 + SHELL="$SHELL" 1394 ) 1395 _accumFlagsArray makeFlags makeFlagsArray buildFlags buildFlagsArray 1396 ··· 1415 if [[ -z "${checkTarget:-}" ]]; then 1416 #TODO(@oxij): should flagsArray influence make -n? 1417 if make -n ${makefile:+-f $makefile} check >/dev/null 2>&1; then 1418 + checkTarget="check" 1419 elif make -n ${makefile:+-f $makefile} test >/dev/null 2>&1; then 1420 + checkTarget="test" 1421 fi 1422 fi 1423 ··· 1428 # shellcheck disable=SC2086 1429 local flagsArray=( 1430 ${enableParallelChecking:+-j${NIX_BUILD_CORES}} 1431 + SHELL="$SHELL" 1432 ) 1433 1434 _accumFlagsArray makeFlags makeFlagsArray 1435 if [ -n "$__structuredAttrs" ]; then 1436 flagsArray+=( "${checkFlags[@]:-VERBOSE=y}" ) 1437 else 1438 + # shellcheck disable=SC2206 1439 flagsArray+=( ${checkFlags:-VERBOSE=y} ) 1440 fi 1441 _accumFlagsArray checkFlagsArray 1442 + # shellcheck disable=SC2206 1443 flagsArray+=( ${checkTarget} ) 1444 1445 echoCmd 'check flags' "${flagsArray[@]}" ··· 1471 # shellcheck disable=SC2086 1472 local flagsArray=( 1473 ${enableParallelInstalling:+-j${NIX_BUILD_CORES}} 1474 + SHELL="$SHELL" 1475 ) 1476 _accumFlagsArray makeFlags makeFlagsArray installFlags installFlagsArray 1477 if [ -n "$__structuredAttrs" ]; then 1478 flagsArray+=( "${installTargets[@]:-install}" ) 1479 else 1480 + # shellcheck disable=SC2206 1481 flagsArray+=( ${installTargets:-install} ) 1482 fi 1483 ··· 1559 # shellcheck disable=SC2086 1560 local flagsArray=( 1561 ${enableParallelChecking:+-j${NIX_BUILD_CORES}} 1562 + SHELL="$SHELL" 1563 ) 1564 1565 _accumFlagsArray makeFlags makeFlagsArray \ 1566 installCheckFlags installCheckFlagsArray 1567 + # shellcheck disable=SC2206 1568 flagsArray+=( ${installCheckTarget:-installcheck} ) 1569 1570 echoCmd 'installcheck flags' "${flagsArray[@]}" ··· 1581 1582 local flagsArray=() 1583 _accumFlagsArray distFlags distFlagsArray 1584 + # shellcheck disable=SC2206 1585 flagsArray+=( ${distTarget:-dist} ) 1586 1587 echo 'dist flags: %q' "${flagsArray[@]}" ··· 1640 showPhaseHeader "$curPhase" 1641 dumpVars 1642 1643 + local startTime endTime 1644 + startTime=$(date +"%s") 1645 1646 # Evaluate the variable named $curPhase if it exists, otherwise the 1647 # function named $curPhase. 1648 eval "${!curPhase:-$curPhase}" 1649 1650 + endTime=$(date +"%s") 1651 1652 showPhaseFooter "$curPhase" "$startTime" "$endTime" 1653