diff --git a/pkgs/os-specific/darwin/darwin-min-version-hook/setup-hook.sh b/pkgs/os-specific/darwin/darwin-min-version-hook/setup-hook.sh new file mode 100644 index 000000000000..17a42eb02ef4 --- /dev/null +++ b/pkgs/os-specific/darwin/darwin-min-version-hook/setup-hook.sh @@ -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 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b6744b93ea24..fd4ca3df70c7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -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 {