summary refs log tree commit diff
path: root/pkgs/development/python-modules/pyqt/6.x.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/python-modules/pyqt/6.x.nix')
-rw-r--r--pkgs/development/python-modules/pyqt/6.x.nix138
1 files changed, 138 insertions, 0 deletions
diff --git a/pkgs/development/python-modules/pyqt/6.x.nix b/pkgs/development/python-modules/pyqt/6.x.nix
new file mode 100644
index 00000000000..c2ef82a158c
--- /dev/null
+++ b/pkgs/development/python-modules/pyqt/6.x.nix
@@ -0,0 +1,138 @@
+{ lib
+, buildPythonPackage
+, isPy27
+, fetchPypi
+, pkg-config
+, dbus
+, lndir
+, setuptools
+, dbus-python
+, sip
+, pyqt6-sip
+, pyqt-builder
+, qt6Packages
+, pythonOlder
+, withMultimedia ? true
+, withWebSockets ? true
+# FIXME: Once QtLocation is available for Qt6 enable this
+# https://bugreports.qt.io/browse/QTBUG-96795
+#, withLocation ? true
+# Not currently part of PyQt6
+#, withConnectivity ? true
+}:
+
+buildPythonPackage rec {
+  pname = "PyQt6";
+  version = "6.4.0";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-kTkkab4fSRkF+p54+k5AWaiathbd8uz9UlvB1lwmu5M=";
+  };
+
+  patches = [
+    # Fix some wrong assumptions by ./project.py
+    # TODO: figure out how to send this upstream
+    # FIXME: make a version for PyQt6?
+    # ./pyqt5-fix-dbus-mainloop-support.patch
+    # confirm license when installing via pyqt6_sip
+    ./pyqt5-confirm-license.patch
+  ];
+
+  # be more verbose
+  postPatch = ''
+    cat >> pyproject.toml <<EOF
+    [tool.sip.project]
+    verbose = true
+    EOF
+  '';
+
+  enableParallelBuilding = true;
+  # HACK: paralellize compilation of make calls within pyqt's setup.py
+  # pkgs/stdenv/generic/setup.sh doesn't set this for us because
+  # make gets called by python code and not its build phase
+  # format=pyproject means the pip-build-hook hook gets used to build this project
+  # pkgs/development/interpreters/python/hooks/pip-build-hook.sh
+  # does not use the enableParallelBuilding flag
+  postUnpack = ''
+    export MAKEFLAGS+=" -j$NIX_BUILD_CORES -l$NIX_BUILD_CORES"
+  '';
+
+  outputs = [ "out" "dev" ];
+
+  dontWrapQtApps = true;
+
+  nativeBuildInputs = with qt6Packages; [
+    pkg-config
+    lndir
+    sip
+    qtbase
+    qtsvg
+    qtdeclarative
+    qtwebchannel
+    qmake
+    qtquick3d
+    qtquicktimeline
+  ]
+  # ++ lib.optional withConnectivity qtconnectivity
+  ++ lib.optional withMultimedia qtmultimedia
+  ++ lib.optional withWebSockets qtwebsockets
+  # ++ lib.optional withLocation qtlocation
+  ;
+
+  buildInputs = with qt6Packages; [
+    dbus
+    qtbase
+    qtsvg
+    qtdeclarative
+    pyqt-builder
+    qtquick3d
+    qtquicktimeline
+  ]
+  # ++ lib.optional withConnectivity qtconnectivity
+  ++ lib.optional withWebSockets qtwebsockets
+  # ++ lib.optional withLocation qtlocation
+  ;
+
+  propagatedBuildInputs = [
+    dbus-python
+    pyqt6-sip
+    setuptools
+  ];
+
+  passthru = {
+    inherit sip pyqt6-sip;
+    multimediaEnabled = withMultimedia;
+    WebSocketsEnabled = withWebSockets;
+  };
+
+  dontConfigure = true;
+
+  # Checked using pythonImportsCheck, has no tests
+  doCheck = true;
+
+  pythonImportsCheck = [
+    "PyQt6"
+    "PyQt6.QtCore"
+    "PyQt6.QtQml"
+    "PyQt6.QtWidgets"
+    "PyQt6.QtGui"
+    "PyQt6.QtQuick"
+  ]
+  ++ lib.optional withWebSockets "PyQt6.QtWebSockets"
+  ++ lib.optional withMultimedia "PyQt6.QtMultimedia"
+  # ++ lib.optional withConnectivity "PyQt6.QtConnectivity"
+  # ++ lib.optional withLocation "PyQt6.QtPositioning"
+  ;
+
+  meta = with lib; {
+    description = "Python bindings for Qt6";
+    homepage = "https://riverbankcomputing.com/";
+    license = licenses.gpl3Only;
+    platforms = platforms.mesaPlatforms;
+    maintainers = with maintainers; [ LunNova ];
+  };
+}