stdenv/generic/setup.sh: enable parallel installs by default

The primary motivating example is openssl:

Before the change full package build took 1m54s minutes.
After the change full package build takes 59s.

About a 2x speedup.

The difference is visible because openssl builds hundreds of manpages
spawning a perl process per manual in `install` phase. Such a workload
is very easy to parallelize.

Another example would be `autotools`+`libtool` based build system where
install step requires relinking. The more binaries there are to relink
the more gain it will be to do it in parallel.

The change enables parallel installs by default only for buiilds that
already have parallel builds enabled. There is a high chance those build
systems already handle parallelism well but some packages will fail.

Consistently propagated the enableParallelBuilding to:
- cmake (enabled by default, similar to builds)
- ninja (set parallelism explicitly, don't rely on default)
- bmake (enable when requested)
- scons (enable when requested)
- meson (set parallelism explicitly, don't rely on default)
- waf (set parallelism explicitly, don't rely on default)
- qmake-4/5/6 (enable by default, similar to builds)
- xorg (always enable, similar to builds)

+44
+5
pkgs/development/libraries/qt-4.x/4.8/qmake-hook.sh
··· 8 echo "qmake4Hook: enabled parallel building" 9 fi 10 11 runHook postConfigure 12 } 13
··· 8 echo "qmake4Hook: enabled parallel building" 9 fi 10 11 + if ! [[ -v enableParallelInstalling ]]; then 12 + enableParallelInstalling=1 13 + echo "qmake: enabled parallel installing" 14 + fi 15 + 16 runHook postConfigure 17 } 18
+5
pkgs/development/libraries/qt-5/hooks/qmake-hook.sh
··· 38 echo "qmake: enabled parallel building" 39 fi 40 41 runHook postConfigure 42 } 43
··· 38 echo "qmake: enabled parallel building" 39 fi 40 41 + if ! [[ -v enableParallelInstalling ]]; then 42 + enableParallelInstalling=1 43 + echo "qmake: enabled parallel installing" 44 + fi 45 + 46 runHook postConfigure 47 } 48
+5
pkgs/development/libraries/qt-6/hooks/qmake-hook.sh
··· 40 echo "qmake: enabled parallel building" 41 fi 42 43 runHook postConfigure 44 } 45
··· 40 echo "qmake: enabled parallel building" 41 fi 42 43 + if ! [[ -v enableParallelInstalling ]]; then 44 + enableParallelInstalling=1 45 + echo "qmake: enabled parallel installing" 46 + fi 47 + 48 runHook postConfigure 49 } 50
+1
pkgs/development/tools/build-managers/bmake/setup-hook.sh
··· 76 77 # shellcheck disable=SC2086 78 local flagsArray=( 79 SHELL=$SHELL 80 # Old bash empty array hack 81 $makeFlags ${makeFlagsArray+"${makeFlagsArray[@]}"}
··· 76 77 # shellcheck disable=SC2086 78 local flagsArray=( 79 + ${enableParallelInstalling:+-j${NIX_BUILD_CORES}} 80 SHELL=$SHELL 81 # Old bash empty array hack 82 $makeFlags ${makeFlagsArray+"${makeFlagsArray[@]}"}
+5
pkgs/development/tools/build-managers/cmake/setup-hook.sh
··· 130 echo "cmake: enabled parallel building" 131 fi 132 133 runHook postConfigure 134 } 135
··· 130 echo "cmake: enabled parallel building" 131 fi 132 133 + if ! [[ -v enableParallelInstalling ]]; then 134 + enableParallelInstalling=1 135 + echo "cmake: enabled parallel installing" 136 + fi 137 + 138 runHook postConfigure 139 } 140
+5
pkgs/development/tools/build-managers/meson/setup-hook.sh
··· 28 echo "meson: enabled parallel building" 29 fi 30 31 runHook postConfigure 32 } 33
··· 28 echo "meson: enabled parallel building" 29 fi 30 31 + if ! [[ -v enableParallelInstalling ]]; then 32 + enableParallelInstalling=1 33 + echo "meson: enabled parallel installing" 34 + fi 35 + 36 runHook postConfigure 37 } 38
+8
pkgs/development/tools/build-managers/ninja/setup-hook.sh
··· 53 ninjaInstallPhase() { 54 runHook preInstall 55 56 # shellcheck disable=SC2086 57 local flagsArray=( 58 $ninjaFlags "${ninjaFlagsArray[@]}" 59 ${installTargets:-install} 60 )
··· 53 ninjaInstallPhase() { 54 runHook preInstall 55 56 + local buildCores=1 57 + 58 + # Parallel building is enabled by default. 59 + if [ "${enableParallelInstalling-1}" ]; then 60 + buildCores="$NIX_BUILD_CORES" 61 + fi 62 + 63 # shellcheck disable=SC2086 64 local flagsArray=( 65 + -j$buildCores 66 $ninjaFlags "${ninjaFlagsArray[@]}" 67 ${installTargets:-install} 68 )
+1
pkgs/development/tools/build-managers/scons/setup-hook.sh
··· 33 fi 34 35 local flagsArray=( 36 $sconsFlags ${sconsFlagsArray[@]} 37 $installFlags ${installFlagsArray[@]} 38 ${installTargets:-install}
··· 33 fi 34 35 local flagsArray=( 36 + ${enableParallelInstalling:+-j${NIX_BUILD_CORES}} 37 $sconsFlags ${sconsFlagsArray[@]} 38 $installFlags ${installFlagsArray[@]} 39 ${installTargets:-install}
+6
pkgs/development/tools/build-managers/wafHook/setup-hook.sh
··· 30 echo "waf: enabled parallel building" 31 fi 32 33 runHook postConfigure 34 } 35 ··· 68 fi 69 70 local flagsArray=( 71 $wafFlags ${wafFlagsArray[@]} 72 $installFlags ${installFlagsArray[@]} 73 ${installTargets:-install}
··· 30 echo "waf: enabled parallel building" 31 fi 32 33 + if ! [[ -v enableParallelInstalling ]]; then 34 + enableParallelInstalling=1 35 + echo "waf: enabled parallel installing" 36 + fi 37 + 38 runHook postConfigure 39 } 40 ··· 73 fi 74 75 local flagsArray=( 76 + ${enableParallelInstalling:+-j ${NIX_BUILD_CORES}} 77 $wafFlags ${wafFlagsArray[@]} 78 $installFlags ${installFlagsArray[@]} 79 ${installTargets:-install}
+1
pkgs/servers/x11/xorg/builder.sh
··· 37 38 39 enableParallelBuilding=1 40 41 genericBuild
··· 37 38 39 enableParallelBuilding=1 40 + enableParallelInstalling=1 41 42 genericBuild
+1
pkgs/stdenv/generic/make-derivation.nix
··· 433 } // lib.optionalAttrs (enableParallelBuilding) { 434 inherit enableParallelBuilding; 435 enableParallelChecking = attrs.enableParallelChecking or true; 436 } // lib.optionalAttrs (hardeningDisable != [] || hardeningEnable != [] || stdenv.hostPlatform.isMusl) { 437 NIX_HARDENING_ENABLE = enabledHardeningOptions; 438 } // lib.optionalAttrs (stdenv.hostPlatform.isx86_64 && stdenv.hostPlatform ? gcc.arch) {
··· 433 } // lib.optionalAttrs (enableParallelBuilding) { 434 inherit enableParallelBuilding; 435 enableParallelChecking = attrs.enableParallelChecking or true; 436 + enableParallelInstalling = attrs.enableParallelInstalling or true; 437 } // lib.optionalAttrs (hardeningDisable != [] || hardeningEnable != [] || stdenv.hostPlatform.isMusl) { 438 NIX_HARDENING_ENABLE = enabledHardeningOptions; 439 } // lib.optionalAttrs (stdenv.hostPlatform.isx86_64 && stdenv.hostPlatform ? gcc.arch) {
+1
pkgs/stdenv/generic/setup.sh
··· 1376 1377 # shellcheck disable=SC2086 1378 local flagsArray=( 1379 SHELL=$SHELL 1380 ) 1381 _accumFlagsArray makeFlags makeFlagsArray installFlags installFlagsArray
··· 1376 1377 # shellcheck disable=SC2086 1378 local flagsArray=( 1379 + ${enableParallelInstalling:+-j${NIX_BUILD_CORES}} 1380 SHELL=$SHELL 1381 ) 1382 _accumFlagsArray makeFlags makeFlagsArray installFlags installFlagsArray