Bug 2330136

Summary: python-breathe fails to build with sphinx 8.x: TypeError: expected string or bytes-like object, got 'NoneType'
Product: [Fedora] Fedora Reporter: Tomáš Hrnčiar <thrnciar>
Component: python-breatheAssignee: Dan Čermák <dan.cermak>
Status: NEW --- QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 42CC: dan.cermak, epel-packagers-sig, Tom.Rix
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: Bug
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: 2275375    

Description Tomáš Hrnčiar 2024-12-03 09:44:26 UTC
python-breathe fails to build with sphinx 8.x in Fedora 42 (currently Rawhide).

The issue detected:
=================================== FAILURES ===================================
_______________________________ test_render_func _______________________________

app = <SphinxTestApp buildername='html'>

    def test_render_func(app):
        member_def = WrappedMemberDef(
            kind="function",
            definition="void foo",
            type_="void",
            name="foo",
            argsstring="(int)",
            virt="non-virtual",
            param=[
                WrappedParam(type_=WrappedLinkedText(content_=[WrappedMixedContainer(value="int")]))
            ],
        )
>       signature = find_node(render(app, member_def), "desc_signature")

test_renderer.py:335: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2511: in dispatch_memberdef
    return self.visit_function(node)
../breathe/renderer/sphinxrenderer.py:2003: in visit_function
    nodes = self.handle_declaration(node, declaration)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/cpp/__init__.py:319: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 

_____________________________ test_render_typedef ______________________________

app = <SphinxTestApp buildername='html'>

    def test_render_typedef(app):
        member_def = WrappedMemberDef(
            kind="typedef", definition="typedef int foo", type_="int", name="foo"
        )
>       signature = find_node(render(app, member_def), "desc_signature")

test_renderer.py:358: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2515: in dispatch_memberdef
    return self.visit_typedef(node)
../breathe/renderer/sphinxrenderer.py:2134: in visit_typedef
    return self.handle_declaration(node, declaration)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/cpp/__init__.py:319: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 

____________________________ test_render_c_typedef _____________________________

app = <SphinxTestApp buildername='html'>

    def test_render_c_typedef(app):
        member_def = WrappedMemberDef(
            kind="typedef", definition="typedef unsigned int bar", type_="unsigned int", name="bar"
        )
>       signature = find_node(render(app, member_def, domain="c"), "desc_signature")

test_renderer.py:366: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2515: in dispatch_memberdef
    return self.visit_typedef(node)
../breathe/renderer/sphinxrenderer.py:2134: in visit_typedef
    return self.handle_declaration(node, declaration)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/c/__init__.py:219: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 

________________________ test_render_c_function_typedef ________________________

app = <SphinxTestApp buildername='html'>

    def test_render_c_function_typedef(app):
        member_def = WrappedMemberDef(
            kind="typedef",
            definition="typedef void* (*voidFuncPtr)(float, int)",
            type_="void* (*",
            name="voidFuncPtr",
            argsstring=")(float, int)",
        )
>       signature = find_node(render(app, member_def, domain="c"), "desc_signature")

test_renderer.py:378: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2515: in dispatch_memberdef
    return self.visit_typedef(node)
../breathe/renderer/sphinxrenderer.py:2134: in visit_typedef
    return self.handle_declaration(node, declaration)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/c/__init__.py:219: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 

___________________________ test_render_using_alias ____________________________

app = <SphinxTestApp buildername='html'>

    def test_render_using_alias(app):
        member_def = WrappedMemberDef(
            kind="typedef", definition="using foo = int", type_="int", name="foo"
        )
>       signature = find_node(render(app, member_def), "desc_signature")

test_renderer.py:395: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2515: in dispatch_memberdef
    return self.visit_typedef(node)
../breathe/renderer/sphinxrenderer.py:2134: in visit_typedef
    return self.handle_declaration(node, declaration)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/cpp/__init__.py:319: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 

____________________________ test_render_const_func ____________________________

app = <SphinxTestApp buildername='html'>

    def test_render_const_func(app):
        member_def = WrappedMemberDef(
            kind="function",
            definition="void f",
            type_="void",
            name="f",
            argsstring="() const",
            virt="non-virtual",
            const="yes",
        )
>       signature = find_node(render(app, member_def), "desc_signature")

test_renderer.py:409: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2511: in dispatch_memberdef
    return self.visit_function(node)
../breathe/renderer/sphinxrenderer.py:2003: in visit_function
    nodes = self.handle_declaration(node, declaration)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/cpp/__init__.py:319: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 

___________________________ test_render_lvalue_func ____________________________

app = <SphinxTestApp buildername='html'>

    def test_render_lvalue_func(app):
        member_def = WrappedMemberDef(
            kind="function",
            definition="void f",
            type_="void",
            name="f",
            argsstring="() &",
            virt="non-virtual",
            refqual="lvalue",
        )
>       signature = find_node(render(app, member_def), "desc_signature")

test_renderer.py:423: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2511: in dispatch_memberdef
    return self.visit_function(node)
../breathe/renderer/sphinxrenderer.py:2003: in visit_function
    nodes = self.handle_declaration(node, declaration)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/cpp/__init__.py:319: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 

___________________________ test_render_rvalue_func ____________________________

app = <SphinxTestApp buildername='html'>

    def test_render_rvalue_func(app):
        member_def = WrappedMemberDef(
            kind="function",
            definition="void f",
            type_="void",
            name="f",
            argsstring="() &&",
            virt="non-virtual",
            refqual="rvalue",
        )
>       signature = find_node(render(app, member_def), "desc_signature")

test_renderer.py:437: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2511: in dispatch_memberdef
    return self.visit_function(node)
../breathe/renderer/sphinxrenderer.py:2003: in visit_function
    nodes = self.handle_declaration(node, declaration)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/cpp/__init__.py:319: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 

________________________ test_render_const_lvalue_func _________________________

app = <SphinxTestApp buildername='html'>

    def test_render_const_lvalue_func(app):
        member_def = WrappedMemberDef(
            kind="function",
            definition="void f",
            type_="void",
            name="f",
            argsstring="() const &",
            virt="non-virtual",
            const="yes",
            refqual="lvalue",
        )
>       signature = find_node(render(app, member_def), "desc_signature")

test_renderer.py:452: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2511: in dispatch_memberdef
    return self.visit_function(node)
../breathe/renderer/sphinxrenderer.py:2003: in visit_function
    nodes = self.handle_declaration(node, declaration)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/cpp/__init__.py:319: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 

________________________ test_render_const_rvalue_func _________________________

app = <SphinxTestApp buildername='html'>

    def test_render_const_rvalue_func(app):
        member_def = WrappedMemberDef(
            kind="function",
            definition="void f",
            type_="void",
            name="f",
            argsstring="() const &&",
            virt="non-virtual",
            const="yes",
            refqual="rvalue",
        )
>       signature = find_node(render(app, member_def), "desc_signature")

test_renderer.py:467: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2511: in dispatch_memberdef
    return self.visit_function(node)
../breathe/renderer/sphinxrenderer.py:2003: in visit_function
    nodes = self.handle_declaration(node, declaration)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/cpp/__init__.py:319: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 

_______________________ test_render_variable_initializer _______________________

app = <SphinxTestApp buildername='html'>

    def test_render_variable_initializer(app):
        member_def = WrappedMemberDef(
            kind="variable",
            definition="const int EOF",
            type_="const int",
            name="EOF",
            initializer=WrappedMixedContainer(value="= -1"),
        )
>       signature = find_node(render(app, member_def), "desc_signature")

test_renderer.py:479: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2517: in dispatch_memberdef
    return self.visit_variable(node)
../breathe/renderer/sphinxrenderer.py:2197: in visit_variable
    return self.handle_declaration(node, declaration, options=options)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/cpp/__init__.py:319: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 

________________________ test_render_define_initializer ________________________

app = <SphinxTestApp buildername='html'>

    def test_render_define_initializer(app):
        member_def = WrappedMemberDef(
            kind="define",
            name="MAX_LENGTH",
            initializer=WrappedLinkedText(content_=[WrappedMixedContainer(value="100")]),
        )
        signature_w_initializer = find_node(
>           render(app, member_def, show_define_initializer=True), "desc_signature"
        )

test_renderer.py:490: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2525: in dispatch_memberdef
    return self.visit_define(node)
../breathe/renderer/sphinxrenderer.py:2080: in visit_define
    return self.handle_declaration(node, declaration, declarator_callback=add_definition)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/c/__init__.py:219: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 

______________________ test_render_define_no_initializer _______________________

app = <SphinxTestApp buildername='html'>

    def test_render_define_no_initializer(app):
        sphinx.addnodes.setup(app)
        member_def = WrappedMemberDef(kind="define", name="USE_MILK")
>       signature = find_node(render(app, member_def), "desc_signature")

test_renderer.py:509: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_renderer.py:320: in render
    return renderer.render(member_def)
../breathe/renderer/sphinxrenderer.py:2624: in render
    result = method(self, node)
../breathe/renderer/sphinxrenderer.py:2525: in dispatch_memberdef
    return self.visit_define(node)
../breathe/renderer/sphinxrenderer.py:2080: in visit_define
    return self.handle_declaration(node, declaration, declarator_callback=add_definition)
../breathe/renderer/sphinxrenderer.py:667: in handle_declaration
    nodes_ = self.run_directive(obj_type, declaration, content_callback, options)
../breathe/renderer/sphinxrenderer.py:619: in run_directive
    nodes = directive.run()
/usr/lib/python3.13/site-packages/sphinx/domains/c/__init__.py:219: in run
    return super().run()
/usr/lib/python3.13/site-packages/sphinx/directives/__init__.py:287: in run
    content_children = self.parse_content_to_nodes(allow_section_headings=True)
/usr/lib/python3.13/site-packages/sphinx/util/docutils.py:482: in parse_content_to_nodes
    return nested_parse_to_nodes(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:55: in nested_parse_to_nodes
    content = _text_to_string_list(
/usr/lib/python3.13/site-packages/sphinx/util/parsing.py:94: in _text_to_string_list
    content = string2lines(text, tab_width, convert_whitespace=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

astring = None, tab_width = 8, convert_whitespace = True
whitespace = re.compile('[\x0b\x0c]')

    def string2lines(astring, tab_width=8, convert_whitespace=False,
                     whitespace=re.compile('[\v\f]')):
        """
        Return a list of one-line strings with tabs expanded, no newlines, and
        trailing whitespace stripped.
    
        Each tab is expanded with between 1 and `tab_width` spaces, so that the
        next character's index becomes a multiple of `tab_width` (8 by default).
    
        Parameters:
    
        - `astring`: a multi-line string.
        - `tab_width`: the number of columns between tab stops.
        - `convert_whitespace`: convert form feeds and vertical tabs to spaces?
        - `whitespace`: pattern object with the to-be-converted
          whitespace characters (default [\\v\\f]).
        """
        if convert_whitespace:
>           astring = whitespace.sub(' ', astring)
E           TypeError: expected string or bytes-like object, got 'NoneType'

/usr/lib/python3.13/site-packages/docutils/statemachine.py:1506: TypeError
--------------------------- Captured stdout teardown ---------------------------
# testroot: root
# builder: html
# srcdir: /tmp/pytest-of-mockbuild/pytest-0/root
# outdir: /tmp/pytest-of-mockbuild/pytest-0/root/_build/html
# status: 
Running Sphinx v8.1.3
loading translations [en]... done

# warning: 
WARNING: node class 'toctree' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_signature' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_signature_line' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_content' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_inline' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_name' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_addname' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_type' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_returns' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_parameterlist' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_type_parameter_list' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_parameter' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_type_parameter' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_optional' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_annotation' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_sig_literal_char' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_sig_literal_string' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_sig_keyword_type' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_sig_punctuation' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_sig_name' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_sig_literal_number' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_sig_keyword' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_sig_operator' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'desc_sig_space' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'versionmodified' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'seealso' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'productionlist' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'production' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'index' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'centered' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'acks' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'hlist' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'hlistcol' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'compact_paragraph' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'glossary' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'only' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'start_of_file' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'highlightlang' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'tabular_col_spec' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'pending_xref' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'number_reference' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'download_reference' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'literal_emphasis' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'literal_strong' is already registered, its visitors will be overridden [app.add_node]
WARNING: node class 'manpage' is already registered, its visitors will be overridden [app.add_node]

=============================== warnings summary ===============================
test_renderer.py:26
  /builddir/build/BUILD/python-breathe-4.35.0-build/breathe-4.35.0/tests/test_renderer.py:26: RemovedInSphinx90Warning: 'sphinx.testing.path' is deprecated. Use 'os.path' or 'pathlib' instead.
    from sphinx.testing.path import path

tests/test_renderer.py: 17 warnings
  /builddir/build/BUILD/python-breathe-4.35.0-build/breathe-4.35.0/tests/test_renderer.py:132: DeprecationWarning: The frontend.OptionParser class will be replaced by a subclass of argparse.ArgumentParser in Docutils 0.21 or later.
    settings = frontend.OptionParser(components=(parsers.rst.Parser,)).get_default_values()

tests/test_renderer.py: 1190 warnings
  /usr/lib64/python3.13/optparse.py:1000: DeprecationWarning: The frontend.Option class will be removed in Docutils 0.21 or later.
    option = self.option_class(*args, **kwargs)

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED test_renderer.py::test_render_func - TypeError: expected string or byt...
FAILED test_renderer.py::test_render_typedef - TypeError: expected string or ...
FAILED test_renderer.py::test_render_c_typedef - TypeError: expected string o...
FAILED test_renderer.py::test_render_c_function_typedef - TypeError: expected...
FAILED test_renderer.py::test_render_using_alias - TypeError: expected string...
FAILED test_renderer.py::test_render_const_func - TypeError: expected string ...
FAILED test_renderer.py::test_render_lvalue_func - TypeError: expected string...
FAILED test_renderer.py::test_render_rvalue_func - TypeError: expected string...
FAILED test_renderer.py::test_render_const_lvalue_func - TypeError: expected ...
FAILED test_renderer.py::test_render_const_rvalue_func - TypeError: expected ...
FAILED test_renderer.py::test_render_variable_initializer - TypeError: expect...
FAILED test_renderer.py::test_render_define_initializer - TypeError: expected...
FAILED test_renderer.py::test_render_define_no_initializer - TypeError: expec...
================= 13 failed, 8 passed, 1208 warnings in 2.41s ==================

Please work with upstream on this issue, I plan to ship sphinx 8 in two weeks.


For the logs from testing build attempts, see:
https://copr.fedorainfracloud.org/coprs/thrnciar/python-sphinx/package/python-breathe/

You can test you package in mock running:

$ mock -r fedora-rawhide-x86_64
--addrepo=https://download.copr.fedorainfracloud.org/results/thrnciar/python-sphinx/fedora-rawhide-x86_64/ --no-clean your.src.rpm
$ mock -r fedora-rawhide-x86_64
--addrepo=https://download.copr.fedorainfracloud.org/results/thrnciar/python-sphinx/fedora-rawhide-x86_64/ shell

We'd like to include Sphinx 8 in Fedora 42.
Let us know here if you have any questions. Thank you!

Comment 2 Aoife Moloney 2025-02-26 13:19:12 UTC
This bug appears to have been reported against 'rawhide' during the Fedora Linux 42 development cycle.
Changing version to 42.