public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Alexey Shvetsov" <alexxy@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: x11-wm/xpra/, x11-wm/xpra/files/
Date: Mon, 10 Jun 2024 19:18:37 +0000 (UTC)	[thread overview]
Message-ID: <1718047101.dcc3756596141e0080544618e18f1152bf0be774.alexxy@gentoo> (raw)

commit:     dcc3756596141e0080544618e18f1152bf0be774
Author:     Paul Zander <negril.nx+gentoo <AT> gmail <DOT> com>
AuthorDate: Tue Jun  4 17:58:47 2024 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Mon Jun 10 19:18:21 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=dcc37565

x11-wm/xpra: add 6.0.1, 6.9999, update 9999

- Python 3.12 support
- PEP517 support
- re-enabled tests
- general rework of the ebuild

Closes: https://bugs.gentoo.org/912679
Closes: https://bugs.gentoo.org/929898
Signed-off-by: Paul Zander <negril.nx+gentoo <AT> gmail.com>
Closes: https://github.com/gentoo/gentoo/pull/37042
Signed-off-by: Alexey Shvetsov <alexxy <AT> gentoo.org>

 x11-wm/xpra/Manifest                     |   1 +
 x11-wm/xpra/files/xpra-9999-pep517.patch |  12 +
 x11-wm/xpra/metadata.xml                 |   4 +
 x11-wm/xpra/xpra-4.4.5-r2.ebuild         |   7 +-
 x11-wm/xpra/xpra-4.4.6-r2.ebuild         |   7 +-
 x11-wm/xpra/xpra-6.0.1.ebuild            | 376 +++++++++++++++++++++++++++++++
 x11-wm/xpra/xpra-6.9999.ebuild           | 376 +++++++++++++++++++++++++++++++
 x11-wm/xpra/xpra-9999.ebuild             | 296 ++++++++++++++++++------
 8 files changed, 999 insertions(+), 80 deletions(-)

diff --git a/x11-wm/xpra/Manifest b/x11-wm/xpra/Manifest
index b2881c697f2b..fb6136d149d3 100644
--- a/x11-wm/xpra/Manifest
+++ b/x11-wm/xpra/Manifest
@@ -1,2 +1,3 @@
 DIST xpra-4.4.5.tar.gz 4332287 BLAKE2B 64165a18d0f204247f984f616438252e82922447441376e6e46a15509486e67f699e852562cd632591fd2831a86592d5029c5905932fc9d267b16a7e6edd1b5a SHA512 6fb28328efc020969fff17bf747a1e0bf5b21869c9532a8c482e12f979d1dec7989e10e5bf3a9ae7dbfaa9e48c670255b196fdb819200a74dfbdec3ba5ae744f
 DIST xpra-4.4.6.tar.gz 4334932 BLAKE2B 0518c6807be85777bb67b0a3283a610c06a97813671bff6edc701533aaa8f26b96e423e56ba56491ede120697277f6935ee26976b49550dfd2d52bbcd2daebd8 SHA512 273ee959647c1281f18c7b1b24d3a5179c4b6ce81515cc34618c698e55bdc2a8e94f0e236d7ab41c7bf29fa7fde0b1a2a1432445b8aaaa0a75cd5a90f4858419
+DIST xpra-6.0.1.tar.gz 17214848 BLAKE2B 81a26cd9aa9a61241ba47bc6712cd225499a82a8743c4f5655f4529d525788789452daaa0894a2cb9292caa7fd9aa64f82ce5b347c9c168815198e18145629b9 SHA512 3520dec19bb6999fc19ffcd3c385545f4a61f7cf50d4d6930eb39dec1341c79f6c4c8c45d526f43b33ed78d5359524103fcf1608dc705b40e330a7eb53de2475

diff --git a/x11-wm/xpra/files/xpra-9999-pep517.patch b/x11-wm/xpra/files/xpra-9999-pep517.patch
new file mode 100644
index 000000000000..48e355913b27
--- /dev/null
+++ b/x11-wm/xpra/files/xpra-9999-pep517.patch
@@ -0,0 +1,12 @@
+diff --git a/pyproject.toml b/pyproject.toml
+index 501829c18..842a2b962 100644
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -1,6 +1,7 @@
+ [build-system]
+ requires = ["setuptools", "cython"]
+ build-backend = "setuptools.build_meta"
++backend-path = [ "" ]
+ 
+ [project]
+ name = "xpra"

diff --git a/x11-wm/xpra/metadata.xml b/x11-wm/xpra/metadata.xml
index 2f4961963d03..9b78c23e894e 100644
--- a/x11-wm/xpra/metadata.xml
+++ b/x11-wm/xpra/metadata.xml
@@ -23,9 +23,13 @@
 	<flag name="clipboard">Enable clipboard support</flag>
 	<flag name="csc">Enable csc softscaler support</flag>
 	<flag name="html">Install the HTML5 client</flag>
+	<flag name="gtk3">Enable the GTK3 client</flag>
 	<flag name="ibus">Use ibus input method via <pkg>app-i18n/ibus</pkg></flag>
+	<flag name="mdns">Enable Multicast DNS via <pkg>dev-libs/mdns</pkg></flag>
 	<flag name="oauth">Enable OAuth2 authentication in the server</flag>
+	<flag name="openh264">Enable H.264 support using <pkg>media-libs/openh264</pkg></flag>
 	<flag name="pinentry">Use <pkg>app-crypt/pinentry</pkg> for password entry</flag>
+	<flag name="qrcode">Enable generating QRCodes for server URL via <pkg>media-gfx/qrencode</pkg></flag>
 	<flag name="trayicon">Enable system tray icon</flag>
 	<flag name="server">Build server-side code</flag>
 	<flag name="vpx">Enable vpx image format support</flag>

diff --git a/x11-wm/xpra/xpra-4.4.5-r2.ebuild b/x11-wm/xpra/xpra-4.4.5-r2.ebuild
index 64f6dfde2400..2069b11904d4 100644
--- a/x11-wm/xpra/xpra-4.4.5-r2.ebuild
+++ b/x11-wm/xpra/xpra-4.4.5-r2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2023 Gentoo Authors
+# Copyright 1999-2024 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
@@ -11,18 +11,19 @@ else
 	KEYWORDS="amd64 x86"
 fi
 
-PYTHON_COMPAT=( python3_{9..11} )
+PYTHON_COMPAT=( python3_{10..11} )
 DISTUTILS_SINGLE_IMPL=yes
 DISTUTILS_USE_SETUPTOOLS=no
 DISTUTILS_EXT=1
 
-inherit xdg xdg-utils distutils-r1 tmpfiles udev
+inherit xdg distutils-r1 tmpfiles udev
 
 DESCRIPTION="X Persistent Remote Apps (xpra) and Partitioning WM (parti) based on wimpiggy"
 HOMEPAGE="https://xpra.org/"
 LICENSE="GPL-2 BSD"
 SLOT="0"
 IUSE="brotli +client +clipboard crypt csc cups dbus doc ffmpeg jpeg html ibus +lz4 lzo minimal oauth opengl pinentry pulseaudio +server sound systemd test +trayicon udev vpx webcam webp xdg xinerama"
+IUSE+=" +python_single_target_python3_11"
 
 REQUIRED_USE="${PYTHON_REQUIRED_USE}
 	|| ( client server )

diff --git a/x11-wm/xpra/xpra-4.4.6-r2.ebuild b/x11-wm/xpra/xpra-4.4.6-r2.ebuild
index b4c34890cee3..9c4083c34137 100644
--- a/x11-wm/xpra/xpra-4.4.6-r2.ebuild
+++ b/x11-wm/xpra/xpra-4.4.6-r2.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2023 Gentoo Authors
+# Copyright 1999-2024 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
@@ -11,18 +11,19 @@ else
 	KEYWORDS="~amd64 ~x86"
 fi
 
-PYTHON_COMPAT=( python3_{9..11} )
+PYTHON_COMPAT=( python3_{10..11} )
 DISTUTILS_USE_PEP517=setuptools
 DISTUTILS_SINGLE_IMPL=yes
 DISTUTILS_EXT=1
 
-inherit xdg xdg-utils distutils-r1 multibuild prefix tmpfiles udev
+inherit xdg distutils-r1 prefix tmpfiles udev
 
 DESCRIPTION="X Persistent Remote Apps (xpra) and Partitioning WM (parti) based on wimpiggy"
 HOMEPAGE="https://xpra.org/"
 LICENSE="GPL-2 BSD"
 SLOT="0"
 IUSE="brotli +client +clipboard crypt csc cups dbus doc ffmpeg jpeg html ibus +lz4 lzo minimal oauth opengl pinentry pulseaudio +server sound systemd test +trayicon udev vpx webcam webp xdg xinerama"
+IUSE+=" +python_single_target_python3_11"
 
 REQUIRED_USE="${PYTHON_REQUIRED_USE}
 	|| ( client server )

diff --git a/x11-wm/xpra/xpra-6.0.1.ebuild b/x11-wm/xpra/xpra-6.0.1.ebuild
new file mode 100644
index 000000000000..bfe892db2a2a
--- /dev/null
+++ b/x11-wm/xpra/xpra-6.0.1.ebuild
@@ -0,0 +1,376 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+if [[ ${PV} = *9999* ]]; then
+	EGIT_REPO_URI="https://github.com/Xpra-org/xpra.git"
+	if [[ ${PV} = 6.9999* ]]; then
+		EGIT_BRANCH="v6.x"
+	fi
+	inherit git-r3
+else
+	inherit pypi
+	KEYWORDS="~amd64 ~x86"
+fi
+
+PYTHON_COMPAT=( python3_{10..12} )
+DISTUTILS_USE_PEP517=setuptools
+DISTUTILS_SINGLE_IMPL=yes
+DISTUTILS_EXT=1
+
+inherit cuda xdg distutils-r1 prefix tmpfiles udev
+
+DESCRIPTION="X Persistent Remote Apps (xpra) and Partitioning WM (parti) based on wimpiggy"
+HOMEPAGE="https://xpra.org/"
+LICENSE="GPL-2 BSD"
+SLOT="0"
+IUSE="+X avif brotli +client +clipboard crypt csc cuda cups dbus debug doc examples gstreamer +gtk3 html ibus jpeg +lz4 lzo mdns minimal oauth opengl openh264 pinentry pulseaudio qrcode +server sound systemd test +trayicon udev vpx webcam webp x264 xdg xinerama "
+IUSE+=" video_cards_nvidia"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}
+	|| ( client gtk3 server )
+	cups? ( dbus )
+	oauth? ( server )
+	opengl? ( client )
+	clipboard? ( gtk3 )
+	gtk3? ( client )
+	test? ( client clipboard crypt dbus gstreamer html server sound xdg xinerama )
+"
+
+TEST_DEPEND="
+	$(python_gen_cond_dep '
+		dev-python/netifaces[${PYTHON_USEDEP}]
+		dev-python/pillow[jpeg?,webp?,${PYTHON_USEDEP}]
+		dev-python/rencode[${PYTHON_USEDEP}]
+		dbus? ( dev-python/dbus-python[${PYTHON_USEDEP}] )
+		xdg? ( dev-python/pyxdg[${PYTHON_USEDEP}] )
+	')
+	html? ( www-apps/xpra-html5 )
+	server? (
+		x11-base/xorg-server[-minimal,xvfb]
+		x11-drivers/xf86-input-void
+	)
+	webcam? ( media-video/v4l2loopback )
+	xinerama? ( x11-libs/libfakeXinerama )
+"
+DEPEND="
+	${PYTHON_DEPS}
+	$(python_gen_cond_dep '
+		dev-python/pygobject:3[${PYTHON_USEDEP}]
+		opengl? ( dev-python/pyopengl[${PYTHON_USEDEP}] )
+		sound? ( dev-python/gst-python:1.0[${PYTHON_USEDEP}] )
+		gtk3? (
+			dev-python/pygobject:3[cairo]
+		)
+	')
+	dev-libs/xxhash
+	avif? ( media-libs/libavif )
+	brotli? ( app-arch/brotli )
+	client? (
+			x11-libs/gtk+:3[X?,introspection]
+		)
+	jpeg? ( media-libs/libjpeg-turbo )
+	mdns? ( dev-libs/mdns )
+	openh264? ( media-libs/openh264:= )
+	pulseaudio? (
+		media-plugins/gst-plugins-pulse:1.0
+		media-plugins/gst-plugins-opus
+	)
+	qrcode? ( media-gfx/qrencode )
+	sound? (
+		media-libs/gstreamer:1.0
+		media-libs/gst-plugins-base:1.0
+	)
+	vpx? ( media-libs/libvpx )
+	webp? ( media-libs/libwebp )
+	X? (
+		x11-apps/xrandr
+		x11-libs/libXcomposite
+		x11-libs/libXdamage
+		x11-libs/libXfixes
+		x11-libs/libXrandr
+		x11-libs/libXres
+		x11-libs/libXtst
+		x11-libs/libxkbfile
+	)
+	x264? ( media-libs/x264 )
+"
+# nvenc? ( amd64? ( media-libs/nv-codec-headers ) )
+RDEPEND="
+	${DEPEND}
+	${TEST_DEPEND}
+	$(python_gen_cond_dep '
+		crypt? ( dev-python/cryptography[${PYTHON_USEDEP}] )
+		cups? ( dev-python/pycups[${PYTHON_USEDEP}] )
+		lz4? ( dev-python/lz4[${PYTHON_USEDEP}] )
+		lzo? ( >=dev-python/python-lzo-0.7.0[${PYTHON_USEDEP}] )
+		oauth? ( dev-python/oauthlib[${PYTHON_USEDEP}] )
+		opengl? ( dev-python/pyopengl_accelerate[${PYTHON_USEDEP}] )
+		webcam? (
+			dev-python/numpy[${PYTHON_USEDEP}]
+			dev-python/pyinotify[${PYTHON_USEDEP}]
+			media-libs/opencv[${PYTHON_USEDEP},python]
+		)
+	')
+	acct-group/xpra
+	virtual/ssh
+	x11-apps/xauth
+	x11-apps/xmodmap
+	ibus? ( app-i18n/ibus )
+	pinentry? ( app-crypt/pinentry )
+	trayicon? ( dev-libs/libayatana-appindicator )
+	udev? ( virtual/udev )
+"
+DEPEND+="
+	test? (
+		${TEST_DEPEND}
+		$(python_gen_cond_dep '
+			dev-python/paramiko[${PYTHON_USEDEP}]
+		')
+	)
+"
+BDEPEND="
+	$(python_gen_cond_dep '
+		dev-python/cython[${PYTHON_USEDEP}]
+		dev-python/pip[${PYTHON_USEDEP}]
+	')
+	virtual/pkgconfig
+	doc? ( virtual/pandoc )
+"
+
+PATCHES=(
+	"${FILESDIR}/${PN}-9999-pep517.patch"
+)
+
+src_prepare() {
+	default
+
+	sed \
+		-e 's#UNITTESTS_DIR=`dirname $(readlink -f $0)`#: "${UNITTESTS_DIR:=`dirname $(readlink -f $0)`}"#' \
+		-e 's#INSTALL_ROOT="$SRC_DIR/dist/python${PYTHON_VERSION}"#: "${INSTALL_ROOT:=$SRC_DIR/dist/python${PYTHON_VERSION}}"#' \
+		-e '/setup.py install/d' \
+		-i "${S}/tests/unittests/run" || die
+}
+
+python_prepare_all() {
+	distutils-r1_python_prepare_all
+
+	hprefixify xpra/scripts/config.py
+
+	sed -r -e "/\bdoc_dir =/s:/${PN}/\":/${PF}/html\":" \
+		-i setup.py || die
+
+	if use minimal; then
+		sed -r -e '/pam_ENABLED/s/DEFAULT/False/' \
+			-e 's/^(xdg_open)_ENABLED = .*/\1_ENABLED = False/' \
+			-i setup.py || die
+	fi
+}
+
+python_configure_all() {
+	sed -e "/'pulseaudio'/s:DEFAULT_PULSEAUDIO:$(usex pulseaudio True False):" \
+		-i setup.py || die
+
+	DISTUTILS_ARGS=(
+		--with-PIC
+		"$(use_with avif)"
+		"$(use_with brotli)"
+		"$(use_with sound audio)"
+		"$(use_with client)"
+		"$(use_with clipboard)"
+		"$(use_with csc csc_cython)"
+		--without-csc_libyuv
+		# "$(use_with csc csc_libyuv)" # https://chromium.googlesource.com/libyuv/libyuv
+		"$(use_with cuda cuda_rebuild)"
+		"$(use_with cuda cuda_kernels)"
+		"$(use_with dbus)"
+		"$(use_with debug)"
+		"$(use_with doc docs)"
+		--without-evdi
+		# "$(use_with evdi)" x11-drivers/evdi::guru
+		"$(use_with examples example)"
+		"$(use_with gstreamer)"
+		"$(use_with gstreamer gstreamer_audio)"
+		"$(use_with gstreamer gstreamer_video)"
+		"$(use_with gtk3)"
+		"$(use_with html http)"
+		"$(use_with mdns)"
+		"$(use_with video_cards_nvidia nvidia)"
+		--without-nvdec
+		--without-nvenc
+		--without-nvfbc
+		# "$(use_with nvenc nvdec)" # NVIDIA Video Codec SDK
+		# "$(use_with nvenc nvenc)" # NVIDIA Video Codec SDK
+		# "$(use_with nvenc nvfbc)" # NVIDIA Capture SDK
+		"$(use_with opengl)"
+		"$(use_with openh264)"
+		"$(use_with cups printing)"
+		--without-pandoc_lua
+		"$(use_with qrcode qrencode)"
+		--without-quic
+		# "$(use_with quic)" # https://github.com/aiortc/aioquic
+		"$(use_with systemd sd_listen)"
+		"$(use_with server)"
+		"$(use_with systemd service)"
+		"$(use_with server shadow)"
+		"$(use_with vpx)"
+		"$(use_with webcam)"
+		"$(use_with webp)"
+		"$(use_with X x11)"
+		"$(use_with X Xdummy)"
+
+		"$(use_with test tests)"
+		--with-strict
+		# --with-verbose
+		# --with-warn
+		# --with-cythonize_more
+
+		--pkg-config-path="${S}/fs/lib/pkgconfig"
+	)
+
+	if use server; then
+		DISTUTILS_ARGS+=(
+			"$(use_with jpeg jpeg_encoder)"
+			"$(use_with vpx vpx_encoder)"
+			"$(use_with openh264 openh264_encoder)"
+			"$(use_with cuda nvjpeg_encoder)"
+			"$(use_with avif avif_encoder)"
+			"$(use_with webp webp_encoder)"
+			--without-spng_encoder
+			# "$(use_with spng spng_encoder)" # https://github.com/randy408/libspng
+		)
+	else
+		DISTUTILS_ARGS+=(
+			--without-jpeg_encoder
+			--without-vpx_encoder
+			--without-openh264_encoder
+			--without-nvjpeg_encoder
+			--without-avif_encoder
+			--without-webp_encoder
+			--without-spng_encoder
+		)
+	fi
+
+	if use client || use gtk3; then
+		DISTUTILS_ARGS+=(
+			"$(use_with vpx vpx_decoder)"
+			"$(use_with openh264 openh264_decoder)"
+			"$(use_with cuda nvjpeg_decoder)"
+			"$(use_with jpeg jpeg_decoder)"
+			"$(use_with avif avif_decoder)"
+			"$(use_with webp webp_decoder)"
+			--without-spng_decoder
+			# "$(use_with spng spng_decoder)" # https://github.com/randy408/libspng
+		)
+	else
+		DISTUTILS_ARGS+=(
+			--without-jpeg_decoder
+			--without-vpx_decoder
+			--without-openh264_decoder
+			--without-nvjpeg_decoder
+			--without-avif_decoder
+			--without-webp_decoder
+			--without-spng_decoder
+		)
+	fi
+
+	DISTUTILS_ARGS+=(
+		# Arguments from user
+		"${MYDISTUTILS_ARGS[@]}"
+	)
+
+	export XPRA_SOCKET_DIRS="${EPREFIX}/var/run/xpra"
+}
+
+python_compile() {
+	if use cuda; then
+		export NVCC_PREPEND_FLAGS="-ccbin $(cuda_gccdir)/g++"
+	fi
+
+	PYTHONPATH="${S}" distutils-r1_python_compile
+}
+
+python_test() {
+	einfo "${BUILD_DIR}/install/$(python_get_sitedir)"
+
+	use cuda && cuda_add_sandbox -w
+	addwrite /dev/dri/renderD128
+
+	addpredict /dev/dri/card0
+	addpredict /dev/fuse
+	addpredict /dev/tty0
+	addpredict /dev/vga_arbiter
+	addpredict /proc/mtrr
+	addpredict /var/run/utmp
+
+	addpredict "$(python_get_sitedir)"
+
+	if [[ -d "/sys/devices/virtual/video4linux" ]]; then
+		local devices
+		readarray -t devices <<<"$(find /sys/devices/virtual/video4linux -mindepth 1 -maxdepth 1 -type d -name 'video*' )"
+		for device in "${devices[@]}"; do
+			addwrite "/dev/$(basename "${device}" || die )"
+		done
+	fi
+
+	xdg_environment_reset
+
+	export XAUTHORITY=${T}/.Xauthority
+	touch "${XAUTHORITY}" || die
+
+	local -x XPRA_TEST_COVERAGE=0 INSTALL_ROOT="${BUILD_DIR}/install" UNITTESTS_DIR="${S}/tests/unittests"
+
+	tests/unittests/run \
+		--skip-fail unit.client.mixins.audioclient_test \
+		--skip-fail unit.client.x11_client_test \
+		--skip-fail unit.net.net_util_test \
+		--skip-fail unit.notifications.common_test \
+		--skip-fail unit.server.mixins.shadow_option_test \
+		--skip-fail unit.server.mixins.start_option_test \
+		--skip-fail unit.server.mixins.startdesktop_option_test \
+		--skip-fail unit.server.server_auth_test \
+		--skip-fail unit.server.shadow_server_test \
+		--skip-fail unit.x11.x11_server_test \
+		--skip-slow unit.client.mixins.webcam_test \
+		--skip-slow unit.server.server_sockets_test \
+		--skip-slow unit.server.source.source_mixins_test \
+	|| die -n
+
+	# remove test file
+	rm "${INSTALL_ROOT}/usr/share/xpra/www" -r || die
+}
+
+python_install_all() {
+	distutils-r1_python_prepare_all
+
+	mv -v "${ED}"/usr/etc "${ED}"/ || die
+
+	sed -e "s#/.*data/etc#/etc#g" \
+		-i "${ED}/etc/xpra/conf.d/"* || die
+
+	# Move udev dir to the right place if necessary.
+	if use udev; then
+		local dir
+		dir=$(get_udevdir)
+		if [[ ! ${ED}/usr/lib/udev -ef ${ED}${dir} ]]; then
+			dodir "${dir%/*}"
+			mv -vnT "${ED}"/usr/lib/udev "${ED}${dir}" || die
+		fi
+	else
+		rm -vr "${ED}"/usr/lib/udev || die
+		rm -v "${ED}"/usr/libexec/xpra/xpra_udev_product_version || die
+	fi
+}
+
+pkg_postinst() {
+	tmpfiles_process xpra.conf
+	xdg_pkg_postinst
+	use udev && udev_reload
+}
+
+pkg_postrm() {
+	xdg_pkg_postinst
+	use udev && udev_reload
+}

diff --git a/x11-wm/xpra/xpra-6.9999.ebuild b/x11-wm/xpra/xpra-6.9999.ebuild
new file mode 100644
index 000000000000..bfe892db2a2a
--- /dev/null
+++ b/x11-wm/xpra/xpra-6.9999.ebuild
@@ -0,0 +1,376 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+if [[ ${PV} = *9999* ]]; then
+	EGIT_REPO_URI="https://github.com/Xpra-org/xpra.git"
+	if [[ ${PV} = 6.9999* ]]; then
+		EGIT_BRANCH="v6.x"
+	fi
+	inherit git-r3
+else
+	inherit pypi
+	KEYWORDS="~amd64 ~x86"
+fi
+
+PYTHON_COMPAT=( python3_{10..12} )
+DISTUTILS_USE_PEP517=setuptools
+DISTUTILS_SINGLE_IMPL=yes
+DISTUTILS_EXT=1
+
+inherit cuda xdg distutils-r1 prefix tmpfiles udev
+
+DESCRIPTION="X Persistent Remote Apps (xpra) and Partitioning WM (parti) based on wimpiggy"
+HOMEPAGE="https://xpra.org/"
+LICENSE="GPL-2 BSD"
+SLOT="0"
+IUSE="+X avif brotli +client +clipboard crypt csc cuda cups dbus debug doc examples gstreamer +gtk3 html ibus jpeg +lz4 lzo mdns minimal oauth opengl openh264 pinentry pulseaudio qrcode +server sound systemd test +trayicon udev vpx webcam webp x264 xdg xinerama "
+IUSE+=" video_cards_nvidia"
+RESTRICT="!test? ( test )"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}
+	|| ( client gtk3 server )
+	cups? ( dbus )
+	oauth? ( server )
+	opengl? ( client )
+	clipboard? ( gtk3 )
+	gtk3? ( client )
+	test? ( client clipboard crypt dbus gstreamer html server sound xdg xinerama )
+"
+
+TEST_DEPEND="
+	$(python_gen_cond_dep '
+		dev-python/netifaces[${PYTHON_USEDEP}]
+		dev-python/pillow[jpeg?,webp?,${PYTHON_USEDEP}]
+		dev-python/rencode[${PYTHON_USEDEP}]
+		dbus? ( dev-python/dbus-python[${PYTHON_USEDEP}] )
+		xdg? ( dev-python/pyxdg[${PYTHON_USEDEP}] )
+	')
+	html? ( www-apps/xpra-html5 )
+	server? (
+		x11-base/xorg-server[-minimal,xvfb]
+		x11-drivers/xf86-input-void
+	)
+	webcam? ( media-video/v4l2loopback )
+	xinerama? ( x11-libs/libfakeXinerama )
+"
+DEPEND="
+	${PYTHON_DEPS}
+	$(python_gen_cond_dep '
+		dev-python/pygobject:3[${PYTHON_USEDEP}]
+		opengl? ( dev-python/pyopengl[${PYTHON_USEDEP}] )
+		sound? ( dev-python/gst-python:1.0[${PYTHON_USEDEP}] )
+		gtk3? (
+			dev-python/pygobject:3[cairo]
+		)
+	')
+	dev-libs/xxhash
+	avif? ( media-libs/libavif )
+	brotli? ( app-arch/brotli )
+	client? (
+			x11-libs/gtk+:3[X?,introspection]
+		)
+	jpeg? ( media-libs/libjpeg-turbo )
+	mdns? ( dev-libs/mdns )
+	openh264? ( media-libs/openh264:= )
+	pulseaudio? (
+		media-plugins/gst-plugins-pulse:1.0
+		media-plugins/gst-plugins-opus
+	)
+	qrcode? ( media-gfx/qrencode )
+	sound? (
+		media-libs/gstreamer:1.0
+		media-libs/gst-plugins-base:1.0
+	)
+	vpx? ( media-libs/libvpx )
+	webp? ( media-libs/libwebp )
+	X? (
+		x11-apps/xrandr
+		x11-libs/libXcomposite
+		x11-libs/libXdamage
+		x11-libs/libXfixes
+		x11-libs/libXrandr
+		x11-libs/libXres
+		x11-libs/libXtst
+		x11-libs/libxkbfile
+	)
+	x264? ( media-libs/x264 )
+"
+# nvenc? ( amd64? ( media-libs/nv-codec-headers ) )
+RDEPEND="
+	${DEPEND}
+	${TEST_DEPEND}
+	$(python_gen_cond_dep '
+		crypt? ( dev-python/cryptography[${PYTHON_USEDEP}] )
+		cups? ( dev-python/pycups[${PYTHON_USEDEP}] )
+		lz4? ( dev-python/lz4[${PYTHON_USEDEP}] )
+		lzo? ( >=dev-python/python-lzo-0.7.0[${PYTHON_USEDEP}] )
+		oauth? ( dev-python/oauthlib[${PYTHON_USEDEP}] )
+		opengl? ( dev-python/pyopengl_accelerate[${PYTHON_USEDEP}] )
+		webcam? (
+			dev-python/numpy[${PYTHON_USEDEP}]
+			dev-python/pyinotify[${PYTHON_USEDEP}]
+			media-libs/opencv[${PYTHON_USEDEP},python]
+		)
+	')
+	acct-group/xpra
+	virtual/ssh
+	x11-apps/xauth
+	x11-apps/xmodmap
+	ibus? ( app-i18n/ibus )
+	pinentry? ( app-crypt/pinentry )
+	trayicon? ( dev-libs/libayatana-appindicator )
+	udev? ( virtual/udev )
+"
+DEPEND+="
+	test? (
+		${TEST_DEPEND}
+		$(python_gen_cond_dep '
+			dev-python/paramiko[${PYTHON_USEDEP}]
+		')
+	)
+"
+BDEPEND="
+	$(python_gen_cond_dep '
+		dev-python/cython[${PYTHON_USEDEP}]
+		dev-python/pip[${PYTHON_USEDEP}]
+	')
+	virtual/pkgconfig
+	doc? ( virtual/pandoc )
+"
+
+PATCHES=(
+	"${FILESDIR}/${PN}-9999-pep517.patch"
+)
+
+src_prepare() {
+	default
+
+	sed \
+		-e 's#UNITTESTS_DIR=`dirname $(readlink -f $0)`#: "${UNITTESTS_DIR:=`dirname $(readlink -f $0)`}"#' \
+		-e 's#INSTALL_ROOT="$SRC_DIR/dist/python${PYTHON_VERSION}"#: "${INSTALL_ROOT:=$SRC_DIR/dist/python${PYTHON_VERSION}}"#' \
+		-e '/setup.py install/d' \
+		-i "${S}/tests/unittests/run" || die
+}
+
+python_prepare_all() {
+	distutils-r1_python_prepare_all
+
+	hprefixify xpra/scripts/config.py
+
+	sed -r -e "/\bdoc_dir =/s:/${PN}/\":/${PF}/html\":" \
+		-i setup.py || die
+
+	if use minimal; then
+		sed -r -e '/pam_ENABLED/s/DEFAULT/False/' \
+			-e 's/^(xdg_open)_ENABLED = .*/\1_ENABLED = False/' \
+			-i setup.py || die
+	fi
+}
+
+python_configure_all() {
+	sed -e "/'pulseaudio'/s:DEFAULT_PULSEAUDIO:$(usex pulseaudio True False):" \
+		-i setup.py || die
+
+	DISTUTILS_ARGS=(
+		--with-PIC
+		"$(use_with avif)"
+		"$(use_with brotli)"
+		"$(use_with sound audio)"
+		"$(use_with client)"
+		"$(use_with clipboard)"
+		"$(use_with csc csc_cython)"
+		--without-csc_libyuv
+		# "$(use_with csc csc_libyuv)" # https://chromium.googlesource.com/libyuv/libyuv
+		"$(use_with cuda cuda_rebuild)"
+		"$(use_with cuda cuda_kernels)"
+		"$(use_with dbus)"
+		"$(use_with debug)"
+		"$(use_with doc docs)"
+		--without-evdi
+		# "$(use_with evdi)" x11-drivers/evdi::guru
+		"$(use_with examples example)"
+		"$(use_with gstreamer)"
+		"$(use_with gstreamer gstreamer_audio)"
+		"$(use_with gstreamer gstreamer_video)"
+		"$(use_with gtk3)"
+		"$(use_with html http)"
+		"$(use_with mdns)"
+		"$(use_with video_cards_nvidia nvidia)"
+		--without-nvdec
+		--without-nvenc
+		--without-nvfbc
+		# "$(use_with nvenc nvdec)" # NVIDIA Video Codec SDK
+		# "$(use_with nvenc nvenc)" # NVIDIA Video Codec SDK
+		# "$(use_with nvenc nvfbc)" # NVIDIA Capture SDK
+		"$(use_with opengl)"
+		"$(use_with openh264)"
+		"$(use_with cups printing)"
+		--without-pandoc_lua
+		"$(use_with qrcode qrencode)"
+		--without-quic
+		# "$(use_with quic)" # https://github.com/aiortc/aioquic
+		"$(use_with systemd sd_listen)"
+		"$(use_with server)"
+		"$(use_with systemd service)"
+		"$(use_with server shadow)"
+		"$(use_with vpx)"
+		"$(use_with webcam)"
+		"$(use_with webp)"
+		"$(use_with X x11)"
+		"$(use_with X Xdummy)"
+
+		"$(use_with test tests)"
+		--with-strict
+		# --with-verbose
+		# --with-warn
+		# --with-cythonize_more
+
+		--pkg-config-path="${S}/fs/lib/pkgconfig"
+	)
+
+	if use server; then
+		DISTUTILS_ARGS+=(
+			"$(use_with jpeg jpeg_encoder)"
+			"$(use_with vpx vpx_encoder)"
+			"$(use_with openh264 openh264_encoder)"
+			"$(use_with cuda nvjpeg_encoder)"
+			"$(use_with avif avif_encoder)"
+			"$(use_with webp webp_encoder)"
+			--without-spng_encoder
+			# "$(use_with spng spng_encoder)" # https://github.com/randy408/libspng
+		)
+	else
+		DISTUTILS_ARGS+=(
+			--without-jpeg_encoder
+			--without-vpx_encoder
+			--without-openh264_encoder
+			--without-nvjpeg_encoder
+			--without-avif_encoder
+			--without-webp_encoder
+			--without-spng_encoder
+		)
+	fi
+
+	if use client || use gtk3; then
+		DISTUTILS_ARGS+=(
+			"$(use_with vpx vpx_decoder)"
+			"$(use_with openh264 openh264_decoder)"
+			"$(use_with cuda nvjpeg_decoder)"
+			"$(use_with jpeg jpeg_decoder)"
+			"$(use_with avif avif_decoder)"
+			"$(use_with webp webp_decoder)"
+			--without-spng_decoder
+			# "$(use_with spng spng_decoder)" # https://github.com/randy408/libspng
+		)
+	else
+		DISTUTILS_ARGS+=(
+			--without-jpeg_decoder
+			--without-vpx_decoder
+			--without-openh264_decoder
+			--without-nvjpeg_decoder
+			--without-avif_decoder
+			--without-webp_decoder
+			--without-spng_decoder
+		)
+	fi
+
+	DISTUTILS_ARGS+=(
+		# Arguments from user
+		"${MYDISTUTILS_ARGS[@]}"
+	)
+
+	export XPRA_SOCKET_DIRS="${EPREFIX}/var/run/xpra"
+}
+
+python_compile() {
+	if use cuda; then
+		export NVCC_PREPEND_FLAGS="-ccbin $(cuda_gccdir)/g++"
+	fi
+
+	PYTHONPATH="${S}" distutils-r1_python_compile
+}
+
+python_test() {
+	einfo "${BUILD_DIR}/install/$(python_get_sitedir)"
+
+	use cuda && cuda_add_sandbox -w
+	addwrite /dev/dri/renderD128
+
+	addpredict /dev/dri/card0
+	addpredict /dev/fuse
+	addpredict /dev/tty0
+	addpredict /dev/vga_arbiter
+	addpredict /proc/mtrr
+	addpredict /var/run/utmp
+
+	addpredict "$(python_get_sitedir)"
+
+	if [[ -d "/sys/devices/virtual/video4linux" ]]; then
+		local devices
+		readarray -t devices <<<"$(find /sys/devices/virtual/video4linux -mindepth 1 -maxdepth 1 -type d -name 'video*' )"
+		for device in "${devices[@]}"; do
+			addwrite "/dev/$(basename "${device}" || die )"
+		done
+	fi
+
+	xdg_environment_reset
+
+	export XAUTHORITY=${T}/.Xauthority
+	touch "${XAUTHORITY}" || die
+
+	local -x XPRA_TEST_COVERAGE=0 INSTALL_ROOT="${BUILD_DIR}/install" UNITTESTS_DIR="${S}/tests/unittests"
+
+	tests/unittests/run \
+		--skip-fail unit.client.mixins.audioclient_test \
+		--skip-fail unit.client.x11_client_test \
+		--skip-fail unit.net.net_util_test \
+		--skip-fail unit.notifications.common_test \
+		--skip-fail unit.server.mixins.shadow_option_test \
+		--skip-fail unit.server.mixins.start_option_test \
+		--skip-fail unit.server.mixins.startdesktop_option_test \
+		--skip-fail unit.server.server_auth_test \
+		--skip-fail unit.server.shadow_server_test \
+		--skip-fail unit.x11.x11_server_test \
+		--skip-slow unit.client.mixins.webcam_test \
+		--skip-slow unit.server.server_sockets_test \
+		--skip-slow unit.server.source.source_mixins_test \
+	|| die -n
+
+	# remove test file
+	rm "${INSTALL_ROOT}/usr/share/xpra/www" -r || die
+}
+
+python_install_all() {
+	distutils-r1_python_prepare_all
+
+	mv -v "${ED}"/usr/etc "${ED}"/ || die
+
+	sed -e "s#/.*data/etc#/etc#g" \
+		-i "${ED}/etc/xpra/conf.d/"* || die
+
+	# Move udev dir to the right place if necessary.
+	if use udev; then
+		local dir
+		dir=$(get_udevdir)
+		if [[ ! ${ED}/usr/lib/udev -ef ${ED}${dir} ]]; then
+			dodir "${dir%/*}"
+			mv -vnT "${ED}"/usr/lib/udev "${ED}${dir}" || die
+		fi
+	else
+		rm -vr "${ED}"/usr/lib/udev || die
+		rm -v "${ED}"/usr/libexec/xpra/xpra_udev_product_version || die
+	fi
+}
+
+pkg_postinst() {
+	tmpfiles_process xpra.conf
+	xdg_pkg_postinst
+	use udev && udev_reload
+}
+
+pkg_postrm() {
+	xdg_pkg_postinst
+	use udev && udev_reload
+}

diff --git a/x11-wm/xpra/xpra-9999.ebuild b/x11-wm/xpra/xpra-9999.ebuild
index b2531fd6fa85..bfe892db2a2a 100644
--- a/x11-wm/xpra/xpra-9999.ebuild
+++ b/x11-wm/xpra/xpra-9999.ebuild
@@ -1,35 +1,42 @@
-# Copyright 1999-2023 Gentoo Authors
+# Copyright 1999-2024 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=8
 
-if [[ ${PV} = 9999* ]]; then
+if [[ ${PV} = *9999* ]]; then
 	EGIT_REPO_URI="https://github.com/Xpra-org/xpra.git"
+	if [[ ${PV} = 6.9999* ]]; then
+		EGIT_BRANCH="v6.x"
+	fi
 	inherit git-r3
 else
 	inherit pypi
 	KEYWORDS="~amd64 ~x86"
 fi
 
-PYTHON_COMPAT=( python3_{9..11} )
+PYTHON_COMPAT=( python3_{10..12} )
 DISTUTILS_USE_PEP517=setuptools
 DISTUTILS_SINGLE_IMPL=yes
 DISTUTILS_EXT=1
 
-inherit xdg xdg-utils distutils-r1 multibuild prefix tmpfiles udev
+inherit cuda xdg distutils-r1 prefix tmpfiles udev
 
 DESCRIPTION="X Persistent Remote Apps (xpra) and Partitioning WM (parti) based on wimpiggy"
 HOMEPAGE="https://xpra.org/"
 LICENSE="GPL-2 BSD"
 SLOT="0"
-IUSE="brotli +client +clipboard crypt csc cups dbus doc ffmpeg jpeg html ibus +lz4 lzo minimal oauth opengl pinentry pulseaudio +server sound systemd test +trayicon udev vpx webcam webp xdg xinerama"
+IUSE="+X avif brotli +client +clipboard crypt csc cuda cups dbus debug doc examples gstreamer +gtk3 html ibus jpeg +lz4 lzo mdns minimal oauth opengl openh264 pinentry pulseaudio qrcode +server sound systemd test +trayicon udev vpx webcam webp x264 xdg xinerama "
+IUSE+=" video_cards_nvidia"
+RESTRICT="!test? ( test )"
 
 REQUIRED_USE="${PYTHON_REQUIRED_USE}
-	|| ( client server )
+	|| ( client gtk3 server )
 	cups? ( dbus )
 	oauth? ( server )
 	opengl? ( client )
-	test? ( client clipboard crypt dbus html server sound xdg xinerama )
+	clipboard? ( gtk3 )
+	gtk3? ( client )
+	test? ( client clipboard crypt dbus gstreamer html server sound xdg xinerama )
 "
 
 TEST_DEPEND="
@@ -45,39 +52,52 @@ TEST_DEPEND="
 		x11-base/xorg-server[-minimal,xvfb]
 		x11-drivers/xf86-input-void
 	)
+	webcam? ( media-video/v4l2loopback )
 	xinerama? ( x11-libs/libfakeXinerama )
 "
 DEPEND="
 	${PYTHON_DEPS}
 	$(python_gen_cond_dep '
-		dev-python/pygobject:3[${PYTHON_USEDEP},cairo]
+		dev-python/pygobject:3[${PYTHON_USEDEP}]
 		opengl? ( dev-python/pyopengl[${PYTHON_USEDEP}] )
 		sound? ( dev-python/gst-python:1.0[${PYTHON_USEDEP}] )
+		gtk3? (
+			dev-python/pygobject:3[cairo]
+		)
 	')
-	x11-libs/gtk+:3[introspection]
-	x11-libs/libX11
-	x11-libs/libXcomposite
-	x11-libs/libXdamage
-	x11-libs/libXfixes
-	x11-libs/libXrandr
-	x11-libs/libXres
-	x11-libs/libXtst
-	x11-libs/libxkbfile
+	dev-libs/xxhash
+	avif? ( media-libs/libavif )
 	brotli? ( app-arch/brotli )
-	csc? ( >=media-video/ffmpeg-1.2.2:0= )
-	ffmpeg? ( >=media-video/ffmpeg-3.2.2:0=[x264] )
+	client? (
+			x11-libs/gtk+:3[X?,introspection]
+		)
 	jpeg? ( media-libs/libjpeg-turbo )
+	mdns? ( dev-libs/mdns )
+	openh264? ( media-libs/openh264:= )
 	pulseaudio? (
-		media-libs/libpulse
 		media-plugins/gst-plugins-pulse:1.0
+		media-plugins/gst-plugins-opus
 	)
+	qrcode? ( media-gfx/qrencode )
 	sound? (
 		media-libs/gstreamer:1.0
 		media-libs/gst-plugins-base:1.0
 	)
-	vpx? ( media-libs/libvpx media-video/ffmpeg )
+	vpx? ( media-libs/libvpx )
 	webp? ( media-libs/libwebp )
+	X? (
+		x11-apps/xrandr
+		x11-libs/libXcomposite
+		x11-libs/libXdamage
+		x11-libs/libXfixes
+		x11-libs/libXrandr
+		x11-libs/libXres
+		x11-libs/libXtst
+		x11-libs/libxkbfile
+	)
+	x264? ( media-libs/x264 )
 "
+# nvenc? ( amd64? ( media-libs/nv-codec-headers ) )
 RDEPEND="
 	${DEPEND}
 	${TEST_DEPEND}
@@ -104,24 +124,36 @@ RDEPEND="
 	udev? ( virtual/udev )
 "
 DEPEND+="
-	test? ( ${TEST_DEPEND} )
+	test? (
+		${TEST_DEPEND}
+		$(python_gen_cond_dep '
+			dev-python/paramiko[${PYTHON_USEDEP}]
+		')
+	)
 "
 BDEPEND="
 	$(python_gen_cond_dep '
-		>=dev-python/cython-0.16[${PYTHON_USEDEP}]
+		dev-python/cython[${PYTHON_USEDEP}]
+		dev-python/pip[${PYTHON_USEDEP}]
 	')
 	virtual/pkgconfig
 	doc? ( virtual/pandoc )
 "
 
-# Broken by PEP517 migration and some tests failed for a while before that for
-# unknown reasons.
-RESTRICT="test"
-
 PATCHES=(
-	"${FILESDIR}"/${PN}-9999-xdummy.patch
+	"${FILESDIR}/${PN}-9999-pep517.patch"
 )
 
+src_prepare() {
+	default
+
+	sed \
+		-e 's#UNITTESTS_DIR=`dirname $(readlink -f $0)`#: "${UNITTESTS_DIR:=`dirname $(readlink -f $0)`}"#' \
+		-e 's#INSTALL_ROOT="$SRC_DIR/dist/python${PYTHON_VERSION}"#: "${INSTALL_ROOT:=$SRC_DIR/dist/python${PYTHON_VERSION}}"#' \
+		-e '/setup.py install/d' \
+		-i "${S}/tests/unittests/run" || die
+}
+
 python_prepare_all() {
 	distutils-r1_python_prepare_all
 
@@ -142,70 +174,186 @@ python_configure_all() {
 		-i setup.py || die
 
 	DISTUTILS_ARGS=(
-		--without-PIC
-		--without-Xdummy
-		$(use_with sound audio)
-		$(use_with client)
-		$(use_with clipboard)
-		$(use_with csc csc_swscale)
+		--with-PIC
+		"$(use_with avif)"
+		"$(use_with brotli)"
+		"$(use_with sound audio)"
+		"$(use_with client)"
+		"$(use_with clipboard)"
+		"$(use_with csc csc_cython)"
 		--without-csc_libyuv
-		--without-cuda_rebuild
-		--without-cuda_kernels
-		$(use_with cups printing)
-		--without-debug
-		$(use_with dbus)
-		$(use_with doc docs)
-		$(use_with ffmpeg dec_avcodec2)
-		$(use_with ffmpeg enc_ffmpeg)
-		$(use_with ffmpeg enc_x264)
-		--without-enc_x265
-		--with-gtk3
-		$(use_with jpeg jpeg_encoder)
-		$(use_with jpeg jpeg_decoder)
-		--without-mdns
-		--without-sd_listen
-		--without-service
-		$(use_with opengl)
-		$(use_with server shadow)
-		$(use_with server)
-		--without-strict
-		$(use_with vpx)
-		--with-warn
-		$(use_with webcam)
-		$(use_with webp)
-		--with-x11
+		# "$(use_with csc csc_libyuv)" # https://chromium.googlesource.com/libyuv/libyuv
+		"$(use_with cuda cuda_rebuild)"
+		"$(use_with cuda cuda_kernels)"
+		"$(use_with dbus)"
+		"$(use_with debug)"
+		"$(use_with doc docs)"
+		--without-evdi
+		# "$(use_with evdi)" x11-drivers/evdi::guru
+		"$(use_with examples example)"
+		"$(use_with gstreamer)"
+		"$(use_with gstreamer gstreamer_audio)"
+		"$(use_with gstreamer gstreamer_video)"
+		"$(use_with gtk3)"
+		"$(use_with html http)"
+		"$(use_with mdns)"
+		"$(use_with video_cards_nvidia nvidia)"
+		--without-nvdec
+		--without-nvenc
+		--without-nvfbc
+		# "$(use_with nvenc nvdec)" # NVIDIA Video Codec SDK
+		# "$(use_with nvenc nvenc)" # NVIDIA Video Codec SDK
+		# "$(use_with nvenc nvfbc)" # NVIDIA Capture SDK
+		"$(use_with opengl)"
+		"$(use_with openh264)"
+		"$(use_with cups printing)"
+		--without-pandoc_lua
+		"$(use_with qrcode qrencode)"
+		--without-quic
+		# "$(use_with quic)" # https://github.com/aiortc/aioquic
+		"$(use_with systemd sd_listen)"
+		"$(use_with server)"
+		"$(use_with systemd service)"
+		"$(use_with server shadow)"
+		"$(use_with vpx)"
+		"$(use_with webcam)"
+		"$(use_with webp)"
+		"$(use_with X x11)"
+		"$(use_with X Xdummy)"
+
+		"$(use_with test tests)"
+		--with-strict
+		# --with-verbose
+		# --with-warn
+		# --with-cythonize_more
+
+		--pkg-config-path="${S}/fs/lib/pkgconfig"
 	)
 
-	export XPRA_SOCKET_DIRS="${EPREFIX}/run/xpra"
+	if use server; then
+		DISTUTILS_ARGS+=(
+			"$(use_with jpeg jpeg_encoder)"
+			"$(use_with vpx vpx_encoder)"
+			"$(use_with openh264 openh264_encoder)"
+			"$(use_with cuda nvjpeg_encoder)"
+			"$(use_with avif avif_encoder)"
+			"$(use_with webp webp_encoder)"
+			--without-spng_encoder
+			# "$(use_with spng spng_encoder)" # https://github.com/randy408/libspng
+		)
+	else
+		DISTUTILS_ARGS+=(
+			--without-jpeg_encoder
+			--without-vpx_encoder
+			--without-openh264_encoder
+			--without-nvjpeg_encoder
+			--without-avif_encoder
+			--without-webp_encoder
+			--without-spng_encoder
+		)
+	fi
+
+	if use client || use gtk3; then
+		DISTUTILS_ARGS+=(
+			"$(use_with vpx vpx_decoder)"
+			"$(use_with openh264 openh264_decoder)"
+			"$(use_with cuda nvjpeg_decoder)"
+			"$(use_with jpeg jpeg_decoder)"
+			"$(use_with avif avif_decoder)"
+			"$(use_with webp webp_decoder)"
+			--without-spng_decoder
+			# "$(use_with spng spng_decoder)" # https://github.com/randy408/libspng
+		)
+	else
+		DISTUTILS_ARGS+=(
+			--without-jpeg_decoder
+			--without-vpx_decoder
+			--without-openh264_decoder
+			--without-nvjpeg_decoder
+			--without-avif_decoder
+			--without-webp_decoder
+			--without-spng_decoder
+		)
+	fi
+
+	DISTUTILS_ARGS+=(
+		# Arguments from user
+		"${MYDISTUTILS_ARGS[@]}"
+	)
+
+	export XPRA_SOCKET_DIRS="${EPREFIX}/var/run/xpra"
+}
+
+python_compile() {
+	if use cuda; then
+		export NVCC_PREPEND_FLAGS="-ccbin $(cuda_gccdir)/g++"
+	fi
+
+	PYTHONPATH="${S}" distutils-r1_python_compile
 }
 
 python_test() {
-	export XAUTHORITY=${HOME}/.Xauthority
-	touch "${XAUTHORITY}" || die
+	einfo "${BUILD_DIR}/install/$(python_get_sitedir)"
+
+	use cuda && cuda_add_sandbox -w
+	addwrite /dev/dri/renderD128
+
+	addpredict /dev/dri/card0
+	addpredict /dev/fuse
+	addpredict /dev/tty0
+	addpredict /dev/vga_arbiter
+	addpredict /proc/mtrr
+	addpredict /var/run/utmp
+
+	addpredict "$(python_get_sitedir)"
+
+	if [[ -d "/sys/devices/virtual/video4linux" ]]; then
+		local devices
+		readarray -t devices <<<"$(find /sys/devices/virtual/video4linux -mindepth 1 -maxdepth 1 -type d -name 'video*' )"
+		for device in "${devices[@]}"; do
+			addwrite "/dev/$(basename "${device}" || die )"
+		done
+	fi
 
-	distutils_install_for_testing
 	xdg_environment_reset
 
-	env -u WAYLAND_DISPLAY -u XDG_SESSION_TYPE \
-	PYTHONPATH="${S}/tests/unittests:${BUILD_DIR}/test/lib" \
-	XPRA_SYSTEMD_RUN=$(usex systemd) XPRA_TEST_COVERAGE=0 \
-		"${PYTHON}" "${S}"/tests/unittests/unit/run.py || die
+	export XAUTHORITY=${T}/.Xauthority
+	touch "${XAUTHORITY}" || die
+
+	local -x XPRA_TEST_COVERAGE=0 INSTALL_ROOT="${BUILD_DIR}/install" UNITTESTS_DIR="${S}/tests/unittests"
+
+	tests/unittests/run \
+		--skip-fail unit.client.mixins.audioclient_test \
+		--skip-fail unit.client.x11_client_test \
+		--skip-fail unit.net.net_util_test \
+		--skip-fail unit.notifications.common_test \
+		--skip-fail unit.server.mixins.shadow_option_test \
+		--skip-fail unit.server.mixins.start_option_test \
+		--skip-fail unit.server.mixins.startdesktop_option_test \
+		--skip-fail unit.server.server_auth_test \
+		--skip-fail unit.server.shadow_server_test \
+		--skip-fail unit.x11.x11_server_test \
+		--skip-slow unit.client.mixins.webcam_test \
+		--skip-slow unit.server.server_sockets_test \
+		--skip-slow unit.server.source.source_mixins_test \
+	|| die -n
+
+	# remove test file
+	rm "${INSTALL_ROOT}/usr/share/xpra/www" -r || die
 }
 
 python_install_all() {
 	distutils-r1_python_prepare_all
 
-	# Switching to PEP517 gives /usr/etc. Previously, setup.py hardcodes
-	# if root_prefix.endswith("/usr"):
-	#     root_prefix = root_prefix[:-4]
-	# But now setuptools uses data/* to represent out-of-sitedir files.
-	# The upstream hack no longer works. We are on our own.
-
 	mv -v "${ED}"/usr/etc "${ED}"/ || die
 
+	sed -e "s#/.*data/etc#/etc#g" \
+		-i "${ED}/etc/xpra/conf.d/"* || die
+
 	# Move udev dir to the right place if necessary.
 	if use udev; then
-		local dir=$(get_udevdir)
+		local dir
+		dir=$(get_udevdir)
 		if [[ ! ${ED}/usr/lib/udev -ef ${ED}${dir} ]]; then
 			dodir "${dir%/*}"
 			mv -vnT "${ED}"/usr/lib/udev "${ED}${dir}" || die


             reply	other threads:[~2024-06-10 19:18 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-10 19:18 Alexey Shvetsov [this message]
  -- strict thread matches above, loose matches on Subject: below --
2023-09-02  9:19 [gentoo-commits] repo/gentoo:master commit in: x11-wm/xpra/, x11-wm/xpra/files/ Benda XU
2023-05-01  7:51 James Le Cuirot
2022-08-29 14:06 James Le Cuirot
2022-02-28 23:05 James Le Cuirot
2022-01-15 23:31 James Le Cuirot
2021-10-06 12:08 James Le Cuirot
2021-09-04 10:18 James Le Cuirot
2021-07-18 10:43 Conrad Kostecki
2021-05-30  7:56 James Le Cuirot
2020-10-29 22:24 Andreas K. Hüttel
2020-01-16 11:31 Andreas K. Hüttel
2019-12-16 14:11 Benda XU
2019-11-29  4:41 Benda XU
2018-12-02 22:39 Andreas K. Hüttel
2017-03-10 12:17 Michael Weber
2016-02-22 13:37 Michael Weber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1718047101.dcc3756596141e0080544618e18f1152bf0be774.alexxy@gentoo \
    --to=alexxy@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox