Bug 2247185

Summary: pygobject3 fails to build in current Fedora Rawhide (F40)
Product: [Fedora] Fedora Reporter: Karolina Surma <ksurma>
Component: pygobject3Assignee: Colin Walters <walters>
Status: CLOSED COMPLETED QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 40CC: icq, mhroncok, walters
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Linux   
Whiteboard:
Fixed In Version: pygobject3-3.48.2-1.fc40, pygobject3-3.48.2-2.fc41 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2024-09-04 16:08:59 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2231791, 2244836    

Description Karolina Surma 2023-10-31 07:21:07 UTC
Hello,

pygobject3 stopped building successfully due to the test suite failure in Fedora Rawhide:

+ xvfb-run -s '-screen 0 1600x1200x24' /usr/bin/meson test -C redhat-linux-build --num-processes 8 --print-errorlogs --timeout-multiplier=5
ninja: Entering directory `/builddir/build/BUILD/pygobject-3.46.0/redhat-linux-build'
ninja: no work to do.
1/1 pygobject-test-suite FAIL             3.28s   exit status 2
>>> LD_LIBRARY_PATH=/builddir/build/BUILD/pygobject-3.46.0/redhat-linux-build/tests PYTHONPATH=/builddir/build/BUILD/pygobject-3.46.0/redhat-linux-build/tests/..:/builddir/build/BUILD/pygobject-3.46.0/redhat-linux-build/subprojects/pycairo TESTS_BUILDDIR=/builddir/build/BUILD/pygobject-3.46.0/redhat-linux-build/tests GI_TYPELIB_PATH=/builddir/build/BUILD/pygobject-3.46.0/redhat-linux-build/tests MALLOC_PERTURB_=31 /usr/bin/python3 /builddir/build/BUILD/pygobject-3.46.0/tests/runtests.py
――――――――――――――――――――――――――――――――――――― ✀  ―――――――――――――――――――――――――――――――――――――
Listing only the last 100 lines from a long log.
    importlib.import_module(module_name)
/usr/lib64/python3.12/importlib/__init__.py:90: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
<frozen importlib._bootstrap>:1381: in _gcd_import
    ???
<frozen importlib._bootstrap>:1354: in _find_and_load
    ???
<frozen importlib._bootstrap>:1325: in _find_and_load_unlocked
    ???
<frozen importlib._bootstrap>:929: in _load_unlocked
    ???
/usr/lib/python3.12/site-packages/_pytest/assertion/rewrite.py:178: in exec_module
    exec(co, module.__dict__)
../tests/test_atoms.py:25: in <module>
    @unittest.skipIf(Gdk._version == "4.0", 'Gdk4 doesn\'t have GdkAtom')
E   AttributeError: 'NoneType' object has no attribute '_version'
_________________ ERROR collecting tests/test_overrides_gdk.py _________________
/usr/lib/python3.12/site-packages/_pytest/runner.py:341: in from_call
    result: Optional[TResult] = func()
/usr/lib/python3.12/site-packages/_pytest/runner.py:372: in <lambda>
    call = CallInfo.from_call(lambda: list(collector.collect()), "collect")
/usr/lib/python3.12/site-packages/_pytest/python.py:531: in collect
    self._inject_setup_module_fixture()
/usr/lib/python3.12/site-packages/_pytest/python.py:545: in _inject_setup_module_fixture
    self.obj, ("setUpModule", "setup_module")
/usr/lib/python3.12/site-packages/_pytest/python.py:310: in obj
    self._obj = obj = self._getobj()
/usr/lib/python3.12/site-packages/_pytest/python.py:528: in _getobj
    return self._importtestmodule()
/usr/lib/python3.12/site-packages/_pytest/python.py:617: in _importtestmodule
    mod = import_path(self.path, mode=importmode, root=self.config.rootpath)
/usr/lib/python3.12/site-packages/_pytest/pathlib.py:567: in import_path
    importlib.import_module(module_name)
/usr/lib64/python3.12/importlib/__init__.py:90: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
<frozen importlib._bootstrap>:1381: in _gcd_import
    ???
<frozen importlib._bootstrap>:1354: in _find_and_load
    ???
<frozen importlib._bootstrap>:1325: in _find_and_load_unlocked
    ???
<frozen importlib._bootstrap>:929: in _load_unlocked
    ???
/usr/lib/python3.12/site-packages/_pytest/assertion/rewrite.py:178: in exec_module
    exec(co, module.__dict__)
../tests/test_overrides_gdk.py:40: in <module>
    class TestGdk(unittest.TestCase):
../tests/test_overrides_gdk.py:319: in TestGdk
    @unittest.skipUnless(gtkver() >= (4, 8, 0), "constructor available since 4.8")
../tests/test_overrides_gdk.py:23: in gtkver
    if Gtk is None:
E   NameError: name 'Gtk' is not defined
_________________ ERROR collecting tests/test_overrides_gtk.py _________________
/usr/lib/python3.12/site-packages/_pytest/runner.py:341: in from_call
    result: Optional[TResult] = func()
/usr/lib/python3.12/site-packages/_pytest/runner.py:372: in <lambda>
    call = CallInfo.from_call(lambda: list(collector.collect()), "collect")
/usr/lib/python3.12/site-packages/_pytest/python.py:531: in collect
    self._inject_setup_module_fixture()
/usr/lib/python3.12/site-packages/_pytest/python.py:545: in _inject_setup_module_fixture
    self.obj, ("setUpModule", "setup_module")
/usr/lib/python3.12/site-packages/_pytest/python.py:310: in obj
    self._obj = obj = self._getobj()
/usr/lib/python3.12/site-packages/_pytest/python.py:528: in _getobj
    return self._importtestmodule()
/usr/lib/python3.12/site-packages/_pytest/python.py:617: in _importtestmodule
    mod = import_path(self.path, mode=importmode, root=self.config.rootpath)
/usr/lib/python3.12/site-packages/_pytest/pathlib.py:567: in import_path
    importlib.import_module(module_name)
/usr/lib64/python3.12/importlib/__init__.py:90: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
<frozen importlib._bootstrap>:1381: in _gcd_import
    ???
<frozen importlib._bootstrap>:1354: in _find_and_load
    ???
<frozen importlib._bootstrap>:1325: in _find_and_load_unlocked
    ???
<frozen importlib._bootstrap>:929: in _load_unlocked
    ???
/usr/lib/python3.12/site-packages/_pytest/assertion/rewrite.py:178: in exec_module
    exec(co, module.__dict__)
../tests/test_overrides_gtk.py:39: in <module>
    GTK4 = (Gtk._version == "4.0")
E   AttributeError: 'NoneType' object has no attribute '_version'
=============================== warnings summary ===============================
../gi/overrides/__init__.py:108: 11 warnings
  /builddir/build/BUILD/pygobject-3.46.0/gi/overrides/__init__.py:108: DeprecationWarning: 'pkgutil.get_loader' is deprecated and slated for removal in Python 3.14; use importlib.util.find_spec() instead
    override_loader = get_loader(override_package_name)
../../../../../usr/lib64/python3.12/pkgutil.py:291: 11 warnings
  /usr/lib64/python3.12/pkgutil.py:291: DeprecationWarning: 'pkgutil.find_loader' is deprecated and slated for removal in Python 3.14; use importlib.util.find_spec() instead
    return find_loader(fullname)
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
ERROR ../tests/test_atoms.py - AttributeError: 'NoneType' object has no attri...
ERROR ../tests/test_overrides_gdk.py - NameError: name 'Gtk' is not defined
ERROR ../tests/test_overrides_gtk.py - AttributeError: 'NoneType' object has ...
!!!!!!!!!!!!!!!!!!! Interrupted: 3 errors during collection !!!!!!!!!!!!!!!!!!!!


Why reporting (except for the obvious)?
We've already started integrating Python 3.13-a1 to Fedora. There are many packages that depend on pygobject3 to build and unblocking the build would help us greatly to continue with our integration efforts.
In case of any questions, feel free to reach out to us. Thank you!

Reproducible: Always

Comment 1 Miro Hrončok 2023-10-31 10:46:53 UTC
https://koschei.fedoraproject.org/package/pygobject3 indicates this started recently: https://koschei.fedoraproject.org/build/16528542

Other than a few upgrades, this Koschei build stopped pulling gstreamer1-plugins-bad-free and pulls in gstreamer1-plugins-bad-free-libs instead, caused by https://src.fedoraproject.org/rpms/gstreamer1-plugins-bad-free/c/2d1a75dff9a6565cb3dcb8fcf61e57fa67548f12?branch=rawhide

I will investigate if installing the full gstreamer1-plugins-bad-free package makes a difference and if so, bisect the transitional dependencies.

Comment 2 Miro Hrončok 2023-10-31 10:50:10 UTC
Installing gstreamer1-plugins-bad-free makes this build...

Comment 3 Miro Hrončok 2023-10-31 10:58:30 UTC
The transitive dependency that makes a difference is gtk3. When gtk3 is installed, the tests pass, when it is not installed, we get:

    @unittest.skipIf(Gdk._version == "4.0", 'Gdk4 doesn\'t have GdkAtom')
E   AttributeError: 'NoneType' object has no attribute '_version'

    if Gtk is None:
E   NameError: name 'Gtk' is not defined

    GTK4 = (Gtk._version == "4.0")
E   AttributeError: 'NoneType' object has no attribute '_version'




Since this is all about gtk4, the fact that gtk3 is needed is kinda weird :/

Comment 4 Miro Hrončok 2023-10-31 11:00:18 UTC
This fixes the problem, but I am a bit hesitant to push that, considering my lack of knowledge about gobject introspection and GTK:

--- a/pygobject3.spec
+++ b/pygobject3.spec
@@ -22,6 +22,7 @@ BuildRequires:  python3-devel >= %{python3_version}
 BuildRequires:  python3-setuptools
 # Test dependencies.
 BuildRequires:  python3dist(pytest)
+BuildRequires:  gtk3
 BuildRequires:  gtk4
 BuildRequires:  xorg-x11-server-Xvfb

Comment 5 Miro Hrončok 2023-11-08 11:05:59 UTC
Could you please have a look at this?

Comment 6 Aoife Moloney 2024-02-15 23:03:01 UTC
This bug appears to have been reported against 'rawhide' during the Fedora Linux 40 development cycle.
Changing version to 40.

Comment 7 Red Hat Bugzilla 2025-01-03 04:25:03 UTC
The needinfo request[s] on this closed bug have been removed as they have been unresolved for 120 days