From 40d415f4df5548679dcb47331c83a2d4e7741ae8 Mon Sep 17 00:00:00 2001 From: Randy Eckenrode Date: Sun, 22 Sep 2024 23:20:16 -0400 Subject: [PATCH] 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. --- .../darwin-min-version-hook/setup-hook.sh | 26 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 12 +++++++++ 2 files changed, 38 insertions(+) create mode 100644 pkgs/os-specific/darwin/darwin-min-version-hook/setup-hook.sh 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 {