darwin: add darwinMinVersionHook

Adding the hook allows the deployment target to be changed without
having to mess with the stdenv. The can also be propagated, which is
useful for libraries that have a minimum deployment target higher than
the default in nixpkgs. In that case, they can propagate the hook to
ensure library users are not targeting an unsupported version.
This commit is contained in:
Randy Eckenrode 2024-09-22 23:20:16 -04:00
parent 08ad88285d
commit 40d415f4df
No known key found for this signature in database
GPG key ID: 64C1CD4EC2A600D9
2 changed files with 38 additions and 0 deletions

View file

@ -0,0 +1,26 @@
local role_post
getHostRole
# Compare the requested deployment target to the existing one. The deployment target has to be a version number,
# and this hook tries to do the right thing with deployment targets set outside of it, so it has to parse
# the version numbers for the comparison manually.
local darwinMinVersion=@deploymentTarget@
local darwinMinVersionVar=@darwinMinVersionVariable@${role_post}
local currentDeploymentTargetArr
IFS=. read -a currentDeploymentTargetArr <<< "${!darwinMinVersionVar-0.0.0}"
local darwinMinVersionArr
IFS=. read -a darwinMinVersionArr <<< "$darwinMinVersion"
local currentDeploymentTarget
currentDeploymentTarget=$(printf "%02d%02d%02d" "${currentDeploymentTargetArr[0]-0}" "${currentDeploymentTargetArr[1]-0}" "${currentDeploymentTargetArr[2]-0}")
darwinMinVersion=$(printf "%02d%02d%02d" "${darwinMinVersionArr[0]-0}" "${darwinMinVersionArr[1]-0}" "${darwinMinVersionArr[2]-0}")
if [ "$darwinMinVersion" -gt "$currentDeploymentTarget" ]; then
export "$darwinMinVersionVar"=@deploymentTarget@
fi
unset -v role_post currentDeploymentTarget currentDeploymentTargetArr darwinMinVersion darwinMinVersionArr darwinMinVersionVar

View file

@ -23740,6 +23740,18 @@ with pkgs;
plumed = callPackage ../development/libraries/science/chemistry/plumed { };
### DEVELOPMENT / LIBRARIES / DARWIN SDKS
darwinMinVersionHook =
deploymentTarget:
makeSetupHook {
name = "darwin-deployment-target-hook-${deploymentTarget}";
substitutions = {
darwinMinVersionVariable = lib.escapeShellArg stdenv.hostPlatform.darwinMinVersionVariable;
deploymentTarget = lib.escapeShellArg deploymentTarget;
};
} ../os-specific/darwin/darwin-min-version-hook/setup-hook.sh;
### DEVELOPMENT / LIBRARIES / AGDA
agdaPackages = callPackage ./agda-packages.nix {