From 1231b72e01bff56b07c7b0626df6f00df0beaeeb Mon Sep 17 00:00:00 2001 From: Artturin Date: Sat, 4 Nov 2023 23:11:00 +0200 Subject: [PATCH 1/4] qt6: use `makeScopeWithSplicing` --- pkgs/development/libraries/qt-6/default.nix | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/qt-6/default.nix b/pkgs/development/libraries/qt-6/default.nix index bef3f7ef62e86..ed0be6738fd6b 100644 --- a/pkgs/development/libraries/qt-6/default.nix +++ b/pkgs/development/libraries/qt-6/default.nix @@ -1,6 +1,8 @@ { newScope , lib , stdenv +, generateSplicesForMkScope +, makeScopeWithSplicing' , fetchurl , fetchpatch , fetchpatch2 @@ -12,6 +14,7 @@ , overrideSDK , buildPackages , python3 +, config # options , developerBuild ? false @@ -178,11 +181,17 @@ let fix_qmake_libtool = ./hooks/fix-qmake-libtool.sh; }; } ./hooks/qmake-hook.sh; + } // lib.optionalAttrs config.allowAliases { + # Convert to a throw on 03-01-2023 and backport the change. + # Warnings show up in various cli tool outputs, throws do not. + # Remove completely before 24.05 + overrideScope' = lib.warnIf (lib.isInOldestRelease 2311) "qt6 now uses makeScopeWithSplicing which does not have \"overrideScope'\", use \"overrideScope\"." self.overrideScope; }; - # TODO(@Artturin): convert to makeScopeWithSplicing' - # simple example of how to do that in 5568a4d25ca406809530420996d57e0876ca1a01 - baseScope = lib.makeScope newScope addPackages; + baseScope = makeScopeWithSplicing' { + otherSplices = generateSplicesForMkScope "qt6"; + f = addPackages; + }; bootstrapScope = baseScope.overrideScope(final: prev: { qtbase = prev.qtbase.override { qttranslations = null; }; From 65874cc847b3210092aa43fe6de79dd190d9b2a3 Mon Sep 17 00:00:00 2001 From: Artturin Date: Sat, 4 Nov 2023 23:20:30 +0200 Subject: [PATCH 2/4] qt6: dont use `with self` improves cross-compilation support matches qt5 set --- pkgs/development/libraries/qt-6/default.nix | 27 ++++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/pkgs/development/libraries/qt-6/default.nix b/pkgs/development/libraries/qt-6/default.nix index ed0be6738fd6b..d18678b9f5cde 100644 --- a/pkgs/development/libraries/qt-6/default.nix +++ b/pkgs/development/libraries/qt-6/default.nix @@ -27,10 +27,11 @@ let mirror = "mirror://qt"; }; - addPackages = self: with self; + addPackages = self: let callPackage = self.newScope ({ - inherit qtModule srcs python3; + inherit (self) qtModule; + inherit srcs python3; stdenv = if stdenv.isDarwin then darwin.apple_sdk_11_0.stdenv else stdenv; }); in @@ -61,7 +62,9 @@ let ]; }; env = callPackage ./qt-env.nix { }; - full = env "qt-full-${qtbase.version}" ([ + full = callPackage ({ env, qtbase }: env "qt-full-${qtbase.version}" + # `with self` is ok to use here because having these spliced is unnecessary + ( with self;[ qt3d qt5compat qtcharts @@ -99,7 +102,7 @@ let qtwebengine qtwebsockets qtwebview - ] ++ lib.optionals (!stdenv.isDarwin) [ qtwayland libglvnd ]); + ] ++ lib.optionals (!stdenv.isDarwin) [ qtwayland libglvnd ])) { }; qt3d = callPackage ./modules/qt3d.nix { }; qt5compat = callPackage ./modules/qt5compat.nix { }; @@ -152,11 +155,11 @@ let GameController ImageCaptureCore LocalAuthentication MediaAccessibility MediaPlayer MetalKit Network OpenDirectory Quartz ReplayKit SecurityInterface Vision; - qtModule = qtModule.override { + qtModule = callPackage ({ qtModule }: qtModule.override { stdenv = if stdenv.isDarwin then overrideSDK stdenv { darwinMinVersion = "10.13"; darwinSdkVersion = "11.0"; } else stdenv; - }; + }) { }; xcbuild = buildPackages.xcbuild.override { productBuildVer = "20A2408"; }; @@ -166,21 +169,21 @@ let inherit (darwin.apple_sdk_11_0.frameworks) WebKit; }; - wrapQtAppsHook = makeSetupHook + wrapQtAppsHook = callPackage ({ makeBinaryWrapper }: makeSetupHook { name = "wrap-qt6-apps-hook"; - propagatedBuildInputs = [ buildPackages.makeBinaryWrapper ]; - } ./hooks/wrap-qt-apps-hook.sh; + propagatedBuildInputs = [ makeBinaryWrapper ]; + } ./hooks/wrap-qt-apps-hook.sh) { }; - qmake = makeSetupHook + qmake = callPackage ({ qtbase }: makeSetupHook { name = "qmake6-hook"; - propagatedBuildInputs = [ self.qtbase.dev ]; + propagatedBuildInputs = [ qtbase.dev ]; substitutions = { inherit debug; fix_qmake_libtool = ./hooks/fix-qmake-libtool.sh; }; - } ./hooks/qmake-hook.sh; + } ./hooks/qmake-hook.sh) { }; } // lib.optionalAttrs config.allowAliases { # Convert to a throw on 03-01-2023 and backport the change. # Warnings show up in various cli tool outputs, throws do not. From 6e2e32556e01189e6a2f17ad1fac3049ee94b435 Mon Sep 17 00:00:00 2001 From: Artturin Date: Sat, 11 Nov 2023 21:27:08 +0200 Subject: [PATCH 3/4] qt6Packages: use makeScopeWithSplicing 23.11 has a warning for `overrideScope'` in `makeScope` itself --- pkgs/top-level/all-packages.nix | 2 +- pkgs/top-level/qt6-packages.nix | 31 ++++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0031ff1a5ec35..7ba022bb51e74 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -24662,7 +24662,7 @@ with pkgs; qt6 = recurseIntoAttrs (callPackage ../development/libraries/qt-6 { }); qt6Packages = recurseIntoAttrs (import ./qt6-packages.nix { - inherit lib pkgs qt6; + inherit lib __splicedPackages makeScopeWithSplicing' generateSplicesForMkScope pkgsBuildHost; stdenv = if stdenv.isDarwin then darwin.apple_sdk_11_0.stdenv else stdenv; }); diff --git a/pkgs/top-level/qt6-packages.nix b/pkgs/top-level/qt6-packages.nix index 8490d2a20186a..2947083804d31 100644 --- a/pkgs/top-level/qt6-packages.nix +++ b/pkgs/top-level/qt6-packages.nix @@ -5,17 +5,27 @@ # this file. { lib -, pkgs -, qt6 +, __splicedPackages +, makeScopeWithSplicing' +, generateSplicesForMkScope , stdenv +, pkgsBuildHost }: -(lib.makeScope pkgs.newScope ( self: - let - callPackage = self.callPackage; + pkgs = __splicedPackages; + # qt6 set should not be pre-spliced to prevent spliced packages being a part of an unspliced set + # 'pkgsCross.aarch64-multiplatform.pkgsBuildTarget.targetPackages.qt6Packages.qtbase' should not have a `__spliced` but if qt6 is pre-spliced then it will have one. + # pkgsBuildHost == pkgs + qt6 = pkgsBuildHost.qt6; in -(qt6 // { + +makeScopeWithSplicing' { + otherSplices = generateSplicesForMkScope "qt6Packages"; + f = (self: let + inherit (self) callPackage; + noExtraAttrs = set: lib.attrsets.removeAttrs set [ "extend" "override" "overrideScope" "overrideScope'" "overrideDerivation" ]; + in (noExtraAttrs qt6) // { inherit stdenv; # LIBRARIES @@ -45,4 +55,11 @@ in qt6Support = true; suffix = "qt6"; }; -}))) + + } // lib.optionalAttrs pkgs.config.allowAliases { + # Convert to a throw on 01-01-2023. + # Warnings show up in various cli tool outputs, throws do not. + # Remove completely before 24.05 + overrideScope' = lib.warn "qt6Packages now uses makeScopeWithSplicing which does not have \"overrideScope'\", use \"overrideScope\"." self.overrideScope; + }); +} From 410cd59546a8705457a72e6d868e2d065ede9567 Mon Sep 17 00:00:00 2001 From: Artturin Date: Sat, 11 Nov 2023 21:59:02 +0200 Subject: [PATCH 4/4] libsForQt5: change comment It wouldn't work that way, idk why I thought it would. 23.11 has a warning for `overrideScope'` in `makeScope` itself --- pkgs/top-level/qt5-packages.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/top-level/qt5-packages.nix b/pkgs/top-level/qt5-packages.nix index a9e25eb54a8ea..b1fb263e0bb83 100644 --- a/pkgs/top-level/qt5-packages.nix +++ b/pkgs/top-level/qt5-packages.nix @@ -266,8 +266,9 @@ in (noExtraAttrs (kdeFrameworks // plasmaMobileGear // plasma5 // plasma5.thirdP yuview = callPackage ../applications/video/yuview { }; }) // lib.optionalAttrs pkgs.config.allowAliases { - # remove after 23.11 branch-off and backport removal to 23.11 - # 23.11 will have a warning for this in `makeScope` itself + # Convert to a throw on 01-01-2023. + # Warnings show up in various cli tool outputs, throws do not. + # Remove completely before 24.05 overrideScope' = lib.warn "libsForQt5 now uses makeScopeWithSplicing which does not have \"overrideScope'\", use \"overrideScope\"." self.overrideScope; })); }