mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-04 20:13:21 +00:00
556790248f
This is a new packaging of the Darwin SDK. Instead of splitting libraries and frameworks into separate packages, it provides a single package for the whole SDK. # Features - Vendored files are removed from the SDK. There are 50+ different packages that are vendored by upstream (depending on the version); - Components that are built in nixpkgs (either from upstream or from the source releases) are also removed. If they need to be included by default, they are propagated; - A single SDK pattern is used to package all SDKs, and scripts are provided to aid updating the SDK version and its source release versions. This makes adding new SDKs much easier; - SDK overrides are handled by adding the SDK version you require. If multiple SDKs are present, only the newest is used. It is possible to have different SDKs for each of build, host, and target platforms; - Private headers are no longer provided by default unless you use the SDK’s `privateFrameworksHook` to add them. It does the right thing when multiple SDKs are in your inputs; - Source releases for the SDK version are available via a passthru `sourceRelease` function. This is mostly useful for getting private headers for building source releases in the darwin attrset; and - The same versions of propagated components are used on both platforms (e.g., the same libresult, libiconv, etc). See `pkgs/by-name/ap/apple-sdk/README.md` for details on how the SDK derivation is structured and how to update it.
72 lines
2.2 KiB
Bash
72 lines
2.2 KiB
Bash
# Since the same derivation can be depended 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 intended to be used as part of other variables names like
|
|
# - $NIX_SOMETHING${role_post}
|
|
|
|
function getRole() {
|
|
case $1 in
|
|
-1)
|
|
role_post='_FOR_BUILD'
|
|
;;
|
|
0)
|
|
role_post=''
|
|
;;
|
|
1)
|
|
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 intended specifically for code-producing tool wrapper scripts
|
|
# `NIX_@wrapperName@_TARGET_*_@suffixSalt@` 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@_TARGET_BUILD_@suffixSalt@=1
|
|
;;
|
|
0)
|
|
export NIX_@wrapperName@_TARGET_HOST_@suffixSalt@=1
|
|
;;
|
|
1)
|
|
export NIX_@wrapperName@_TARGET_TARGET_@suffixSalt@=1
|
|
;;
|
|
*)
|
|
echo "@name@: used as improper sort of dependency" >&2
|
|
return 1
|
|
;;
|
|
esac
|
|
}
|