# # spec file # # Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via https://bugs.opensuse.org/ # %define X_display ":98" %bcond_with test %bcond_without syswx %if %{with syswx} %define wx_args --use_syswx --gtk3 -v %else %define wx_args --gtk3 -v %endif %global flavor @BUILD_FLAVOR@%{nil} %if 0%{suse_version} >= 1550 # Tumbleweed has a varying number of python3 flavors. Ideally, the flavor # selection here and in _multibuild is in sync with the Factory prjconf # definition for pythons, but if it is not, we build missing flavors in -other # and do not build flavors which are not yet or not anymore in the buildset. %define pprefix %flavor %define psuffix -mb %if "%flavor" != "python36" || %{with test} # No numpy for Python 3.6 %define skip_python36 1 %endif %if "%flavor" != "python38" %define skip_python38 1 %endif %if "%flavor" != "python39" %define skip_python39 1 %endif %if "%flavor" != "python310" %define skip_python310 1 %endif %if "%flavor" == "" %define pprefix python %define psuffix -other %endif # The obs server-side interpreter cannot use lua or rpm shrink %if "%pythons" == "" || "%pythons" == " " || "%pythons" == " " || "%pythons" == " " ExclusiveArch: donotbuild %endif %else # The SLE/Leap python3 package is built without subpackage rewriting in the main flavor %if "%flavor" == "" %define pprefix python3 %define psuffix %{nil} %define pythons python3 %define python_files() -n %{pprefix}-%{**} %define python_module() python3-%{**} %define python_version %python3_version %define python_sitearch %python3_sitearch %else ExclusiveArch: donotbuild %endif %endif %define plainpython python Name: %{pprefix}-wxPython%{psuffix} Version: 4.1.1 Release: 0 Summary: The "Phoenix" variant of the wxWidgets Python bindings License: GPL-2.0-or-later Group: System/Libraries URL: https://github.com/wxWidgets/Phoenix Source: https://files.pythonhosted.org/packages/source/w/wxPython/wxPython-%{version}.tar.gz Source1: python-wxPython-rpmlintrc # PATCH-FIX-OPENSUSE fix_no_return_in_nonvoid.patch -- Fix lack of return in nonvoid functions Patch0: fix_no_return_in_nonvoid.patch # PATCH-FIX-OPENSUSE Patch1: use_stl_build.patch # PATCH-FIX-UPSTREAM wxPython-4.1.1-fix-overrides.patch -- Fix build with wxWidgets 3.1.5 (gh#wxWidgets/Phoenix#1909) Patch2: wxPython-4.1.1-fix-overrides.patch # PATCH-FIX-UPSTREAM 2039-bunch-py310-fixes.patch gh#wxWidgets/Phoenix#2039 mcepl@suse.com # Fix a bunch of Python 3.10 issues with pure-Python classes and demos Patch3: 2039-bunch-py310-fixes.patch # PATCH-FIX-UPSTREAM additional-310-fixes.patch bsc#[0-9]+ mcepl@suse.com # collection of patches: Patch4: additional-310-fixes.patch BuildRequires: %{python_module base} BuildRequires: %{python_module devel} BuildRequires: %{python_module requests} BuildRequires: %{python_module setuptools} BuildRequires: c++_compiler BuildRequires: fdupes BuildRequires: pkgconfig BuildRequires: python-rpm-macros %if %{with syswx} BuildRequires: wxGTK3-devel >= 3.1.5 %else BuildRequires: freeglut-devel BuildRequires: gstreamer-plugins-base-devel BuildRequires: libjbig-devel BuildRequires: pkgconfig(gstreamer-1.0) BuildRequires: pkgconfig(gtk+-3.0) BuildRequires: pkgconfig(libjpeg) BuildRequires: pkgconfig(liblzma) BuildRequires: pkgconfig(libmspack) BuildRequires: pkgconfig(libnotify) BuildRequires: pkgconfig(libpng16) BuildRequires: pkgconfig(libtiff-4) BuildRequires: pkgconfig(sdl2) BuildRequires: pkgconfig(sm) BuildRequires: pkgconfig(webkit2gtk-4.0) BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(xtst) %endif %if %{with test} BuildRequires: %{python_module numpy} BuildRequires: %{python_module pytest-xdist} BuildRequires: %{python_module pytest} BuildRequires: %{python_module six} # Need at least one font installed BuildRequires: google-opensans-fonts BuildRequires: wxWidgets-lang BuildRequires: xorg-x11-server BuildRequires: pkgconfig(cppunit) %endif %if 0%{suse_version} >= 1550 %define python_subpackage_only 1 %python_subpackages %else Requires: %{pprefix}-six Requires(post): update-alternatives Requires(postun):update-alternatives Conflicts: %{pprefix}-wxWidgets Provides: %{pprefix}-wxWidgets = %{version} %endif %description Phoenix is a reimplementation of wxPython. Like the "classic" wxPython, Phoenix wraps the wxWidgets C++ toolkit and provides access to the user interface portions of the wxWidgets API, enabling Python applications to have a GUI on Windows, macOS or Unix-like systems, with a native look and feel and requiring very little (if any) platform specific code. %package lang # We cannot use %%lang_package here. Editra translations use noarch incompatible path. Summary: Languages for package %{name} Group: System/Libraries Requires: %{name} = %{version} Requires: %{plainpython}(abi) = %python_version Supplements: (bundle-lang-other and %{name}) Provides: %{name}-lang-all = %{version} %description lang Provides translations to the package %{name}. %package -n python-wxPython%{?nosub} # extra definition for %%python_subpackage_only mechanism, keep in sync with main definitions. Summary: The "Phoenix" variant of the wxWidgets Python bindings Requires: python-six Requires(post): update-alternatives Requires(postun):update-alternatives Conflicts: python-wxWidgets Provides: python-wxWidgets = %{version} %description -n python-wxPython Phoenix is a reimplementation of wxPython. Like the "classic" wxPython, Phoenix wraps the wxWidgets C++ toolkit and provides access to the user interface portions of the wxWidgets API, enabling Python applications to have a GUI on Windows, macOS or Unix-like systems, with a native look and feel and requiring very little (if any) platform specific code. %package -n python-wxPython-lang # We cannot use %%lang_package here. Editra translations use noarch incompatible path. Summary: Languages for package %{pprefix}-wxPython Group: System/Libraries Requires: python-wxPython = %{version} Requires: %{plainpython}(abi) = %python_version Supplements: (bundle-lang-other and python-wxPython) Provides: python-wxPython-lang-all = %{version} %description -n python-wxPython-lang Provides translations to the package %pprefix-wxPython. %prep %autosetup -n wxPython-%{version} -p1 sed -i -e '/^#!\//, 1d' wx/py/*.py sed -i -e '/^#!\//, 1d' wx/tools/*.py sed -i -e '/^#!\//, 1d' wx/py/tests/*.py echo "# empty module" >> wx/lib/pubsub/core/itopicdefnprovider.py %build export CFLAGS="%{optflags}" export DOXYGEN=%{_bindir}/doxygen %python_expand $python build.py build %{wx_args} %install %python_expand $python build.py install %{wx_args} --destdir=%{buildroot} --extra_setup="-O1 --force" # build.py install helpfully installs built shared libraries for all versions, # so remove those for other versions. %{python_expand find %{buildroot}%{$python_sitearch} -name *.so ! -name *cpython-%{$python_version_nodots}*so -delete} %python_expand %fdupes %{buildroot}%{$python_sitearch} %python_clone -a %{buildroot}%{_bindir}/helpviewer %python_clone -a %{buildroot}%{_bindir}/img2png %python_clone -a %{buildroot}%{_bindir}/img2py %python_clone -a %{buildroot}%{_bindir}/img2xpm %python_clone -a %{buildroot}%{_bindir}/pycrust %python_clone -a %{buildroot}%{_bindir}/pyshell %python_clone -a %{buildroot}%{_bindir}/pyslices %python_clone -a %{buildroot}%{_bindir}/pyslicesshell %python_clone -a %{buildroot}%{_bindir}/pywxrc %python_clone -a %{buildroot}%{_bindir}/wxdemo %python_clone -a %{buildroot}%{_bindir}/wxdocs %python_clone -a %{buildroot}%{_bindir}/wxget # Note: find_lang only works for one python flavor per multibuild, # cannot use python_find_lang in python_subpackage_only mode. %find_lang wxstd %{python_expand # echo "%%dir %{$python_sitearch}/wx/locale/ %%dir %{$python_sitearch}/wx/locale/* %%dir %{$python_sitearch}/wx/locale/*/LC_MESSAGES" >> wxstd.lang } %if "%psuffix" == "-other" if [ $(echo %pythons | wc -w) -gt 1 ]; then # could not collect for only one flavor, package locale files unmarked echo "" > wxstd.lang fi %endif %check %if %{with test} ############################################# ### Launch a virtual framebuffer X server ### ############################################# export DISPLAY=%{X_display} Xvfb %{X_display} >& Xvfb.log & trap "kill $! || true" EXIT sleep 5 # Make sure "import wx" does not confuse the wx dir with the module mv wx wx_temp # Run each test as a separate process, otherwise multiple app # instances will corrupt each others static data # Run UiAction tests one by one %pytest_arch --forked -n 1 -k 'test_uiaction or test_mousemanager' unittests/ # Skip Auto ID management test (only enabled on Windows) # Skip Frame restore (requires a window manager) # Skip UiAction tests (already done) %pytest_arch --forked -n auto -k '(not test_newIdRef03) and (not test_uiaction) and (not test_mousemanager) and (not test_frameRestore)' unittests/ mv wx_temp wx %endif %if 0%{?python_subpackage_only} %post -n python-wxPython %{python_install_alternative pywxrc helpviewer img2png img2py img2xpm pycrust pyshell pyslices pyslicesshell wxdemo wxdocs wxget} %postun -n python-wxPython %{python_uninstall_alternative pywxrc} %else %post %{python_install_alternative pywxrc helpviewer img2png img2py img2xpm pycrust pyshell pyslices pyslicesshell wxdemo wxdocs wxget} %postun %{python_uninstall_alternative pywxrc} %endif %files %{python_files wxPython} %license LICENSE.txt license/*.txt %doc CHANGES.rst README.rst TODO.rst %python_alternative %{_bindir}/helpviewer %python_alternative %{_bindir}/img2png %python_alternative %{_bindir}/img2py %python_alternative %{_bindir}/img2xpm %python_alternative %{_bindir}/pycrust %python_alternative %{_bindir}/pyshell %python_alternative %{_bindir}/pyslices %python_alternative %{_bindir}/pyslicesshell %python_alternative %{_bindir}/pywxrc %python_alternative %{_bindir}/wxdemo %python_alternative %{_bindir}/wxdocs %python_alternative %{_bindir}/wxget %{python_sitearch}/wxPython-%{version}-py*.egg-info %{python_sitearch}/wx/ %exclude %{python_sitearch}/wx/locale/ %files %{python_files wxPython-lang} -f wxstd.lang %if "%psuffix" == "-other" %{python_sitearch}/wx/locale/ %endif %changelog