Compare commits

..

1 commit

Author SHA1 Message Date
Sérgio M. Basto
aa267f2158 Rebuild for ffmpeg-7 (rhbz#2508238)| [bump release: 1] 2026-08-02 18:12:30 +02:00
6 changed files with 313 additions and 167 deletions

14
.gitignore vendored
View file

@ -89,17 +89,3 @@
/xpra-5.0.3.tar.gz
/xpra-5.0.6.tar.gz
/xpra-5.0.10.tar.gz
/xpra-5.1.tar.gz
/xpra-5.1.1.tar.gz
/xpra-6.3.4.tar.gz
/xpra-6.3.5.tar.gz
/xpra-6.3.6.tar.gz
/xpra-6.4.tar.gz
/xpra-6.4.1.tar.gz
/xpra-6.4.2.tar.gz
/xpra-6.4.3.tar.gz
/xpra-6.4.4.tar.gz
/xpra-6.5.tar.gz
/xpra-6.5.1.tar.gz
/xpra-6.5.2.tar.gz
/xpra-6.5.3.tar.gz

View file

@ -0,0 +1,156 @@
From 6722df9aeb90857bc1c979c92d47e57903e0ebd6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?= <zebob.m@gmail.com>
Date: Tue, 7 May 2024 07:23:07 +0200
Subject: [PATCH] Add compatibility with FFMPEG 7.0
channel_layout has been replaced with ch_layout
avcodec_close has been deprecated in favor of avcodec_free_context
avio: Constify data pointees of write callbacks
FF_API_FRAME_PICTURE_NUMBER has been deprecated
AV_PIX_FMT_XVMC has been deprecated
---
xpra/codecs/ffmpeg/decoder.pyx | 9 ++-------
xpra/codecs/ffmpeg/encoder.pyx | 37 ++++++++++++++++++++++------------
2 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/xpra/codecs/ffmpeg/decoder.pyx b/xpra/codecs/ffmpeg/decoder.pyx
index 4f71b5bf1f..f1df36a85a 100644
--- a/xpra/codecs/ffmpeg/decoder.pyx
+++ b/xpra/codecs/ffmpeg/decoder.pyx
@@ -295,6 +295,7 @@ cdef extern from "libavcodec/avcodec.h":
int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options)
AVFrame* av_frame_alloc()
void av_frame_free(AVFrame **frame)
+ int avcodec_close(AVCodecContext *avctx)
#actual decoding:
AVPacket *av_packet_alloc() nogil
@@ -818,7 +819,10 @@ cdef class Decoder:
img.clone_pixel_data()
log("clean_decoder() freeing AVCodecContext: %#x", <uintptr_t> self.codec_ctx)
if self.codec_ctx!=NULL:
- avcodec_free_context(&self.codec_ctx)
+ r = avcodec_close(self.codec_ctx)
+ if r!=0:
+ log.error("Error: failed to close decoder context %#x:", <uintptr_t> self.codec_ctx)
+ log.error(" %s", av_error_str(r))
f = self.file
if f:
self.file = None
diff --git a/xpra/codecs/ffmpeg/encoder.pyx b/xpra/codecs/ffmpeg/encoder.pyx
index 6af88a5629..5df0c590c0 100644
--- a/xpra/codecs/ffmpeg/encoder.pyx
+++ b/xpra/codecs/ffmpeg/encoder.pyx
@@ -120,10 +120,26 @@ cdef extern from "libavformat/avio.h":
AVIOContext *avio_alloc_context(unsigned char *buffer, int buffer_size, int write_flag,
void *opaque,
int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
- int (*write_packet)(void *opaque, uint8_t *buf, int buf_size) except 0,
+ int (*write_packet)(void *opaque, const uint8_t *buf, int buf_size) except 0,
int64_t (*seek)(void *opaque, int64_t offset, int whence))
+cdef extern from "libavutil/channel_layout.h":
+ ctypedef int AVChannelOrder
+ ctypedef int AVChannel
+ ctypedef struct AVChannelCustom:
+ AVChannel id
+ char name[16]
+ void *opaque
+ ctypedef union ChannelUnion:
+ uint64_t mask
+ AVChannelCustom* map
+ ctypedef struct AVChannelLayout:
+ AVChannelOrder order
+ int nb_channels
+ ChannelUnion u
+ void *opaque
+
cdef extern from "libavcodec/avcodec.h":
int FF_THREAD_SLICE #allow more than one thread per frame
int FF_THREAD_FRAME #Decode more than one frame at once
@@ -190,8 +206,6 @@ cdef extern from "libavcodec/avcodec.h":
int format
int key_frame
int64_t pts
- int coded_picture_number
- int display_picture_number
int quality
void *opaque
AVPictureType pict_type
@@ -288,14 +302,12 @@ cdef extern from "libavcodec/avcodec.h":
#skipped: AVColor*
int slices
int sample_rate
- int channels
AVSampleFormat sample_fmt
+ AVChannelLayout ch_layout
int frame_size
int frame_number
int block_align
int cutoff
- uint64_t channel_layout
- uint64_t request_channel_layout
#skipped: AVAudioServiceType
# AVSampleFormat
int refcounted_frames
@@ -483,7 +495,7 @@ cdef extern from "libavutil/opt.h":
AVOptionType AV_OPT_TYPE_VIDEO_RATE
AVOptionType AV_OPT_TYPE_DURATION
AVOptionType AV_OPT_TYPE_COLOR
- AVOptionType AV_OPT_TYPE_CHANNEL_LAYOUT
+ AVOptionType AV_OPT_TYPE_CHLAYOUT
AVOptionType AV_OPT_TYPE_BOOL
int AV_OPT_SEARCH_CHILDREN
@@ -686,7 +698,7 @@ AV_OPT_TYPES = {
AV_OPT_TYPE_VIDEO_RATE : "VIDEO_RATE",
AV_OPT_TYPE_DURATION : "DURATION",
AV_OPT_TYPE_COLOR : "COLOR",
- AV_OPT_TYPE_CHANNEL_LAYOUT : "CHANNEL_LAYOUT",
+ AV_OPT_TYPE_CHLAYOUT : "CHANNEL_LAYOUT",
AV_OPT_TYPE_BOOL : "BOOL",
}
@@ -1137,7 +1149,7 @@ cdef list_options(void *obj, const AVClass *av_class, int skip=1):
list_options(child, child_class, skip-1)
-cdef int write_packet(void *opaque, uint8_t *buf, int buf_size) except 0:
+cdef int write_packet(void *opaque, const uint8_t *buf, int buf_size) except 0:
global GEN_TO_ENCODER
encoder = GEN_TO_ENCODER.get(<uintptr_t> opaque)
#log.warn("write_packet(%#x, %#x, %#x) encoder=%s", <uintptr_t> opaque, <uintptr_t> buf, buf_size, type(encoder))
@@ -1504,7 +1517,7 @@ cdef class Encoder:
self.audio_ctx.time_base.num = 1
self.audio_ctx.bit_rate = 64000
self.audio_ctx.sample_rate = 44100
- self.audio_ctx.channels = 2
+ self.audio_ctx.ch_layout.nb_channels = 2
#if audio_codec.capabilities & CODEC_CAP_VARIABLE_FRAME_SIZE:
# pass
#cdef AVDictionary *opts = NULL
@@ -1689,8 +1702,6 @@ cdef class Encoder:
self.av_frame.height = self.height
self.av_frame.format = self.pix_fmt
self.av_frame.pts = self.frames+1
- self.av_frame.coded_picture_number = self.frames+1
- self.av_frame.display_picture_number = self.frames+1
#if self.frames==0:
self.av_frame.pict_type = AV_PICTURE_TYPE_I
#self.av_frame.key_frame = 1
@@ -1823,7 +1834,7 @@ cdef class Encoder:
def write_packet(self, uintptr_t buf, int buf_size):
log("write_packet(%#x, %#x)", <uintptr_t> buf, buf_size)
- cdef uint8_t *cbuf = <uint8_t*> buf
+ cdef const uint8_t *cbuf = <const uint8_t*> buf
buffer = cbuf[:buf_size]
self.buffers.append(buffer)
return buf_size
--
2.44.0

View file

@ -0,0 +1,41 @@
only on ppc64le pandoc returns -11
Debian.md -> Debian.html
Traceback (most recent call last):
File "/builddir/build/BUILD/xpra-4.4.4/setup.py", line 2384, in <module>
main()
File "/builddir/build/BUILD/xpra-4.4.4/setup.py", line 2380, in main
setup(**setup_options)
File "/usr/lib64/python3.11/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib64/python3.11/distutils/dist.py", line 966, in run_commands
self.run_command(cmd)
File "/usr/lib64/python3.11/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/usr/lib64/python3.11/distutils/command/install.py", line 584, in run
self.run_command(cmd_name)
File "/usr/lib64/python3.11/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib64/python3.11/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/builddir/build/BUILD/xpra-4.4.4/setup.py", line 1810, in run
convert_doc_dir("./docs", doc_dir)
File "/builddir/build/BUILD/xpra-4.4.4/setup.py", line 423, in convert_doc_dir
convert_doc_dir(fsrc, fdst, fmt, force)
File "/builddir/build/BUILD/xpra-4.4.4/setup.py", line 426, in convert_doc_dir
convert_doc(fsrc, fdst, fmt, force)
File "/builddir/build/BUILD/xpra-4.4.4/setup.py", line 413, in convert_doc
assert r==0, "'%s' returned %s" % (" ".join(cmd), r)
^^^^
AssertionError: 'pandoc --from markdown --to html -o /builddir/build/BUILDROOT/xpra-4.4.4-1.fc38.ppc64le/usr/share/doc/xpra/Build/Debian.html ./docs/Build/Debian.md --lua-filter ./fs/bin/links-to-html.lua' returned -11
--- ./setup.py.orig 2024-10-11 13:20:23.798168651 +0100
+++ ./setup.py 2024-10-11 13:23:23.220858810 +0100
@@ -514,7 +514,7 @@ def convert_doc(fsrc, fdst, fmt="html",
else:
cmd += ["--lua-filter", "./fs/bin/links-to-html.lua"]
r = subprocess.Popen(cmd).wait(TIMEOUT)
- assert r==0, "'%s' returned %s" % (" ".join(cmd), r)
+ #assert r==0, "'%s' returned %s" % (" ".join(cmd), r)
def convert_doc_dir(src, dst, fmt="html", force=False):
print("%-20s -> %s" % (src, dst))

View file

@ -1 +1 @@
SHA512 (xpra-6.5.3.tar.gz) = 98eee6577d26cf15cdf8115352e73601438804a69d5081d7af908d9c4fc03e44e723eb74cc6f468c92c8e935cc5e897bcdeda316d3f756905b368e83ac051d91
SHA512 (xpra-5.0.10.tar.gz) = e1b01eb1d36351db460d7631dd33efd24e68d374784d803fcd8ad6774b25509dcd42c2d62fd00999ec513265745a3be17dde611a61c07fa70136f319a9a4eaca

View file

@ -1,11 +0,0 @@
--- a/fs/etc/xpra/xpra.orig.conf 2025-11-02 12:49:06.000000000 +0100
+++ b/fs/etc/xpra/xpra.conf 2025-11-09 15:18:11.280317871 +0100
@@ -20,3 +20,8 @@
# may just be specified multiple times.
# - You may break a long line into multiple lines
# by ending each line with a backslash '\'.
+
+xvfb = Xvfb -screen 0 1920x1100x24 -nolisten tcp -noreset
+
+# Use PipeWire's PulseAudio socket, do NOT spawn pulseaudio
+pulseaudio = no

256
xpra.spec
View file

@ -1,11 +1,40 @@
%bcond_with enc_x264
%bcond_with enc_x265
# Theses settings requires 64bit
%if 0%{?__isa_bits} == 64
%bcond_without dec_avcodec2
%bcond_without csc_swscale
%else
%bcond_with dec_avcodec2
%bcond_with csc_swscale
%endif
# For debugging only
%bcond_with debug
%if %{with debug}
%global _with_debug --with-debug
%endif
#
%if 0%{?fedora}
%bcond_with openh264
%else
%bcond_with openh264
%global __js_jquery_latest %{_datadir}/javascript/jquery/latest/
# These are necessary as the _with_foo is *not* defined if the
# --with flag isn't specifed, and we need to have the --without
# specified option in that case.
%if %{without enc_x264}
%global _with_enc_x264 --without-enc_x264
%endif
%if %{with enc_x265}
%global _with_enc_x265 --with-enc_x265
%endif
%if %{without dec_avcodec2}
%global _with_dec_avcodec2 --without-dec_avcodec2
%endif
%if %{without csc_swscale}
%global _with_csc_swscale --without-csc_swscale
%endif
# Remove private provides from .so files in the python3_sitearch directory
@ -19,25 +48,20 @@
%global cupslibdir %(cups-config --serverbin 2> /dev/null || echo "/usr/lib/cups")
%endif
%global gnome_shell_extension input-source-manager@xpra_org
%global build_opts -C--global-option=--without-nvidia -C--global-option=--without-pandoc_lua -C--global-option=--with-verbose -C--global-option=--with-Xdummy -C--global-option=--with-Xdummy_wrapper -C--global-option=--without-strict -C--global-option=--with-vpx %{?with_debug:-C--global-option=--with-debug} %{?with_openh264:-C--global-option=--with-openh264} -C--global-option=--without-cuda_rebuild -C--global-option=--with-client -C--global-option=--without-qt6_client -C--global-option=--without-pyglet_client -C--global-option=--without-enc_x264
Name: xpra
Version: 6.5.3
Release: %autorelease
Epoch: 1
Version: 5.0.10
Release: %autorelease -b 1
Summary: Remote display server for applications and desktops
License: GPL-2.0-or-later AND BSD-2-Clause AND LGPL-3.0-or-later AND BSD-3-Clause
# Automatically converted from old format: GPLv2+ and BSD and LGPLv3+ and MIT - review is highly recommended.
License: GPL-2.0-or-later AND LicenseRef-Callaway-BSD AND LGPL-3.0-or-later AND LicenseRef-Callaway-MIT
URL: https://www.xpra.org/
Source0: https://github.com/Xpra-org/xpra/archive/refs/tags/v%{version}/%{name}-%{version}.tar.gz
# Appdata file for Fedora
Source1: %{name}.appdata.xml
# Suggested from update testing
# https://bodhi.fedoraproject.org/updates/FEDORA-2025-0882918c25#comment-4407961
Patch0: %{name}-fix_audio.patch
Patch1: ignore_assert_pandoc.patch
# Add compatibility with FFMPEG 7.0
# https://github.com/Xpra-org/xpra/pull/4216
Patch2: 0001-Add-compatibility-with-FFMPEG-7.0.patch
BuildRequires: python3-devel
BuildRequires: gtk3-devel
@ -50,7 +74,6 @@ BuildRequires: desktop-file-utils
BuildRequires: libvpx-devel
BuildRequires: libXdamage-devel
BuildRequires: libXres-devel
BuildRequires: lua-devel
BuildRequires: cups-devel
BuildRequires: python3-cups
BuildRequires: redhat-rpm-config
@ -58,11 +81,8 @@ BuildRequires: python3-rpm-macros
BuildRequires: gcc-c++
BuildRequires: pam-devel
BuildRequires: pandoc
# needs by setup.py to detect systemd `sd_listen_ENABLED = POSIX and pkg_config_ok("--exists", "libsystemd")`
BuildRequires: systemd-devel
BuildRequires: systemd-rpm-macros
%if 0%{?fedora}
BuildRequires: procps-ng-devel
%endif
@ -70,30 +90,49 @@ BuildRequires: pkgconfig(libavif)
BuildRequires: pkgconfig(libqrencode)
BuildRequires: libdrm-devel
BuildRequires: pkgconfig(libwebp)
%if 0%{?el8}
#BuildRequires: xorg-x11-server-Xvfb
#BuildRequires: cairo-devel
BuildRequires: pygobject3-devel
%else
BuildRequires: python3-gobject-devel
%endif
BuildRequires: libappstream-glib
BuildRequires: libasan
BuildRequires: python3-cairo-devel
BuildRequires: xorg-x11-server-Xorg
BuildRequires: xorg-x11-drv-dummy
BuildRequires: xorg-x11-server-Xvfb
BuildRequires: xorg-x11-xauth
BuildRequires: xxhash-devel
BuildRequires: xkbcomp
BuildRequires: setxkbmap
%if %{with debug}
BuildRequires: libasan
%endif
%if %{with enc_x264}
BuildRequires: x264-devel
%endif
# While ffmpeg-devel should only be needed in theses conditions, setup.py requires it anyway
#if %%{with dec_avcodec2} || %%{with csc_swscale}
BuildRequires: pkgconfig(libavcodec)
BuildRequires: pkgconfig(libavformat)
BuildRequires: pkgconfig(libavutil)
BuildRequires: pkgconfig(libswscale)
%if %{with openh264}
BuildRequires: noopenh264-devel
%endif
#endif
Requires: python3-pillow
Requires: python3-cups
Requires: python3-pyopengl
Requires: python3-gobject
Requires: python3-inotify
Requires: python3-lz4
Requires: python3-ldap3
Requires: python3-rencode
Requires: python3-netifaces
Requires: python3-dbus
Requires: python3-numpy
%if 0%{?fedora}
Requires: python3-zeroconf
%endif
Requires: dbus-x11
Requires: xmodmap
Requires: xrandr
@ -113,7 +152,23 @@ Requires: pulseaudio-utils%{?_isa}
%endif
Requires: cups-filesystem
Requires: shared-mime-info%{?_isa}
Requires: js-jquery
# python3-opencv is required for webcam forwarding support, client-side only.
# Available on Fedora only.
# https://github.com/Xpra-org/xpra/issues/4035#issuecomment-2405430577
#%%{?fedora:Requires: python3-opencv}
# Needed to create the xpra group
Requires(pre): shadow-utils
# xpra-html5 is now separately provided
Obsoletes: xpra-html5 < 0:4.1-1
Requires: systemd-udev%{?_isa}
Obsoletes: xpra-udev < %{version}-%{release}
Provides: xpra-udev = %{version}-%{release}
%description
Xpra is "screen for X": it allows you to run X programs, usually on a remote
host, direct their display to your local machine, and then to disconnect from
@ -126,68 +181,40 @@ Sessions can be accessed over SSH, or password protected over plain TCP sockets.
Xpra is usable over reasonably slow links and does its best to adapt to changing
network bandwidth constraints.
%package -n %{name}-client-gnome
Summary: Gnome integration for the xpra client
Requires: %{name}-client-gtk3%{?_isa} = 1:%{version}-%{release}
Requires: gnome-shell-extension-appindicator
%description -n %{name}-client-gnome
This package installs the GNOME Shell extensions
that can help in restoring the system tray functionality.
It also includes the gnome_shell_extension extension which
is required for querying and activating keyboard input sources.
%package -n %{name}-client-gtk3
Summary: GTK3 xpra client
BuildRequires: xclip
Requires: %{name}%{?_isa} = 1:%{version}-%{release}
%description -n %{name}-client-gtk3
This package contains the GTK3 xpra client.
%package -n %{name}-plugin-lua
Summary: Wireshark/tshark Lua dissector for the Xpra remote display protocol
BuildRequires: wireshark-devel
%{?lua_version:Requires: lua(abi) = %{lua_version}}
Requires: %{name}%{?_isa} = 1:%{version}-%{release}
Requires: wireshark-cli%{?_isa}
%description -n %{name}-plugin-lua
The dissector registers on TCP port 14500 (xpra default) and also
installs a heuristic detector so it picks up traffic on any port.
Use Decode As Xpra to force it on a different port.
%prep
%autosetup -n %{name}-%{version} -N
%setup -q -n %{name}-%{version}
%if 0%{?fedora} || 0%{?rhel} >= 9
%patch -P 0 -p1 -b .backup
%endif
rm -rf *.egg-info
%patch -P1 -p1
%patch -P2 -p1
# cc1: error: unrecognized compiler option -mfpmath=387
%ifarch %{arm}
sed -i 's|-mfpmath=387|-mfloat-abi=hard|' setup.py
%endif
# Create a sysusers.d config file
cat >xpra.sysusers.conf <<EOF
g xpra -
EOF
%generate_buildrequires
%pyproject_buildrequires
%build
export CFLAGS="%{optflags} -I%{_includedir}/security %(pkgconf --cflags pygobject-3.0)"
%pyproject_wheel %{build_opts}
%set_build_flags
%py3_build -- \
--without-nvidia --without-pandoc_lua \
--with-verbose \
--with-vpx \
%{?_with_enc_x264} \
%{?_with_enc_x265} \
%{?_with_dec_avcodec2} \
%{?_with_csc_swscale} \
%{?_with_debug} \
--with-Xdummy \
--with-Xdummy_wrapper \
--without-strict \
--with-enc_ffmpeg
%install
%pyproject_install
%pyproject_save_files xpra
%py3_install
# Install config files in the right directory
mv %{buildroot}%{_prefix}/etc %{buildroot}/
mkdir -p %{buildroot}%{_unitdir}
mv %{buildroot}/lib/systemd/system/xpra.* %{buildroot}%{_unitdir}/
# move icon to proper directory
#move icon to proper directory
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/48x48/apps
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/64x64/apps
@ -200,25 +227,25 @@ install -pm 644 fs/share/icons/xpra-mdns.png %{buildroot}%{_datadir}/icons/hicol
rm -f %{buildroot}%{_datadir}/icons/xpra-shadow.png
install -pm 644 fs/share/icons/xpra-shadow.png %{buildroot}%{_datadir}/icons/hicolor/48x48/apps/
# replace old file with horrible WindowsXP old image
#replace old file with horrible WindowsXP old image
rm -rf %{buildroot}%{_datadir}/appdata
mkdir -p %{buildroot}%{_metainfodir}
install -pm 644 %{SOURCE1} %{buildroot}%{_metainfodir}/
# Install nvenc.keys file
#Install nvenc.keys file
mkdir -p %{buildroot}%{_sysconfdir}/xpra
install -pm 644 fs/etc/xpra/nvenc.keys %{buildroot}%{_sysconfdir}/xpra
# remove doc stuff from /usr/share
#remove doc stuff from /usr/share
rm %{buildroot}%{_datadir}/xpra/COPYING
# fix shebangs from python3_sitearch
#fix shebangs from python3_sitearch
for i in `ack -rl '^#!/.*python' %{buildroot}%{python3_sitearch}/xpra`; do
%py3_shebang_fix $i
chmod 0755 $i
done
# fix permissions on shared objects
#fix permissions on shared objects
find %{buildroot}%{python3_sitearch}/xpra -name '*.so' \
-exec chmod 0755 {} \;
@ -243,48 +270,17 @@ rm -rf %{buildroot}%{_docdir}/xpra/Build
install -pm 644 README.md %{buildroot}%{_docdir}/xpra/
install -m0644 -D xpra.sysusers.conf %{buildroot}%{_sysusersdir}/xpra.conf
# Remove invalid paths
sed -e 's|build/bdist.linux-%{?_arch}/wheel/xpra-%{version}.data/data||g' -i %{buildroot}%{_sysconfdir}/xpra/conf.d/55_server_x11.conf
# Move Lua script into wireshark plugin directory and remove invalid /usr sub-directory
%define wireshark_plugindir %(pkg-config --variable plugindir wireshark)/epan
mkdir -p %{buildroot}%{wireshark_plugindir}
%ifarch %{ix86}
cp -p %{buildroot}/usr/%{_libdir}/wireshark/plugins/xpra_dissector.lua %{buildroot}%{wireshark_plugindir}/
%else
cp -p %{buildroot}/usr/%{wireshark_plugindir}/xpra_dissector.lua %{buildroot}%{wireshark_plugindir}/
%endif
rm -rf %{buildroot}/usr/%{_libdir}
%post
%systemd_post xpra-encoder.service
%systemd_post xpra.service
# Suggested by 'rpmlint -e post-without-tmpfile-creation'
%tmpfiles_create %{_tmpfilesdir}/xpra.conf
%preun
%systemd_preun xpra-encoder.service
%systemd_preun xpra.service
%postun
%systemd_postun_with_restart xpra-encoder.service
%systemd_postun_with_restart xpra.service
%check
%{?fedora:appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/xpra.appdata.xml}
desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%pre
getent group xpra >/dev/null || groupadd -r xpra
%files -f %{pyproject_files}
%files
%license COPYING
%dir %{_sysconfdir}/xpra
%dir %{_sysconfdir}/xpra/conf.d
%dir %{_sysconfdir}/xpra/content-type
%dir %{_sysconfdir}/xpra/pulse
%dir %{_rundir}/xpra
%config(noreplace) %{_sysconfdir}/xpra/pulse/xpra.pa
%config(noreplace) %{_sysconfdir}/xpra/*.conf
%config(noreplace) %{_sysconfdir}/xpra/nvenc.keys
%config(noreplace) %{_sysconfdir}/xpra/conf.d/*.conf
@ -298,20 +294,19 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%config(noreplace) %{_sysconfdir}/xpra/content-type/30_title.conf
%config(noreplace) %{_sysconfdir}/xpra/content-type/50_class.conf
%config(noreplace) %{_sysconfdir}/xpra/content-type/70_commands.conf
%config(noreplace) %{_sysconfdir}/xpra/content-type/90_fallback.conf
%config(noreplace) %{_sysconfdir}/xpra/http-headers/00_nocache.txt
%config(noreplace) %{_sysconfdir}/xpra/http-headers/10_content_security_policy.txt
%ghost %attr(1700,-,xpra) %{_rundir}/xpra/proxy
%{_libexecdir}/xpra/
%{_bindir}/xpra
%{_bindir}/xpra_launcher
%{_bindir}/run_scaled
%{_bindir}/xpra_Xdummy
%{_sysusersdir}/*.conf
%{python3_sitearch}/xpra/
%{python3_sitearch}/*.egg-info
%{_datadir}/applications/xpra*.desktop
%{_datadir}/icons/hicolor/48x48/apps/xpra-mdns.png
%{_datadir}/icons/hicolor/48x48/apps/xpra-shadow.png
%{_datadir}/icons/hicolor/64x64/apps/xpra.png
%{_datadir}/icons/xpra-large.png
%{_mandir}/man1/xpra.1.*
%{_mandir}/man1/xpra_*.1.*
%{_mandir}/man1/run_scaled.1.*
@ -320,32 +315,11 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%{_datadir}/xpra/
%{cupslibdir}/backend/xpraforwarder
%{_tmpfilesdir}/xpra.conf
%dir %{_rundir}/xpra
%{_docdir}/xpra
%{_unitdir}/xpra.service
%{_unitdir}/xpra-encoder.service
%{_unitdir}/xpra.socket
%{_unitdir}/xpra-encoder.socket
%{_udevrulesdir}/71-xpra-virtual-pointer.rules
%{_sysusersdir}/xpra.conf
%files -n %{name}-client-gtk3
%{python3_sitearch}/xpra/client/gui/
%{python3_sitearch}/xpra/client/gtk3/
%{_libexecdir}/xpra/xpra_signal_listener
%{_datadir}/applications/xpra-launcher.desktop
%{_datadir}/applications/xpra-gui.desktop
%{_datadir}/applications/xpra.desktop
%{_datadir}/mime/packages/application-x-xpraconfig.xml
%{_datadir}/xpra/autostart.desktop
%files -n %{name}-client-gnome
%{_datadir}/gnome-shell/extensions/%{gnome_shell_extension}/COPYING
%{_datadir}/gnome-shell/extensions/%{gnome_shell_extension}/README.md
%{_datadir}/gnome-shell/extensions/%{gnome_shell_extension}/extension.js
%{_datadir}/gnome-shell/extensions/%{gnome_shell_extension}/metadata.json
%files -n %{name}-plugin-lua
%{wireshark_plugindir}/xpra_dissector.lua
%changelog
%autochangelog