1{ lib
2, stdenv
3, buildPythonPackage
4, setuptools
5, isPy27
6, fetchPypi
7, pkg-config
8, dbus
9, lndir
10, dbus-python
11, sip
12, pyqt5_sip
13, pyqt-builder
14, libsForQt5
15, withConnectivity ? false
16, withMultimedia ? false
17, withWebKit ? false
18, withWebSockets ? false
19, withLocation ? false
20}:
21
22buildPythonPackage rec {
23 pname = "PyQt5";
24 version = "5.15.7";
25 format = "pyproject";
26
27 disabled = isPy27;
28
29 src = fetchPypi {
30 inherit pname version;
31 sha256 = "sha256-dVEhpSs6CMsHJ1wQ67lldtNuMg5XJZHbFs/bxVgQFZQ=";
32 };
33
34 patches = [
35 # Fix some wrong assumptions by ./project.py
36 # TODO: figure out how to send this upstream
37 ./pyqt5-fix-dbus-mainloop-support.patch
38 # confirm license when installing via pyqt5_sip
39 ./pyqt5-confirm-license.patch
40 ];
41
42 postPatch =
43 # be more verbose
44 ''
45 cat >> pyproject.toml <<EOF
46 [tool.sip.project]
47 verbose = true
48 ''
49 # Due to bug in SIP .whl name generation we have to bump minimal macos sdk upto 11.0 for
50 # aarch64-darwin. This patch can be removed once SIP will fix it in upstream,
51 # see https://github.com/NixOS/nixpkgs/pull/186612#issuecomment-1214635456.
52 + lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
53 minimum-macos-version = "11.0"
54 '' + ''
55 EOF
56 '';
57
58 outputs = [ "out" "dev" ];
59
60 dontWrapQtApps = true;
61
62 nativeBuildInputs = with libsForQt5; [
63 pkg-config
64 qmake
65 setuptools
66 lndir
67 sip
68 qtbase
69 qtsvg
70 qtdeclarative
71 qtwebchannel
72 ]
73 ++ lib.optional withConnectivity qtconnectivity
74 ++ lib.optional withMultimedia qtmultimedia
75 ++ lib.optional withWebKit qtwebkit
76 ++ lib.optional withWebSockets qtwebsockets
77 ++ lib.optional withLocation qtlocation
78 ;
79
80 buildInputs = with libsForQt5; [
81 dbus
82 qtbase
83 qtsvg
84 qtdeclarative
85 pyqt-builder
86 ]
87 ++ lib.optional withConnectivity qtconnectivity
88 ++ lib.optional withWebKit qtwebkit
89 ++ lib.optional withWebSockets qtwebsockets
90 ++ lib.optional withLocation qtlocation
91 ;
92
93 propagatedBuildInputs = [
94 dbus-python
95 pyqt5_sip
96 ];
97
98 passthru = {
99 inherit sip pyqt5_sip;
100 multimediaEnabled = withMultimedia;
101 webKitEnabled = withWebKit;
102 WebSocketsEnabled = withWebSockets;
103 };
104
105 dontConfigure = true;
106
107 # Checked using pythonImportsCheck
108 doCheck = false;
109
110 pythonImportsCheck = [
111 "PyQt5"
112 "PyQt5.QtCore"
113 "PyQt5.QtQml"
114 "PyQt5.QtWidgets"
115 "PyQt5.QtGui"
116 ]
117 ++ lib.optional withWebSockets "PyQt5.QtWebSockets"
118 ++ lib.optional withWebKit "PyQt5.QtWebKit"
119 ++ lib.optional withMultimedia "PyQt5.QtMultimedia"
120 ++ lib.optional withConnectivity "PyQt5.QtConnectivity"
121 ++ lib.optional withLocation "PyQt5.QtPositioning"
122 ;
123
124 meta = with lib; {
125 description = "Python bindings for Qt5";
126 homepage = "https://riverbankcomputing.com/";
127 license = licenses.gpl3Only;
128 platforms = platforms.mesaPlatforms;
129 maintainers = with maintainers; [ sander ];
130 };
131}