stdenv-setup: Ease the transition with native builds

- All deps go on the PATH

 - CC and Bintools wrappers with their host != depender's host still get their
   setup hooks run.

 - Environment hooks get applied to all packages

This isn't so elegent, but eases the transition on a very significant
PR.
This commit is contained in:
John Ericson 2017-08-28 11:33:08 -04:00
parent f083248290
commit 469fd89832
3 changed files with 38 additions and 13 deletions

View file

@ -4,8 +4,11 @@
set -u
# Skip setup hook if we're not a build-time dep
(( "$hostOffset" < 0 )) || return 0
# Skip setup hook if we're neither a build-time dep, nor, temporarily, doing a
# native compile.
#
# TODO(@Ericson2314): No native exception
[[ -z ${crossConfig-} ]] || (( "$hostOffset" < 0 )) || return 0
bintoolsWrapper_addLDVars () {
case $depHostOffset in

View file

@ -56,8 +56,11 @@
set -u
# Skip setup hook if we're not a build-time dep
(( "$hostOffset" < 0 )) || return 0
# Skip setup hook if we're neither a build-time dep, nor, temporarily, doing a
# native compile.
#
# TODO(@Ericson2314): No native exception
[[ -z ${crossConfig-} ]] || (( "$hostOffset" < 0 )) || return 0
# It's fine that any other cc-wrapper will redefine this. Bash functions close
# over no state, and there's no @-substitutions within, so any redefined

View file

@ -506,10 +506,12 @@ activatePackage() {
# Only dependencies whose host platform is guaranteed to match the
# build platform are included here. That would be `depsBuild*`,
# and legacy `nativeBuildInputs`. Other aren't because of cross
# compiling, and we want to have consistent rules whether or not
# we are cross compiling.
if [[ "$hostOffset" -le -1 && -d "$pkg/bin" ]]; then
# and legacy `nativeBuildInputs`, in general. If we aren't cross
# compiling, however, everything can be put on the PATH. To ease
# the transition, we do include everything in thatcase.
#
# TODO(@Ericson2314): Don't special-case native compilation
if [[ ( -z "${crossConfig-}" || "$hostOffset" -le -1 ) && -d "$pkg/bin" ]]; then
addToSearchPath _PATH "$pkg/bin"
fi
@ -559,11 +561,28 @@ _addToEnv() {
for depTargetOffset in "${allPlatOffsets[@]}"; do
(( "$depHostOffset" <= "$depTargetOffset" )) || continue
local hookRef="${hookVar}[$depTargetOffset - $depHostOffset]"
local pkgsRef="${pkgsVar}[$depTargetOffset - $depHostOffset]"
local pkgsSlice="${!pkgsRef}[@]"
for pkg in ${!pkgsSlice+"${!pkgsSlice}"}; do
runHook "${!hookRef}" "$pkg"
done
if [[ -z "${crossConfig-}" ]]; then
# Apply environment hooks to all packages during native
# compilation to ease the transition.
#
# TODO(@Ericson2314): Don't special-case native compilation
for pkg in \
${pkgsBuildBuild+"${pkgsBuildBuild[@]}"} \
${pkgsBuildHost+"${pkgsBuildHost[@]}"} \
${pkgsBuildTarget+"${pkgsBuildTarget[@]}"} \
${pkgsHostHost+"${pkgsHostHost[@]}"} \
${pkgsHostTarget+"${pkgsHostTarget[@]}"} \
${pkgsTargetTarget+"${pkgsTargetTarget[@]}"}
do
runHook "${!hookRef}" "$pkg"
done
else
local pkgsRef="${pkgsVar}[$depTargetOffset - $depHostOffset]"
local pkgsSlice="${!pkgsRef}[@]"
for pkg in ${!pkgsSlice+"${!pkgsSlice}"}; do
runHook "${!hookRef}" "$pkg"
done
fi
done
done
}