1{
2 lib,
3 stdenv,
4 buildPythonPackage,
5 setuptools,
6 pythonAtLeast,
7 fetchPypi,
8 substituteAll,
9
10 # build
11 autoPatchelfHook,
12 attrdict,
13 doxygen,
14 pkg-config,
15 python,
16 sip,
17 which,
18
19 # runtime
20 cairo,
21 gst_all_1,
22 gtk3,
23 libGL,
24 libGLU,
25 libSM,
26 libXinerama,
27 libXtst,
28 libXxf86vm,
29 libglvnd,
30 mesa,
31 pango,
32 SDL,
33 webkitgtk,
34 wxGTK,
35 xorgproto,
36
37 # propagates
38 numpy,
39 pillow,
40 six,
41}:
42
43buildPythonPackage rec {
44 pname = "wxpython";
45 version = "4.2.1";
46 format = "other";
47 disabled = pythonAtLeast "3.12";
48
49 src = fetchPypi {
50 pname = "wxPython";
51 inherit version;
52 hash = "sha256-5I3iEaZga/By7D+neHcda3RsALf0uXDrWHKN31bRPVw=";
53 };
54
55 patches = [
56 (substituteAll {
57 src = ./4.2-ctypes.patch;
58 libgdk = "${gtk3.out}/lib/libgdk-3.so";
59 libpangocairo = "${pango}/lib/libpangocairo-1.0.so";
60 libcairo = "${cairo}/lib/libcairo.so";
61 })
62 ];
63
64 nativeBuildInputs = [
65 attrdict
66 pkg-config
67 setuptools
68 SDL
69 sip
70 which
71 wxGTK
72 ] ++ lib.optionals stdenv.isLinux [ autoPatchelfHook ];
73
74 buildInputs =
75 [
76 wxGTK
77 SDL
78 ]
79 ++ lib.optionals stdenv.isLinux [
80 gst_all_1.gst-plugins-base
81 gst_all_1.gstreamer
82 libGL
83 libGLU
84 libSM
85 libXinerama
86 libXtst
87 libXxf86vm
88 libglvnd
89 mesa
90 webkitgtk
91 xorgproto
92 ];
93
94 propagatedBuildInputs = [
95 numpy
96 pillow
97 six
98 ];
99
100 buildPhase = ''
101 runHook preBuild
102
103 export DOXYGEN=${doxygen}/bin/doxygen
104 export PATH="${wxGTK}/bin:$PATH"
105 export SDL_CONFIG="${SDL.dev}/bin/sdl-config"
106
107 ${python.pythonOnBuildForHost.interpreter} build.py -v --use_syswx dox etg sip --nodoc build_py
108
109 runHook postBuild
110 '';
111
112 installPhase = ''
113 runHook preInstall
114
115 ${python.pythonOnBuildForHost.interpreter} setup.py install --skip-build --prefix=$out
116 wrapPythonPrograms
117
118 runHook postInstall
119 '';
120
121 checkPhase = ''
122 runHook preCheck
123
124 ${python.interpreter} build.py -v test
125
126 runHook postCheck
127 '';
128
129 meta = with lib; {
130 changelog = "https://github.com/wxWidgets/Phoenix/blob/wxPython-${version}/CHANGES.rst";
131 description = "Cross platform GUI toolkit for Python, Phoenix version";
132 homepage = "http://wxpython.org/";
133 license = licenses.wxWindows;
134 maintainers = with maintainers; [ hexa ];
135 };
136}