dev-python/wxpython: fix tests on 32-bit arches

See commentary in the patch, but the gist is that we go back to 'long'
as a hack, although it's not right for Windows.

Closes: https://bugs.gentoo.org/922328
Signed-off-by: Sam James <sam@gentoo.org>
This commit is contained in:
Sam James
2024-06-18 00:44:09 +01:00
parent 5e31d0a493
commit 0fe84cfb62
2 changed files with 162 additions and 0 deletions

View File

@@ -0,0 +1,34 @@
https://bugs.gentoo.org/922328
https://github.com/wxWidgets/Phoenix/issues/1910
https://github.com/wxWidgets/Phoenix/issues/2197 (specifically https://github.com/wxWidgets/Phoenix/issues/2197#issuecomment-1169378156)
https://github.com/StefanBruens/Phoenix/commit/8b743981d557d0465ba53e938784be94f4679145 but w/ s/SIP_SSIZE_T/long
i.e. a revert of https://github.com/wxWidgets/Phoenix/commit/c78823549bac1b28d99a1ad6dc1008485a2afb33.
From 8b743981d557d0465ba53e938784be94f4679145 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20Br=C3=BCns?= <stefan.bruens@rwth-aachen.de>
Date: Tue, 28 Jun 2022 18:32:32 +0200
Subject: [PATCH] Fix time_t ETG typedef, extend DateTime.FromTimeT tests
Before c78823549bac ("Ensure time_t is treated as a 64-bit value by SIP")
the typedef used "long" instead of wxInt64, which caused issues on Win64,
as long is 32bit there (LLP64). On the other hand, wxInt64 is wrong on
32 bit Linux (e.g. armv7, i586), and thus the code crashes.
As SIP_SSIZE_T is 64 bit for both LLP64 (Windows) and LP64 (Linux), but
32 bit on 32bit archs, it matches time_t better (though, according to the
C standard, it could even be a double).
Fixes #2197.
etg/defs.py | 2 +-
--- a/etg/defs.py
+++ b/etg/defs.py
@@ -73,7 +73,7 @@ def run():
td = module.find('wxUIntPtr')
module.insertItemAfter(td, etgtools.TypedefDef(type='wchar_t', name='wxUChar'))
module.insertItemAfter(td, etgtools.TypedefDef(type='wchar_t', name='wxChar'))
- module.insertItemAfter(td, etgtools.TypedefDef(type='wxInt64', name='time_t'))
+ module.insertItemAfter(td, etgtools.TypedefDef(type='long', name='time_t'))
module.insertItemAfter(td, etgtools.TypedefDef(type='long long', name='wxFileOffset'))
module.insertItemAfter(td, etgtools.TypedefDef(type='SIP_SSIZE_T', name='ssize_t'))
module.insertItemAfter(td, etgtools.TypedefDef(type='unsigned char', name='byte', pyInt=True))

View File

@@ -0,0 +1,128 @@
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DISTUTILS_EXT=1
DISTUTILS_IN_SOURCE_BUILD="1"
PYTHON_COMPAT=( python3_{10..12} )
PYPI_NO_NORMALIZE=1
PYPI_PN="wxPython"
WX_GTK_VER="3.2-gtk3"
inherit distutils-r1 multiprocessing virtualx wxwidgets pypi
DESCRIPTION="A blending of the wxWindows C++ class library with Python"
HOMEPAGE="
https://www.wxpython.org/
https://github.com/wxWidgets/Phoenix/
https://pypi.org/project/wxPython/
"
LICENSE="wxWinLL-3"
SLOT="4.0"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
IUSE="test webkit"
RESTRICT="!test? ( test )"
# wxPython doesn't seem to be able to optionally disable features. webkit is
# optionally patched out because it's so huge, but other elements are not,
# which makes us have to require all features from wxGTK
DEPEND="
>=x11-libs/wxGTK-3.0.4-r301:${WX_GTK_VER}=[gstreamer,libnotify,opengl,sdl,tiff,webkit?,X]
media-libs/libpng:=
media-libs/tiff:=
media-libs/libjpeg-turbo:=
"
RDEPEND="
${DEPEND}
"
BDEPEND="
app-text/doxygen
dev-python/cython[${PYTHON_USEDEP}]
dev-python/setuptools[${PYTHON_USEDEP}]
>=dev-python/sip-6.6.2[${PYTHON_USEDEP}]
dev-python/six[${PYTHON_USEDEP}]
test? (
${VIRTUALX_DEPEND}
dev-python/appdirs[${PYTHON_USEDEP}]
dev-python/numpy[${PYTHON_USEDEP}]
dev-python/pillow[${PYTHON_USEDEP}]
dev-python/pytest[${PYTHON_USEDEP}]
dev-python/pytest-forked[${PYTHON_USEDEP}]
dev-python/pytest-xdist[${PYTHON_USEDEP}]
)
"
PATCHES=(
"${FILESDIR}/${PN}-4.2.0-flags.patch"
"${FILESDIR}/${PN}-4.2.0-cython-3.patch"
"${FILESDIR}/${PN}-4.2.1-integer-division-for-randint.patch"
"${FILESDIR}/${PN}-4.2.1-x86-time.patch"
)
python_prepare_all() {
if ! use webkit; then
eapply "${FILESDIR}/${PN}-4.2.0-no-webkit.patch"
fi
distutils-r1_python_prepare_all
}
src_configure() {
setup-wxwidgets
}
python_compile() {
DOXYGEN="$(type -P doxygen)" ${PYTHON} build.py dox etg --nodoc || die
# Refresh the bundled/pregenerated sip files
"${EPYTHON}" build.py sip || die
# Build the bindings
"${EPYTHON}" build.py build_py \
--use_syswx \
--no_magic \
--jobs="$(makeopts_jobs)" \
--verbose \
--release || die
}
python_test() {
local EPYTEST_DESELECT=(
# virtx probably
unittests/test_display.py::display_Tests::test_display
unittests/test_frame.py::frame_Tests::test_frameRestore
unittests/test_mousemanager.py::mousemanager_Tests::test_mousemanager1
unittests/test_uiaction.py::uiaction_KeyboardTests::test_uiactionKeyboardChar
unittests/test_uiaction.py::uiaction_KeyboardTests::test_uiactionKeyboardKeyDownUp
unittests/test_uiaction.py::uiaction_MouseTests
# assertion (TODO)
unittests/test_aboutdlg.py::aboutdlg_Tests::test_aboutdlgGeneric
unittests/test_lib_agw_piectrl.py::lib_agw_piectrl_Tests::test_lib_agw_piectrlCtor
# seems to rely on state from a previous test (sigh)
unittests/test_lib_agw_persist_persistencemanager.py::lib_agw_persist_persistencemanager_Tests::test_persistencemanagerRestore
# requires Spanish localization
unittests/test_intl.py::intl_Tests::test_intlGetString
# TODO
unittests/test_tipwin.py::tipwin_Tests::test_tipwinCtor
unittests/test_lib_pubsub_provider.py::lib_pubsub_Except::test1
unittests/test_windowid.py::IdManagerTest::test_newIdRef03
)
local EPYTEST_IGNORE=()
if ! use webkit; then
EPYTEST_IGNORE+=( unittests/test_webview.py )
fi
# We use pytest-forked as opensuse does to avoid tests corrupting each
# other.
virtx epytest --forked -n "$(makeopts_jobs)" unittests
}
python_install() {
distutils-r1_python_install --skip-build
}