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