2 # - test and finish systemd integration
3 # - subpackages for client/server, see http://xpra.org/dev.html
4 # - nvenc>=7 for cuda support (on bcond)
8 %bcond_without client # client part
9 %bcond_without server # server part
10 %bcond_without sound # (gstreamer) sound support
11 %bcond_without clipboard # clipboard support
12 %bcond_without swscale # swscale colorspace conversion support
13 %bcond_without opengl # OpenGL support
14 %bcond_without ffmpeg # avcodec decoding / FFmpeg encoding support
15 %bcond_without vpx # VPX/WebM support
16 %bcond_without webp # WebP support
17 %bcond_without x264 # x264 encoding
18 %bcond_without x265 # x265 encoding
24 Summary: Xpra gives you "persistent remote applications" for X
25 Summary(pl.UTF-8): Xpra - "stałe zdalne aplikacje" dla X
30 Group: X11/Applications/Networking
31 Source0: http://xpra.org/src/%{name}-%{version}.tar.xz
32 # Source0-md5: 2fac9c558c099a6ea13d0202732bd684
33 Patch0: setup-cc-ccache.patch
34 Patch1: %{name}-libexecdir.patch
36 BuildRequires: OpenGL-devel
37 # libavcodec >= 57 for dec_avcodec, libavcodec >= 58.18 for enc_ffmpeg, libswscale
38 %{?with_ffmpeg:BuildRequires: ffmpeg-devel >= 3.4}
39 BuildRequires: gtk+3-devel >= 3.0
40 BuildRequires: libjpeg-turbo-devel >= 1.4
41 BuildRequires: libvpx-devel >= 1.4
42 BuildRequires: libwebp-devel >= 0.5
43 %{?with_x264:BuildRequires: libx264-devel}
44 %{?with_x265:BuildRequires: libx265-devel}
45 BuildRequires: libyuv-devel
46 BuildRequires: pam-devel
47 BuildRequires: pkgconfig
48 BuildRequires: python3-Cython >= 0.20
49 BuildRequires: python3-devel >= 1:3.4
50 BuildRequires: python3-pycairo-devel
51 BuildRequires: python3-pygobject3-devel >= 3.0
52 BuildRequires: python3-setuptools
53 BuildRequires: rpm-pythonprov
54 BuildRequires: sed >= 4.0
55 BuildRequires: systemd-devel >= 1:209
56 BuildRequires: tar >= 1:1.22
57 BuildRequires: xorg-lib-libX11-devel
58 BuildRequires: xorg-lib-libXcomposite-devel
59 BuildRequires: xorg-lib-libXdamage-devel
60 BuildRequires: xorg-lib-libXext-devel
61 BuildRequires: xorg-lib-libXfixes-devel
62 BuildRequires: xorg-lib-libXi-devel
63 BuildRequires: xorg-lib-libXrandr-devel
64 BuildRequires: xorg-lib-libXtst-devel
65 BuildRequires: xorg-lib-libxkbfile-devel
67 Requires: gdk-pixbuf2 >= 2.0
68 Requires: glib2 >= 2.0
69 Requires: gobject-introspection >= 1
70 Requires: gtk+3 >= 3.0
71 Requires: libjpeg-turbo >= 1.4
72 Requires: libvpx >= 1.4
73 Requires: libwebp >= 0.5
74 Requires: python3-pycairo
75 Requires: python3-pygobject >= 3.0
76 Requires: xorg-app-setxkbmap
77 Requires: xorg-app-xauth
78 Requires: xorg-app-xmodmap
79 Requires: xorg-xserver-Xvfb
81 Suggests: python3-PyOpenGL
82 Suggests: python3-numpy
83 BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
85 # currently lib, not %{_lib} (see cups.spec)
86 %define cupsdir /usr/lib/cups/backend
87 # xpra/x11/bindings/randr_bindings.c:... error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing]
88 %define specflags -fno-strict-aliasing
91 Xpra gives you "persistent remote applications" for X. That is, unlike
92 normal X applications, applications run with xpra are "persistent" --
93 you can run them remotely, and they don't die if your connection does.
94 You can detach them, and reattach them later -- even from another
95 computer -- with no loss of state. And unlike VNC or RDP, xpra is for
96 remote applications, not remote desktops -- individual applications
97 show up as individual windows on your screen, managed by your window
98 manager. They're not trapped in a box.
100 So basically it's screen for remote X apps.
102 %description -l pl.UTF-8
103 Xpra daje "stałe zdalne aplikacje" dla serwera X, które w
104 przeciwieństwie do zwykłych X-owych aplikacji, uruchamiane są z xprą
105 jako niezamykające. Można je uruchomić zdalnie i one nie zostaną
106 zamknięte, gdy połączenie zostanie przerwane. Można je odłączyć i
107 podłączyć z powrotem później, również z innego komputera, bez straty
108 stanu. W odróżnieniu od VNC czy RDP, xpra jest dla zdalnych aplikacji,
109 a nie zdalnych pulpitów - pojedyncze aplikacje pokazują się jako
110 samodzielne okno na lokalnym ekranie, zarządzane przez lokalnego
113 W uproszczeniu xpra to "screen" dla zdalnych aplikacji X-owych.
115 %package -n cups-backend-xpra
116 Summary: Xpra backend for CUPS
117 Summary(pl.UTF-8): Backend Xpra dla CUPS-a
118 Group: Applications/Printing
119 Requires: %{name} = %{version}-%{release}
122 %description -n cups-backend-xpra
123 Xpra backend for CUPS.
125 %description -n cups-backend-xpra -l pl.UTF-8
126 Backend Xpra dla CUPS-a.
133 %{__sed} -i -e '1s,/usr/bin/env python$,%{__python3},' cups/xpraforwarder $(grep -l '/usr/bin/env python' -r xpra scripts)
134 %{__sed} -i -e 's,"/bin/xpra_udev_product_version","%{_bindir}/xpra_udev_product_version",' udev/rules.d/71-xpra-virtual-pointer.rules
135 %{__sed} -i -e 's,@libexec@,%{_libexecdir},' setup.py
137 %define setup_opts \\\
140 --with-Xdummy_wrapper \\\
141 %{__with_without client} \\\
142 %{__with_without clipboard} \\\
143 %{__with_without swscale csc_swscale} \\\
144 --with%{!?debug:out}-debug \\\
145 %{__with_without ffmpeg dec_avcodec2} \\\
146 %{__with_without ffmpeg enc_ffmpeg} \\\
147 %{__with_without x264 enc_x264} \\\
148 %{__with_without x265 enc_x265} \\\
153 %{__with_without opengl} \\\
154 %{__with_without server} \\\
155 %{__with_without server shadow} \\\
156 %{__with_without sound} \\\
158 %{__with_without vpx} \\\
160 %{__with_without webp} \\\
166 CFLAGS="%{rpmcflags}" \
167 %{__python3} setup.py build \
171 rm -rf $RPM_BUILD_ROOT
173 %{__python3} setup.py install \
176 --prefix=%{_prefix} \
177 --install-purelib=%{py3_sitescriptdir} \
178 --install-platlib=%{py3_sitedir} \
180 --root=$RPM_BUILD_ROOT
182 %{__rm} $RPM_BUILD_ROOT%{_datadir}/xpra/COPYING
183 %{__rm} $RPM_BUILD_ROOT%{_datadir}/xpra/README
185 install -d $RPM_BUILD_ROOT/lib/udev/rules.d
186 %{__mv} $RPM_BUILD_ROOT{%{_prefix},}/lib/udev/rules.d/71-xpra-virtual-pointer.rules
191 rm -rf $RPM_BUILD_ROOT
194 %defattr(644,root,root,755)
196 %dir %{_sysconfdir}/%{name}
197 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/xorg.conf
198 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/xpra.conf
199 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/xorg-uinput.conf
200 %dir %{_sysconfdir}/%{name}/conf.d
201 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/05_features.conf
202 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/10_network.conf
203 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/12_ssl.conf
204 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/15_file_transfers.conf
205 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/16_printing.conf
206 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/20_sound.conf
207 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/30_picture.conf
208 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/35_webcam.conf
209 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/40_client.conf
210 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/42_client_keyboard.conf
211 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/50_server_network.conf
212 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/55_server_x11.conf
213 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/60_server.conf
214 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/conf.d/65_proxy.conf
215 %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/xpra
216 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/X11/xorg.conf.d/90-xpra-virtual.conf
217 %config(noreplace) %verify(not md5 mtime size) /etc/pam.d/xpra
218 /etc/dbus-1/system.d/xpra.conf
219 %{systemdunitdir}/xpra.service
220 %{systemdunitdir}/xpra.socket
221 /usr/lib/sysusers.d/xpra.conf
222 /lib/udev/rules.d/71-xpra-virtual-pointer.rules
223 %attr(755,root,root) %{_bindir}/xpra
224 %attr(755,root,root) %{_bindir}/xpra_Xdummy
225 %attr(755,root,root) %{_bindir}/xpra_launcher
226 %attr(755,root,root) %{_bindir}/xpra_signal_listener
227 %attr(755,root,root) %{_bindir}/xpra_udev_product_version
228 %dir %{_libexecdir}/xpra
229 %attr(755,root,root) %{_libexecdir}/xpra/auth_dialog
230 %attr(755,root,root) %{_libexecdir}/xpra/gnome-open
231 %attr(755,root,root) %{_libexecdir}/xpra/gvfs-open
232 %attr(755,root,root) %{_libexecdir}/xpra/xdg-open
233 %{_datadir}/appdata/xpra.appdata.xml
234 %{_datadir}/mime/packages/application-x-xpraconfig.xml
236 %{_desktopdir}/xpra.desktop
237 %{_desktopdir}/xpra-gui.desktop
238 %{_desktopdir}/xpra-launcher.desktop
239 %{_desktopdir}/xpra-shadow.desktop
240 %{_iconsdir}/xpra.png
241 %{_iconsdir}/xpra-mdns.png
242 %{_iconsdir}/xpra-shadow.png
243 %{systemdtmpfilesdir}/xpra.conf
244 # specified in the above (xpra group seems to be optional though)
245 #%attr(770,root,xpra) %dir /run/xpra
246 %{_mandir}/man1/xpra.1*
247 %{_mandir}/man1/xpra_launcher.1*
249 %dir %{py3_sitedir}/xpra
250 %dir %{py3_sitedir}/xpra/buffers
251 %{py3_sitedir}/xpra/buffers/*.py
252 %{py3_sitedir}/xpra/buffers/__pycache__
253 %attr(755,root,root) %{py3_sitedir}/xpra/buffers/membuf.cpython-*.so
254 %dir %{py3_sitedir}/xpra/client
255 %{py3_sitedir}/xpra/client/gl
256 %dir %{py3_sitedir}/xpra/client/gtk3
257 %attr(755,root,root) %{py3_sitedir}/xpra/client/gtk3/cairo_workaround.cpython-*.so
258 %{py3_sitedir}/xpra/client/gtk3/*.py
259 %{py3_sitedir}/xpra/client/gtk3/__pycache__
260 %{py3_sitedir}/xpra/client/gtk_base
261 %{py3_sitedir}/xpra/client/mixins
262 %{py3_sitedir}/xpra/client/*.py
263 %{py3_sitedir}/xpra/client/__pycache__
264 %{py3_sitedir}/xpra/clipboard
265 %dir %{py3_sitedir}/xpra/codecs
266 %dir %{py3_sitedir}/xpra/codecs/argb
267 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/argb/argb.cpython-*.so
268 %{py3_sitedir}/xpra/codecs/argb/*.py
269 %{py3_sitedir}/xpra/codecs/argb/__pycache__
270 %dir %{py3_sitedir}/xpra/codecs/csc_libyuv
271 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/csc_libyuv/colorspace_converter.cpython-*.so
272 %{py3_sitedir}/xpra/codecs/csc_libyuv/*.py
273 %{py3_sitedir}/xpra/codecs/csc_libyuv/__pycache__
275 %dir %{py3_sitedir}/xpra/codecs/csc_swscale
276 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/csc_swscale/colorspace_converter.cpython-*.so
277 %{py3_sitedir}/xpra/codecs/csc_swscale/*.py
278 %{py3_sitedir}/xpra/codecs/csc_swscale/__pycache__
281 %dir %{py3_sitedir}/xpra/codecs/dec_avcodec2
282 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/dec_avcodec2/decoder.cpython-*.so
283 %{py3_sitedir}/xpra/codecs/dec_avcodec2/*.py
284 %{py3_sitedir}/xpra/codecs/dec_avcodec2/__pycache__
287 %dir %{py3_sitedir}/xpra/codecs/enc_ffmpeg
288 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/enc_ffmpeg/encoder.cpython-*.so
289 %{py3_sitedir}/xpra/codecs/enc_ffmpeg/*.py
290 %{py3_sitedir}/xpra/codecs/enc_ffmpeg/__pycache__
292 %{py3_sitedir}/xpra/codecs/enc_proxy
294 %dir %{py3_sitedir}/xpra/codecs/enc_x264
295 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/enc_x264/encoder.cpython-*.so
296 %{py3_sitedir}/xpra/codecs/enc_x264/*.py
297 %{py3_sitedir}/xpra/codecs/enc_x264/__pycache__
300 %dir %{py3_sitedir}/xpra/codecs/enc_x265
301 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/enc_x265/encoder.cpython-*.so
302 %{py3_sitedir}/xpra/codecs/enc_x265/*.py
303 %{py3_sitedir}/xpra/codecs/enc_x265/__pycache__
305 %dir %{py3_sitedir}/xpra/codecs/jpeg
306 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/jpeg/decoder.cpython-*.so
307 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/jpeg/encoder.cpython-*.so
308 %{py3_sitedir}/xpra/codecs/jpeg/*.py
309 %{py3_sitedir}/xpra/codecs/jpeg/__pycache__
310 %dir %{py3_sitedir}/xpra/codecs/libav_common
311 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/libav_common/av_log.cpython-*.so
312 %{py3_sitedir}/xpra/codecs/libav_common/*.py
313 %{py3_sitedir}/xpra/codecs/libav_common/__pycache__
314 %{py3_sitedir}/xpra/codecs/pillow
315 %dir %{py3_sitedir}/xpra/codecs/v4l2
316 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/v4l2/pusher.cpython-*.so
317 %{py3_sitedir}/xpra/codecs/v4l2/*.py
318 %{py3_sitedir}/xpra/codecs/v4l2/__pycache__
319 %dir %{py3_sitedir}/xpra/codecs/vpx
320 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/vpx/decoder.cpython-*.so
321 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/vpx/encoder.cpython-*.so
322 %{py3_sitedir}/xpra/codecs/vpx/*.py
323 %{py3_sitedir}/xpra/codecs/vpx/__pycache__
324 %dir %{py3_sitedir}/xpra/codecs/webp
325 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/webp/decode.cpython-*.so
326 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/webp/encode.cpython-*.so
327 %{py3_sitedir}/xpra/codecs/webp/*.py
328 %{py3_sitedir}/xpra/codecs/webp/__pycache__
329 %dir %{py3_sitedir}/xpra/codecs/xor
330 %attr(755,root,root) %{py3_sitedir}/xpra/codecs/xor/cyxor.cpython-*.so
331 %{py3_sitedir}/xpra/codecs/xor/*.py
332 %{py3_sitedir}/xpra/codecs/xor/__pycache__
333 %{py3_sitedir}/xpra/codecs/*.py
334 %{py3_sitedir}/xpra/codecs/__pycache__
335 %{py3_sitedir}/xpra/dbus
336 %dir %{py3_sitedir}/xpra/gtk_common
337 %dir %{py3_sitedir}/xpra/gtk_common/gtk3
338 %attr(755,root,root) %{py3_sitedir}/xpra/gtk_common/gtk3/gdk_atoms.cpython-*.so
339 %attr(755,root,root) %{py3_sitedir}/xpra/gtk_common/gtk3/gdk_bindings.cpython-*.so
340 %{py3_sitedir}/xpra/gtk_common/*.py
341 %{py3_sitedir}/xpra/gtk_common/__pycache__
342 %{py3_sitedir}/xpra/keyboard
343 %dir %{py3_sitedir}/xpra/net
344 %dir %{py3_sitedir}/xpra/net/bencode
345 %attr(755,root,root) %{py3_sitedir}/xpra/net/bencode/cython_bencode.cpython-*.so
346 %{py3_sitedir}/xpra/net/bencode/*.py
347 %{py3_sitedir}/xpra/net/bencode/__pycache__
348 %{py3_sitedir}/xpra/net/mdns
349 %{py3_sitedir}/xpra/net/websockets
350 %attr(755,root,root) %{py3_sitedir}/xpra/net/vsock.cpython-*.so
351 %{py3_sitedir}/xpra/net/*.py
352 %{py3_sitedir}/xpra/net/__pycache__
353 %{py3_sitedir}/xpra/notifications
354 %dir %{py3_sitedir}/xpra/platform
355 %dir %{py3_sitedir}/xpra/platform/xposix
356 %attr(755,root,root) %{py3_sitedir}/xpra/platform/xposix/netdev_query.cpython-*.so
357 %attr(755,root,root) %{py3_sitedir}/xpra/platform/xposix/sd_listen.cpython-*.so
358 %{py3_sitedir}/xpra/platform/xposix/*.py
359 %{py3_sitedir}/xpra/platform/xposix/__pycache__
360 %{py3_sitedir}/xpra/platform/*.py
361 %{py3_sitedir}/xpra/platform/__pycache__
362 %{py3_sitedir}/xpra/scripts
363 %dir %{py3_sitedir}/xpra/server
364 %{py3_sitedir}/xpra/server/auth
365 %{py3_sitedir}/xpra/server/dbus
366 %{py3_sitedir}/xpra/server/mixins
367 %{py3_sitedir}/xpra/server/proxy
368 %{py3_sitedir}/xpra/server/rfb
369 %{py3_sitedir}/xpra/server/shadow
370 %{py3_sitedir}/xpra/server/source
371 %dir %{py3_sitedir}/xpra/server/window
372 %attr(755,root,root) %{py3_sitedir}/xpra/server/window/motion.cpython-*.so
373 %{py3_sitedir}/xpra/server/window/*.py
374 %{py3_sitedir}/xpra/server/window/__pycache__
375 %attr(755,root,root) %{py3_sitedir}/xpra/server/cystats.cpython-*.so
376 %attr(755,root,root) %{py3_sitedir}/xpra/server/pam.cpython-*.so
377 %{py3_sitedir}/xpra/server/*.py
378 %{py3_sitedir}/xpra/server/__pycache__
379 %{py3_sitedir}/xpra/sound
380 %dir %{py3_sitedir}/xpra/x11
381 %dir %{py3_sitedir}/xpra/x11/bindings
382 %attr(755,root,root) %{py3_sitedir}/xpra/x11/bindings/*.so
383 %{py3_sitedir}/xpra/x11/bindings/*.py
384 %{py3_sitedir}/xpra/x11/bindings/__pycache__
385 %{py3_sitedir}/xpra/x11/dbus
386 %dir %{py3_sitedir}/xpra/x11/gtk3
387 %attr(755,root,root) %{py3_sitedir}/xpra/x11/gtk3/gdk_bindings.cpython-*.so
388 %attr(755,root,root) %{py3_sitedir}/xpra/x11/gtk3/gdk_display_source.cpython-*.so
389 %{py3_sitedir}/xpra/x11/gtk3/*.py
390 %{py3_sitedir}/xpra/x11/gtk3/__pycache__
391 %{py3_sitedir}/xpra/x11/gtk_x11
392 %{py3_sitedir}/xpra/x11/models
393 %{py3_sitedir}/xpra/x11/*.py
394 %{py3_sitedir}/xpra/x11/__pycache__
395 %attr(755,root,root) %{py3_sitedir}/xpra/monotonic_time.cpython-*.so
396 %attr(755,root,root) %{py3_sitedir}/xpra/rectangle.cpython-*.so
397 %{py3_sitedir}/xpra/*.py
398 %{py3_sitedir}/xpra/__pycache__
399 %{py3_sitedir}/xpra-%{version}-py*.egg-info
401 %files -n cups-backend-xpra
402 %defattr(644,root,root,755)
403 %attr(756,root,root) %{cupsdir}/xpraforwarder