From 50d046c32a1924066b87392d8b2ebb14e509e65c Mon Sep 17 00:00:00 2001 From: Randy Eckenrode Date: Fri, 27 Oct 2023 20:19:11 -0400 Subject: [PATCH 1/4] stdenvAdapters.overrideSDK: update the SDK version recursively Update all propagated build inputs recursively, so that propagated inputs with propagated inputs use the correct SDK. --- pkgs/stdenv/adapters.nix | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix index dd3dcfd6f3ac..9230ce071c3b 100644 --- a/pkgs/stdenv/adapters.nix +++ b/pkgs/stdenv/adapters.nix @@ -263,21 +263,24 @@ rec { sdk = pkgs.darwin."apple_sdk_${lib.replaceStrings [ "." ] [ "_" ] darwinSdkVersion}"; - isSDKFramework = pkg: lib.hasPrefix "apple-framework-" (lib.getName pkg); - replacePropagatedFrameworks = pkg: let - propagatedFrameworks = lib.filter isSDKFramework pkg.propagatedBuildInputs; + propagatedInputs = pkg.propagatedBuildInputs; + mappedInputs = map mapPackageToSDK propagatedInputs; + env = { inherit (pkg) outputs; - # Map the old frameworks to new and the package’s outputs to their original outPaths. - # The mappings are rendered into tab-separated files to be read back with `read`. - frameworks = lib.concatMapStrings (pkg: "${pkg}\t${mapPackageToSDK pkg}\n") propagatedFrameworks; + # Map old frameworks to new ones and the package’s outputs to their original outPaths. + # Also map any packages that have propagated frameworks to their proxy packages using + # the requested SDK version. These mappings are rendered into tab-separated files to be + # parsed and read back with `read`. + dependencies = lib.concatMapStrings (pair: "${pair.fst}\t${pair.snd}\n") (lib.zipLists propagatedInputs mappedInputs); pkgOutputs = lib.concatMapStrings (output: "${output}\t${(lib.getOutput output pkg).outPath}\n") pkg.outputs; - passAsFile = [ "frameworks" "pkgOutputs" ]; + passAsFile = [ "dependencies" "pkgOutputs" ]; }; in - if lib.length propagatedFrameworks > 0 + # Only remap the package’s propagated inputs if there are any and if any of them were themselves remapped. + if lib.length propagatedInputs > 0 && propagatedInputs != mappedInputs then pkgs.runCommand pkg.name env '' # Iterate over the outputs in the package being replaced to make sure the proxy is # a fully functional replacement. This is like `symlinkJoin` except for outputs and @@ -302,7 +305,7 @@ rec { while IFS=$'\t\n' read -r oldFramework newFramework; do substituteInPlace "''${!outputName}/nix-support/$fileName" \ --replace "$oldFramework" "$newFramework" - done < "$frameworksPath" + done < "$dependenciesPath" fi done else @@ -319,9 +322,9 @@ rec { name = lib.getName pkg; framework = lib.removePrefix "apple-framework-" name; in - if isSDKFramework pkg - then sdk.frameworks."${framework}" - else replacePropagatedFrameworks pkg; + /**/ if pkg == null then pkg + else if name != framework then sdk.frameworks."${framework}" + else replacePropagatedFrameworks pkg; mapRuntimeToSDK = pkg: # Only remap xcbuild for now, which exports the SDK used to build it. From b6a14a3a848618f9016bd310eff2f7bcf44f1557 Mon Sep 17 00:00:00 2001 From: Randy Eckenrode Date: Fri, 27 Oct 2023 20:47:37 -0400 Subject: [PATCH 2/4] stdenvAdapters.overrideSDK: also remap propagatedBuildInputs --- pkgs/stdenv/adapters.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix index 9230ce071c3b..9931445ce561 100644 --- a/pkgs/stdenv/adapters.nix +++ b/pkgs/stdenv/adapters.nix @@ -367,6 +367,7 @@ rec { "buildInputs" "nativeBuildInputs" "propagatedNativeBuildInputs" + "propagatedBuildInputs" ]); }); } From f16202fa8870a4d326072d1112df584f2b6cd4a5 Mon Sep 17 00:00:00 2001 From: Randy Eckenrode Date: Fri, 27 Oct 2023 20:51:23 -0400 Subject: [PATCH 3/4] qt5: use overrideSDK instead of callPackages --- pkgs/top-level/all-packages.nix | 2 +- pkgs/top-level/qt5-packages.nix | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c55a0ea582a6..84078e7478da 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -24667,7 +24667,7 @@ with pkgs; darwin buildPackages; inherit (__splicedPackages.gst_all_1) gstreamer gst-plugins-base; inherit config; - stdenv = if stdenv.isDarwin then darwin.apple_sdk_11_0.stdenv else stdenv; + stdenv = if stdenv.isDarwin then overrideSDK stdenv "11.0" else stdenv; }); libsForQt5 = recurseIntoAttrs (import ./qt5-packages.nix { diff --git a/pkgs/top-level/qt5-packages.nix b/pkgs/top-level/qt5-packages.nix index ec2a1b1f7194..2de212792e5d 100644 --- a/pkgs/top-level/qt5-packages.nix +++ b/pkgs/top-level/qt5-packages.nix @@ -178,7 +178,8 @@ in (kdeFrameworks // plasmaMobileGear // plasma5 // plasma5.thirdParty // kdeGea pulseaudio-qt = callPackage ../development/libraries/pulseaudio-qt { }; - qca-qt5 = pkgs.darwin.apple_sdk_11_0.callPackage ../development/libraries/qca-qt5 { + qca-qt5 = callPackage ../development/libraries/qca-qt5 { + stdenv = if pkgs.stdenv.isDarwin then pkgs.overrideSDK pkgs.stdenv "11.0" else pkgs.stdenv; inherit (libsForQt5) qtbase; }; @@ -209,8 +210,8 @@ in (kdeFrameworks // plasmaMobileGear // plasma5 // plasma5.thirdParty // kdeGea qtinstaller = callPackage ../development/libraries/qtinstaller { }; qtkeychain = callPackage ../development/libraries/qtkeychain { - stdenv = if pkgs.stdenv.isDarwin then pkgs.darwin.apple_sdk_11_0.stdenv else pkgs.stdenv; - inherit (pkgs.darwin.apple_sdk_11_0.frameworks) CoreFoundation Security; + stdenv = if pkgs.stdenv.isDarwin then pkgs.overrideSDK pkgs.stdenv "11.0" else pkgs.stdenv; + inherit (pkgs.darwin.apple_sdk.frameworks) CoreFoundation Security; }; qtmpris = callPackage ../development/libraries/qtmpris { }; From 08e1c95e9c62b966a44cf435abf6bf62553bf950 Mon Sep 17 00:00:00 2001 From: Randy Eckenrode Date: Wed, 1 Nov 2023 12:27:31 -0400 Subject: [PATCH 4/4] stdenvAdapters.overrideSDK: handle non-drv nativeBuildInputs --- pkgs/stdenv/adapters.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix index 9931445ce561..977ef2eef9c7 100644 --- a/pkgs/stdenv/adapters.nix +++ b/pkgs/stdenv/adapters.nix @@ -328,7 +328,7 @@ rec { mapRuntimeToSDK = pkg: # Only remap xcbuild for now, which exports the SDK used to build it. - if pkg != null && lib.getName pkg == "xcodebuild" + if pkg != null && lib.isAttrs pkg && lib.getName pkg == "xcodebuild" then pkg.override { stdenv = overrideSDK stdenv { inherit darwinMinVersion darwinSdkVersion; }; } else pkg;