{ newScope , lib , stdenv , generateSplicesForMkScope , makeScopeWithSplicing' , fetchurl , fetchpatch , fetchpatch2 , makeSetupHook , makeWrapper , gst_all_1 , libglvnd , darwin , overrideSDK , buildPackages , python3 , config # options , developerBuild ? false , debug ? false }: let srcs = import ./srcs.nix { inherit fetchurl; mirror = "mirror://qt"; }; addPackages = self: let callPackage = self.newScope ({ inherit (self) qtModule; inherit srcs python3; stdenv = if stdenv.isDarwin then darwin.apple_sdk_11_0.stdenv else stdenv; }); in { inherit callPackage srcs; qtModule = callPackage ./qtModule.nix { }; qtbase = callPackage ./modules/qtbase.nix { withGtk3 = true; inherit (srcs.qtbase) src version; inherit developerBuild; inherit (darwin.apple_sdk_11_0.frameworks) AGL AVFoundation AppKit Contacts CoreBluetooth EventKit GSS MetalKit; patches = [ ./patches/0001-qtbase-qmake-always-use-libname-instead-of-absolute-.patch ./patches/0002-qtbase-qmake-fix-mkspecs-for-darwin.patch ./patches/0003-qtbase-qmake-fix-includedir-in-generated-pkg-config.patch ./patches/0004-qtbase-deal-with-a-font-face-at-index-0-as-Regular-f.patch ./patches/0005-qtbase-qt-cmake-always-use-cmake-from-path.patch ./patches/0006-qtbase-find-tools-in-PATH.patch ./patches/0007-qtbase-pass-to-qmlimportscanner-the-QML2_IMPORT_PATH.patch ./patches/0008-qtbase-allow-translations-outside-prefix.patch ./patches/0009-qtbase-find-qmlimportscanner-in-macdeployqt-via-envi.patch ./patches/0010-qtbase-check-in-the-QML-folder-of-this-library-does-.patch ./patches/0011-qtbase-derive-plugin-load-path-from-PATH.patch # Revert "macOS: Silence warning about supporting secure state restoration" # fix build with macOS sdk < 12.0 (fetchpatch2 { url = "https://github.com/qt/qtbase/commit/fc1549c01445bb9c99d3ba6de8fa9da230614e72.patch"; revert = true; hash = "sha256-cjB2sC4cvZn0UEc+sm6ZpjyC78ssqB1Kb5nlZQ15M4A="; }) # CVE-2023-51714: Potential Integer Overflow in Qt's HTTP2 implementation # https://www.qt.io/blog/security-advisory-potential-integer-overflow-in-qts-http2-implementation (fetchpatch2 { url = "https://download.qt.io/official_releases/qt/6.5/0001-CVE-2023-51714-qtbase-6.5.diff"; hash = "sha256-0Xnolq9dWkKUrmLUlv15uQ9nkZXrY3AsmvChaLX8P2I="; }) (fetchpatch2 { url = "https://download.qt.io/official_releases/qt/6.6/0002-CVE-2023-51714-qtbase-6.6.diff"; hash = "sha256-+/u3vy5Ci6Z4jy00L07iYAnqHvVdqUzqVnT9uVIqs60="; }) ]; }; env = callPackage ./qt-env.nix { }; 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 qtconnectivity qtdatavis3d qtdeclarative qtdoc qtgraphs qtgrpc qthttpserver qtimageformats qtlanguageserver qtlocation qtlottie qtmultimedia qtmqtt qtnetworkauth qtpositioning qtsensors qtserialbus qtserialport qtshadertools qtspeech qtquick3d qtquick3dphysics qtquickeffectmaker qtquicktimeline qtremoteobjects qtsvg qtscxml qttools qttranslations qtvirtualkeyboard qtwebchannel qtwebengine qtwebsockets qtwebview ] ++ lib.optionals (!stdenv.isDarwin) [ qtwayland libglvnd ])) { }; qt3d = callPackage ./modules/qt3d.nix { }; qt5compat = callPackage ./modules/qt5compat.nix { }; qtcharts = callPackage ./modules/qtcharts.nix { }; qtconnectivity = callPackage ./modules/qtconnectivity.nix { inherit (darwin.apple_sdk_11_0.frameworks) IOBluetooth PCSC; }; qtdatavis3d = callPackage ./modules/qtdatavis3d.nix { }; qtdeclarative = callPackage ./modules/qtdeclarative.nix { }; qtdoc = callPackage ./modules/qtdoc.nix { }; qtgraphs = callPackage ./modules/qtgraphs.nix { }; qtgrpc = callPackage ./modules/qtgrpc.nix { }; qthttpserver = callPackage ./modules/qthttpserver.nix { }; qtimageformats = callPackage ./modules/qtimageformats.nix { }; qtlanguageserver = callPackage ./modules/qtlanguageserver.nix { }; qtlocation = callPackage ./modules/qtlocation.nix { }; qtlottie = callPackage ./modules/qtlottie.nix { }; qtmultimedia = callPackage ./modules/qtmultimedia.nix { inherit (gst_all_1) gstreamer gst-plugins-base gst-plugins-good gst-libav gst-vaapi; inherit (darwin.apple_sdk_11_0.frameworks) VideoToolbox; }; qtmqtt = callPackage ./modules/qtmqtt.nix { }; qtnetworkauth = callPackage ./modules/qtnetworkauth.nix { }; qtpositioning = callPackage ./modules/qtpositioning.nix { }; qtsensors = callPackage ./modules/qtsensors.nix { }; qtserialbus = callPackage ./modules/qtserialbus.nix { }; qtserialport = callPackage ./modules/qtserialport.nix { }; qtshadertools = callPackage ./modules/qtshadertools.nix { }; qtspeech = callPackage ./modules/qtspeech.nix { inherit (darwin.apple_sdk_11_0.frameworks) Cocoa; }; qtquick3d = callPackage ./modules/qtquick3d.nix { }; qtquick3dphysics = callPackage ./modules/qtquick3dphysics.nix { }; qtquickeffectmaker = callPackage ./modules/qtquickeffectmaker.nix { }; qtquicktimeline = callPackage ./modules/qtquicktimeline.nix { }; qtremoteobjects = callPackage ./modules/qtremoteobjects.nix { }; qtsvg = callPackage ./modules/qtsvg.nix { }; qtscxml = callPackage ./modules/qtscxml.nix { }; qttools = callPackage ./modules/qttools.nix { }; qttranslations = callPackage ./modules/qttranslations.nix { }; qtvirtualkeyboard = callPackage ./modules/qtvirtualkeyboard.nix { }; qtwayland = callPackage ./modules/qtwayland.nix { }; qtwebchannel = callPackage ./modules/qtwebchannel.nix { }; qtwebengine = callPackage ./modules/qtwebengine.nix { inherit (darwin) autoSignDarwinBinariesHook bootstrap_cmds cctools xnu; inherit (darwin.apple_sdk_11_0) libpm libunwind; inherit (darwin.apple_sdk_11_0.libs) sandbox; inherit (darwin.apple_sdk_11_0.frameworks) AGL AVFoundation Accelerate Cocoa CoreLocation CoreML ForceFeedback GameController ImageCaptureCore LocalAuthentication MediaAccessibility MediaPlayer MetalKit Network OpenDirectory Quartz ReplayKit SecurityInterface Vision; 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"; }; }; qtwebsockets = callPackage ./modules/qtwebsockets.nix { }; qtwebview = callPackage ./modules/qtwebview.nix { inherit (darwin.apple_sdk_11_0.frameworks) WebKit; }; wrapQtAppsHook = callPackage ({ makeBinaryWrapper }: makeSetupHook { name = "wrap-qt6-apps-hook"; propagatedBuildInputs = [ makeBinaryWrapper ]; } ./hooks/wrap-qt-apps-hook.sh) { }; qmake = callPackage ({ qtbase }: makeSetupHook { name = "qmake6-hook"; propagatedBuildInputs = [ qtbase.dev ]; substitutions = { inherit debug; 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; }; baseScope = makeScopeWithSplicing' { otherSplices = generateSplicesForMkScope "qt6"; f = addPackages; }; bootstrapScope = baseScope.overrideScope(final: prev: { qtbase = prev.qtbase.override { qttranslations = null; }; qtdeclarative = null; }); finalScope = baseScope.overrideScope(final: prev: { qttranslations = bootstrapScope.qttranslations; }); in finalScope