diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2017-08-03 12:45:06 -0400 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2017-12-30 22:04:21 -0500 |
commit | a036473a0a0c6100fce316e1444fc33ec6674b85 (patch) | |
tree | 28e6431bc6133b0e8cf8a8a6546ef52a36e110b7 /pkgs/build-support/cc-wrapper | |
parent | 7f3ca3e21a22fd3101b40cadb86899542dec2e35 (diff) | |
download | nixpkgs-a036473a0a0c6100fce316e1444fc33ec6674b85.tar nixpkgs-a036473a0a0c6100fce316e1444fc33ec6674b85.tar.gz nixpkgs-a036473a0a0c6100fce316e1444fc33ec6674b85.tar.bz2 nixpkgs-a036473a0a0c6100fce316e1444fc33ec6674b85.tar.lz nixpkgs-a036473a0a0c6100fce316e1444fc33ec6674b85.tar.xz nixpkgs-a036473a0a0c6100fce316e1444fc33ec6674b85.tar.zst nixpkgs-a036473a0a0c6100fce316e1444fc33ec6674b85.zip |
{bintools,cc}-wrapper: Fix setup hook to respect the role of the cc-compiler
We now have the information to properly determine the role the cc-wrapper dependency has, by taking advantage of `offset`. No longer use the soon-to-be-deprecated crossConfig environment variable, the temp hack used before this change.
Diffstat (limited to 'pkgs/build-support/cc-wrapper')
-rw-r--r-- | pkgs/build-support/cc-wrapper/setup-hook.sh | 52 |
1 files changed, 34 insertions, 18 deletions
diff --git a/pkgs/build-support/cc-wrapper/setup-hook.sh b/pkgs/build-support/cc-wrapper/setup-hook.sh index a922193ad2e..17877dc262c 100644 --- a/pkgs/build-support/cc-wrapper/setup-hook.sh +++ b/pkgs/build-support/cc-wrapper/setup-hook.sh @@ -54,19 +54,23 @@ # For more details, read the individual files where the mechanisms used to # accomplish this will be individually documented. +set -u + +# Skip setup hook if we're not a build-time dep +(( "$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 # function is guaranteed to be exactly the same. ccWrapper_addCVars () { - # The `depOffset` describes how the platforms of the dependencies are slid - # relative to the depending package. It is brought into scope of the - # environment hook defined as the role of the dependency being applied. - case $depOffset in + # The `depHostOffset` describes how the host platform of the dependencies + # are slid relative to the depending package. It is brought into scope of + # the environment hook defined as the role of the dependency being applied. + case $depHostOffset in -1) local role='BUILD_' ;; 0) local role='' ;; 1) local role='TARGET_' ;; - *) echo "cc-wrapper: Error: Cannot be used with $depOffset-offset deps, " >2; + *) echo "cc-wrapper: Error: Cannot be used with $depHostOffset-offset deps" >2; return 1 ;; esac @@ -87,20 +91,31 @@ ccWrapper_addCVars () { # # We also need to worry about what role is being added on *this* invocation of # setup-hook, which `role` tracks. -if [ -n "${crossConfig:-}" ]; then - export NIX_CC_WRAPPER_@infixSalt@_TARGET_BUILD=1 - role_pre='BUILD_' - role_post='_FOR_BUILD' -else - export NIX_CC_WRAPPER_@infixSalt@_TARGET_HOST=1 - role_pre='' - role_post='' -fi +case $targetOffset in + -1) + export NIX_CC_WRAPPER_@infixSalt@_TARGET_BUILD=1 + role_pre='BUILD_' + role_post='_FOR_BUILD' + ;; + 0) + export NIX_CC_WRAPPER_@infixSalt@_TARGET_HOST=1 + role_pre='' + role_post='' + ;; + 1) + export NIX_CC_WRAPPER_@infixSalt@_TARGET_TARGET=1 + role_pre='TARGET_' + role_post='_FOR_TARGET' + ;; + *) + echo "cc-wrapper: used as improper sort of dependency" >2; + return 1 + ;; +esac -# Eventually the exact sort of env-hook we create will depend on the role. This -# is because based on what relative platform we are targeting, we use different -# dependencies. -envHooks+=(ccWrapper_addCVars) +# We use the `targetOffset` to choose the right env hook to accumulate the right +# sort of deps (those with that offset). +addEnvHooks "$targetOffset" ccWrapper_addCVars # Note 1: these come *after* $out in the PATH (see setup.sh). # Note 2: phase separation makes this look useless to shellcheck. @@ -131,3 +146,4 @@ export CXX${role_post}=@named_cxx@ # No local scope in sourced file unset -v role_pre role_post +set +u |