Bug 2330136 - python-breathe fails to build with sphinx 8.x: TypeError: expected string or bytes-like object, got 'NoneType'
Summary: python-breathe fails to build with sphinx 8.x: TypeError: expected string or ...
Keywords:
Status: NEW
Alias: None
Product: Fedora
Classification: Fedora
Component: python-breathe
Version: 42
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Dan Čermák
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: SPHINX8
TreeView+ depends on / blocked
 
Reported: 2024-12-03 09:44 UTC by Tomáš Hrnčiar
Modified: 2025-02-28 02:40 UTC (History)
3 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed:
Type: Bug
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Fedora Package Sources python-breathe pull-request 19 0 None None None 2025-02-28 02:40:49 UTC

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.


Note You need to log in before you can comment on or make changes to this bug.