mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-04 19:45:54 +00:00
2110c0bd30
Also fix some setup hooks that unnecessarily used environment hooks, which revolted in the same variable being modified too many times.
76 lines
2.3 KiB
Bash
76 lines
2.3 KiB
Bash
# Since the same derivation can be depend on in multiple ways, we need to
|
|
# accumulate *each* role (i.e. host and target platforms relative the depending
|
|
# derivation) in which the derivation is used.
|
|
#
|
|
# The role is intened to be use as part of other variables names like
|
|
# - $NIX_${role_pre}_SOMETHING
|
|
# - $NIX_SOMETHING_${role_post}
|
|
|
|
function getRole() {
|
|
case $1 in
|
|
-1)
|
|
role_pre='BUILD_'
|
|
role_post='_FOR_BUILD'
|
|
;;
|
|
0)
|
|
role_pre=''
|
|
role_post=''
|
|
;;
|
|
1)
|
|
role_pre='TARGET_'
|
|
role_post='_FOR_TARGET'
|
|
;;
|
|
*)
|
|
echo "@name@: used as improper sort of dependency" >2
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# `hostOffset` describes how the host platform of the package is slid relative
|
|
# to the depending package. `targetOffset` likewise describes the target
|
|
# platform of the package. Both are brought into scope of the setup hook defined
|
|
# for dependency whose setup hook is being processed relative to the package
|
|
# being built.
|
|
|
|
function getHostRole() {
|
|
getRole "$hostOffset"
|
|
}
|
|
function getTargetRole() {
|
|
getRole "$targetOffset"
|
|
}
|
|
|
|
# `depHostOffset` describes how the host platform of the dependencies are slid
|
|
# relative to the depending package. `depTargetOffset` likewise describes the
|
|
# target platform of dependenices. Both are brought into scope of the
|
|
# environment hook defined for the dependency being applied relative to the
|
|
# package being built.
|
|
|
|
function getHostRoleEnvHook() {
|
|
getRole "$depHostOffset"
|
|
}
|
|
function getTargetRoleEnvHook() {
|
|
getRole "$depTargetOffset"
|
|
}
|
|
|
|
# This variant is inteneded specifically for code-prodocing tool wrapper scripts
|
|
# `NIX_@wrapperName@_@infixSalt@_TARGET_*` tracks this (needs to be an exported
|
|
# env var so can't use fancier data structures).
|
|
function getTargetRoleWrapper() {
|
|
case $targetOffset in
|
|
-1)
|
|
export NIX_@wrapperName@_@infixSalt@_TARGET_BUILD=1
|
|
;;
|
|
0)
|
|
export NIX_@wrapperName@_@infixSalt@_TARGET_HOST=1
|
|
;;
|
|
1)
|
|
export NIX_@wrapperName@_@infixSalt@_TARGET_TARGET=1
|
|
;;
|
|
*)
|
|
echo "@name@: used as improper sort of dependency" >2
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|