From a8274bd8f877ad175a2aef118528cbce82565260 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Wed, 27 Aug 2025 15:21:30 +0200 Subject: [PATCH 1/9] python-qt: disable vulnerable qtwebengine by default webengine is optional: ``` extensions/PythonQt_QtAll/PythonQt_QtAll.pro 24: qtHaveModule(webenginewidgets):CONFIG += PythonQtWebEngineWidgets ``` So disable it by default to fix build following https://github.com/NixOS/nixpkgs/pull/435067 --- pkgs/development/libraries/python-qt/default.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/development/libraries/python-qt/default.nix b/pkgs/development/libraries/python-qt/default.nix index 7b70c94c1872a..ea8baf25eea50 100644 --- a/pkgs/development/libraries/python-qt/default.nix +++ b/pkgs/development/libraries/python-qt/default.nix @@ -7,6 +7,8 @@ qtwebengine, qtxmlpatterns, qttools, + + withWebengine ? false, # vulnerable, so disabled by default }: stdenv.mkDerivation (finalAttrs: { @@ -24,6 +26,8 @@ stdenv.mkDerivation (finalAttrs: { qmake qttools qtxmlpatterns + ] + ++ lib.optionals withWebengine [ qtwebengine ]; From 75d36de2dc6ee270782d2a6533ec4182c2ffdf3a Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Wed, 27 Aug 2025 18:48:01 +0200 Subject: [PATCH 2/9] python-qt: add Qt6 support --- .../libraries/python-qt/default.nix | 78 +++++++++++++++---- pkgs/top-level/python-packages.nix | 2 + pkgs/top-level/qt5-packages.nix | 2 + pkgs/top-level/qt6-packages.nix | 4 + 4 files changed, 69 insertions(+), 17 deletions(-) diff --git a/pkgs/development/libraries/python-qt/default.nix b/pkgs/development/libraries/python-qt/default.nix index ea8baf25eea50..a194bde965511 100644 --- a/pkgs/development/libraries/python-qt/default.nix +++ b/pkgs/development/libraries/python-qt/default.nix @@ -1,16 +1,28 @@ { lib, stdenv, + fetchFromGitHub, + python3, qmake, - qtwebengine, - qtxmlpatterns, + + qt5compat ? null, + qtbase, + qtdeclarative, + qtsvg, qttools, + qtwebengine, + qtxmlpatterns ? null, - withWebengine ? false, # vulnerable, so disabled by default + qt6Support ? false, }: +let + qtVersion = lib.getVersion qtbase; + pyVersion = lib.getVersion python3; + versions = "Qt${lib.versions.major qtVersion}-Python${lib.versions.majorMinor pyVersion}"; +in stdenv.mkDerivation (finalAttrs: { pname = "python-qt"; version = "3.6.1"; @@ -24,18 +36,50 @@ stdenv.mkDerivation (finalAttrs: { nativeBuildInputs = [ qmake + qtdeclarative + qtsvg qttools - qtxmlpatterns ] - ++ lib.optionals withWebengine [ - qtwebengine + ++ lib.optionals qt6Support [ + qt5compat + qtwebengine # optional and vulnerable in Qt5 + ] + ++ lib.optionals (!qt6Support) [ + qtxmlpatterns ]; buildInputs = [ python3 ]; + env.QTDIR = "${qtbase}"; # Used to find qtcoreversion.h + + # generated cpp is available for many Qt5 versions but not Qt6 + # ref. https://github.com/MeVisLab/pythonqt#binding-generator + preConfigure = lib.optionalString qt6Support ( + let + includePaths = lib.concatMapStringsSep ":" (p: "${p}/include") [ + qtbase + qtdeclarative + qtsvg + qttools + qtwebengine + ]; + in + '' + pushd generator + qmake $qmakeFlags CONFIG+=Release generator.pro + make -j $NIX_BUILD_CORES + ./pythonqt_generator \ + --include-paths=${includePaths} \ + --qt-version=${qtVersion} \ + qtscript_masterinclude.h \ + build_all.txt + popd + '' + ); + qmakeFlags = [ "PYTHON_DIR=${python3}" - "PYTHON_VERSION=3.${python3.sourceVersion.minor}" + "PYTHON_VERSION=${lib.versions.majorMinor pyVersion}" ]; dontWrapQtApps = true; @@ -49,20 +93,20 @@ stdenv.mkDerivation (finalAttrs: { ''; preFixup = lib.optionalString stdenv.hostPlatform.isDarwin '' - install_name_tool -id \ - $out/lib/libPythonQt-Qt5-Python3.${python3.sourceVersion.minor}.dylib \ - $out/lib/libPythonQt-Qt5-Python3.${python3.sourceVersion.minor}.dylib - install_name_tool -change \ - libPythonQt-Qt5-Python3.${python3.sourceVersion.minor}.3.dylib \ - $out/lib/libPythonQt-Qt5-Python3.${python3.sourceVersion.minor}.3.dylib \ - -id \ - $out/lib/libPythonQt_QtAll-Qt5-Python3.${python3.sourceVersion.minor}.dylib \ - $out/lib/libPythonQt_QtAll-Qt5-Python3.${python3.sourceVersion.minor}.dylib + install_name_tool \ + -id $out/lib/libPythonQt-${versions}.dylib \ + $out/lib/libPythonQt-${versions}.dylib + + install_name_tool \ + -change libPythonQt-${versions}.3.dylib \ + $out/lib/libPythonQt-${versions}.3.dylib \ + -id $out/lib/libPythonQt_QtAll-${versions}.dylib \ + $out/lib/libPythonQt_QtAll-${versions}.dylib ''; meta = { description = "PythonQt is a dynamic Python binding for the Qt framework. It offers an easy way to embed the Python scripting language into your C++ Qt applications"; - homepage = "https://pythonqt.sourceforge.net/"; + homepage = "https://mevislab.github.io/pythonqt/"; license = lib.licenses.lgpl21; platforms = lib.platforms.all; maintainers = with lib.maintainers; [ hlolli ]; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 4518f9bb5f45b..ae82f1d904cad 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -15403,6 +15403,8 @@ self: super: with self; { python-qt = toPythonModule (pkgs.python-qt.override { python3 = self.python; }); + python-qt-qt6 = toPythonModule (pkgs.qt6Packages.python-qt.override { python3 = self.python; }); + python-rabbitair = callPackage ../development/python-modules/python-rabbitair { }; python-rapidjson = callPackage ../development/python-modules/python-rapidjson { }; diff --git a/pkgs/top-level/qt5-packages.nix b/pkgs/top-level/qt5-packages.nix index 73baf1bc0cc0f..50186a0761c08 100644 --- a/pkgs/top-level/qt5-packages.nix +++ b/pkgs/top-level/qt5-packages.nix @@ -154,6 +154,8 @@ makeScopeWithSplicing' { pulseaudio-qt = callPackage ../development/libraries/pulseaudio-qt { }; + python-qt = callPackage ../development/libraries/python-qt { }; + qca = callPackage ../development/libraries/qca { inherit (libsForQt5) qtbase; }; diff --git a/pkgs/top-level/qt6-packages.nix b/pkgs/top-level/qt6-packages.nix index 1f47e74579e3a..cf2afebe72c24 100644 --- a/pkgs/top-level/qt6-packages.nix +++ b/pkgs/top-level/qt6-packages.nix @@ -134,6 +134,10 @@ makeScopeWithSplicing' { suffix = "qt6"; }; + python-qt = callPackage ../development/libraries/python-qt { + qt6Support = true; + }; + sailfish-access-control-plugin = callPackage ../development/libraries/sailfish-access-control-plugin { }; From eac09cd5c9c528ad1b43b5686e308d5a9c6a38ed Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Thu, 28 Aug 2025 10:33:48 +0200 Subject: [PATCH 3/9] qt6Packages.pythonqt: mark broken on darwin --- pkgs/development/libraries/python-qt/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/development/libraries/python-qt/default.nix b/pkgs/development/libraries/python-qt/default.nix index a194bde965511..2183efa281cf2 100644 --- a/pkgs/development/libraries/python-qt/default.nix +++ b/pkgs/development/libraries/python-qt/default.nix @@ -110,5 +110,7 @@ stdenv.mkDerivation (finalAttrs: { license = lib.licenses.lgpl21; platforms = lib.platforms.all; maintainers = with lib.maintainers; [ hlolli ]; + # ref. https://github.com/MeVisLab/pythonqt/issues/276 + broken = stdenv.hostPlatform.isDarwin && qt6Support; }; }) From 2b187abc9bc2040587722e8bc4fb48852d5c4ac1 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Sat, 6 Sep 2025 16:29:04 +0200 Subject: [PATCH 4/9] python-qt: fix inputs --- pkgs/development/libraries/python-qt/default.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/python-qt/default.nix b/pkgs/development/libraries/python-qt/default.nix index 2183efa281cf2..e9d0bbdf9e1d0 100644 --- a/pkgs/development/libraries/python-qt/default.nix +++ b/pkgs/development/libraries/python-qt/default.nix @@ -36,6 +36,10 @@ stdenv.mkDerivation (finalAttrs: { nativeBuildInputs = [ qmake + ]; + + buildInputs = [ + python3 qtdeclarative qtsvg qttools @@ -48,8 +52,6 @@ stdenv.mkDerivation (finalAttrs: { qtxmlpatterns ]; - buildInputs = [ python3 ]; - env.QTDIR = "${qtbase}"; # Used to find qtcoreversion.h # generated cpp is available for many Qt5 versions but not Qt6 From 0ea7f722dd9323a9a9f1dc8d819515e752d4c9b6 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Mon, 8 Sep 2025 08:20:39 +0200 Subject: [PATCH 5/9] python-qt: adopt --- pkgs/development/libraries/python-qt/default.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/python-qt/default.nix b/pkgs/development/libraries/python-qt/default.nix index e9d0bbdf9e1d0..9c839431b4076 100644 --- a/pkgs/development/libraries/python-qt/default.nix +++ b/pkgs/development/libraries/python-qt/default.nix @@ -111,7 +111,10 @@ stdenv.mkDerivation (finalAttrs: { homepage = "https://mevislab.github.io/pythonqt/"; license = lib.licenses.lgpl21; platforms = lib.platforms.all; - maintainers = with lib.maintainers; [ hlolli ]; + maintainers = with lib.maintainers; [ + hlolli + nim65s + ]; # ref. https://github.com/MeVisLab/pythonqt/issues/276 broken = stdenv.hostPlatform.isDarwin && qt6Support; }; From fcccee54d7d615f952c446229cd36011248beb08 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Thu, 23 Oct 2025 22:17:31 +0200 Subject: [PATCH 6/9] gepetto-viewer: mark as broken It now need way more fixes than what should be done in this python-qt PR --- pkgs/by-name/ge/gepetto-viewer/package.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/by-name/ge/gepetto-viewer/package.nix b/pkgs/by-name/ge/gepetto-viewer/package.nix index ed7eb146f06f7..4484994223b6d 100644 --- a/pkgs/by-name/ge/gepetto-viewer/package.nix +++ b/pkgs/by-name/ge/gepetto-viewer/package.nix @@ -121,6 +121,7 @@ let maintainers = [ lib.maintainers.nim65s ]; mainProgram = "gepetto-gui"; platforms = lib.platforms.unix; + broken = true; }; }); in From 0246b9d266d382a5b8ca22e762e2cfa8ea20866e Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Fri, 28 Nov 2025 08:58:24 +0100 Subject: [PATCH 7/9] python-qt: 3.6.1 -> 3.6.1-unstable-2025-11-20 fix Qt6.10.1 support --- pkgs/development/libraries/python-qt/default.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/python-qt/default.nix b/pkgs/development/libraries/python-qt/default.nix index 9c839431b4076..6af856a24fcb3 100644 --- a/pkgs/development/libraries/python-qt/default.nix +++ b/pkgs/development/libraries/python-qt/default.nix @@ -25,13 +25,14 @@ let in stdenv.mkDerivation (finalAttrs: { pname = "python-qt"; - version = "3.6.1"; + version = "3.6.1-unstable-2025-11-20"; src = fetchFromGitHub { owner = "MeVisLab"; repo = "pythonqt"; - rev = "v${finalAttrs.version}"; - hash = "sha256-OYFQtDGq+d32RQ0vChRKH//O9QgQPLMd1he8X3zCi+U="; + # tag = "v${finalAttrs.version}"; + rev = "fd97b4b2ca5fc94a3219b002aadfbe2e8c89f59d"; + hash = "sha256-BAuvs23VBKt6g5gpAtMUPyikL+D3sMEpch1BLICUotc="; }; nativeBuildInputs = [ From 86fa124b5b7051e1e8cd274d17f47479c2344411 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Fri, 28 Nov 2025 11:15:32 +0100 Subject: [PATCH 8/9] python-qt: build only hostPlatform darwin arch --- pkgs/development/libraries/python-qt/default.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/python-qt/default.nix b/pkgs/development/libraries/python-qt/default.nix index 6af856a24fcb3..a7a6bb961f196 100644 --- a/pkgs/development/libraries/python-qt/default.nix +++ b/pkgs/development/libraries/python-qt/default.nix @@ -24,7 +24,7 @@ let versions = "Qt${lib.versions.major qtVersion}-Python${lib.versions.majorMinor pyVersion}"; in stdenv.mkDerivation (finalAttrs: { - pname = "python-qt"; + pname = "python${lib.versions.majorMinor pyVersion}-qt${lib.versions.major qtVersion}"; version = "3.6.1-unstable-2025-11-20"; src = fetchFromGitHub { @@ -55,6 +55,12 @@ stdenv.mkDerivation (finalAttrs: { env.QTDIR = "${qtbase}"; # Used to find qtcoreversion.h + postPatch = lib.optionalString stdenv.hostPlatform.isDarwin '' + substituteInPlace src/src.pro --replace-fail \ + "QMAKE_APPLE_DEVICE_ARCHS = x86_64 arm64" \ + "QMAKE_APPLE_DEVICE_ARCHS = ${stdenv.hostPlatform.darwinArch}" + ''; + # generated cpp is available for many Qt5 versions but not Qt6 # ref. https://github.com/MeVisLab/pythonqt#binding-generator preConfigure = lib.optionalString qt6Support ( From fb015a02d6cae2292bb07671cfd26dd91fb7f159 Mon Sep 17 00:00:00 2001 From: Guilhem Saurel Date: Tue, 13 Jan 2026 16:56:29 +0100 Subject: [PATCH 9/9] python-qt: 3.6.1 -> 4.0.0 Diff: https://github.com/MeVisLab/pythonqt/compare/v3.6.1...v4.0.0 --- pkgs/development/libraries/python-qt/default.nix | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pkgs/development/libraries/python-qt/default.nix b/pkgs/development/libraries/python-qt/default.nix index a7a6bb961f196..dcb70ec928ebe 100644 --- a/pkgs/development/libraries/python-qt/default.nix +++ b/pkgs/development/libraries/python-qt/default.nix @@ -25,14 +25,13 @@ let in stdenv.mkDerivation (finalAttrs: { pname = "python${lib.versions.majorMinor pyVersion}-qt${lib.versions.major qtVersion}"; - version = "3.6.1-unstable-2025-11-20"; + version = "4.0.0"; src = fetchFromGitHub { owner = "MeVisLab"; repo = "pythonqt"; - # tag = "v${finalAttrs.version}"; - rev = "fd97b4b2ca5fc94a3219b002aadfbe2e8c89f59d"; - hash = "sha256-BAuvs23VBKt6g5gpAtMUPyikL+D3sMEpch1BLICUotc="; + tag = "v${finalAttrs.version}"; + hash = "sha256-toN8VOPvkDTHdGRXZsU5znQ4PhbdFTK3eLi3g29736A="; }; nativeBuildInputs = [