Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 869152 - dev-python/graphviz-0.20.1 fails tests
Summary: dev-python/graphviz-0.20.1 fails tests
Status: RESOLVED WORKSFORME
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Python Gentoo Team
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-09-08 07:13 UTC by Agostino Sarubbo
Modified: 2024-03-06 00:35 UTC (History)
1 user (show)

See Also:
Package list:
Runtime testing required: ---


Attachments
build.log (build.log,114.50 KB, text/plain)
2022-09-08 07:13 UTC, Agostino Sarubbo
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Agostino Sarubbo gentoo-dev 2022-09-08 07:13:20 UTC
https://blogs.gentoo.org/ago/2020/07/04/gentoo-tinderbox/

Issue: dev-python/graphviz-0.20.1 fails tests (lto).
Discovered on: amd64 (internal ref: lto_tinderbox)

NOTE:
This machine uses lto with CFLAGS=-flto -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing

Here is a bit of explanation:

-Werror=lto-type-mismatch:
User to find possible runtime issues in packages. It likely means the package is unsafe to build & use with LTO.
For projects using the same identifier but with different types across different files, they must be fixed to be consistent across the codebase.

-Werror=odr:
Used to find possible runtime issues in packages. These bugs are a problem anyway but may be even worse when combined with LTO. C++ code must comply with the One Definition Rule (ODR) - see https://en.cppreference.com/w/cpp/language/definition#One_Definition_Rule.

-Werror=strict-aliasing:
Used to find possible runtime issues in packages. These bugs are a problem anyway but may be even worse when combined with LTO.

Workarounds:
- If upstream is friendly and still active, file a bug upstream. For emulators, codecs, games, or multimedia packages, it may be worth just applying a workaround instead, as upstreams sometimes aren't receptive to these bugs (VALID FOR ALL).
- Use the new 'filter-lto' from flag-o-matic.eclass as it's likely to be unsafe with LTO (VALID FOR lto-type-mismatch - odr).
- Fix it yourself if interested, of course (VALID FOR ALL).
- Append-flags -fno-strict-aliasing (VALID FOR strict-aliasing).
- Use memcpy() but a union is sometimes suitable too (VALID FOR strict-aliasing).
- -fstrict-aliasing is implied by -O2, so this must be addressed in some form (VALID FOR strict-aliasing).

See also: https://marc.info/?l=gentoo-dev&m=165639574126280&w=2
Comment 1 Agostino Sarubbo gentoo-dev 2022-09-08 07:13:22 UTC
Created attachment 803896 [details]
build.log

build log and emerge --info
Comment 2 Agostino Sarubbo gentoo-dev 2022-09-08 07:13:24 UTC
Error(s) that match a know pattern:


E       FileNotFoundError: [Errno 2] No such file or directory: '/var/tmp/portage/dev-python/graphviz-0.20.1/temp/pytest-of-portage/pytest-0/test_render_dot_plain_dot_core0/hello.gv.core.dot.plain'
FAILED tests/backend/test_rendering.py::test_render[dot-plain-dot-core-core.dot.plain]
Comment 3 Eli Schwartz 2024-03-06 00:34:32 UTC
It's pretty obvious as reported that this has nothing to do with LTO. Especially since this package doesn't have any compiled code.



=================================== FAILURES ===================================
________________ test_render[dot-plain-dot-core-core.dot.plain] ________________

capsys = <_pytest.capture.CaptureFixture object at 0x7f023989acd0>
tmp_path = PosixPath('/var/tmp/portage/dev-python/graphviz-0.20.1/temp/pytest-of-portage/pytest-0/test_render_dot_plain_dot_core0')
engine = 'dot', format_ = 'plain', renderer = 'dot', formatter = 'core'
expected_suffix = 'core.dot.plain', filename = 'hello.gv'
data = b'digraph { hello -> world }'

    @pytest.mark.exe
    @pytest.mark.parametrize(
        'format_, renderer, formatter, expected_suffix',
        [('pdf', None, None, 'pdf'),
         ('plain', 'dot', 'core', 'core.dot.plain')])
    @pytest.mark.parametrize('engine', ['dot'])
    def test_render(capsys, tmp_path, engine, format_, renderer, formatter,
                    expected_suffix, filename='hello.gv',
                    data=b'digraph { hello -> world }'):
        lpath = tmp_path / filename
        assert lpath.write_bytes(data) == len(data) == lpath.stat().st_size
        rendered = lpath.with_suffix(f'{lpath.suffix}.{expected_suffix}')
    
        with pytest.deprecated_call():
            result = graphviz.render(engine, format_, str(lpath),
                                     renderer, formatter)
    
        assert result == str(rendered)
    
>       assert rendered.stat().st_size

capsys     = <_pytest.capture.CaptureFixture object at 0x7f023989acd0>
data       = b'digraph { hello -> world }'
engine     = 'dot'
expected_suffix = 'core.dot.plain'
filename   = 'hello.gv'
format_    = 'plain'
formatter  = 'core'
lpath      = PosixPath('/var/tmp/portage/dev-python/graphviz-0.20.1/temp/pytest-of-portage/pytest-0/test_render_dot_plain_dot_core0/hello.gv')
rendered   = PosixPath('/var/tmp/portage/dev-python/graphviz-0.20.1/temp/pytest-of-portage/pytest-0/test_render_dot_plain_dot_core0/hello.gv.core.dot.plain')
renderer   = 'dot'
result     = '/var/tmp/portage/dev-python/graphviz-0.20.1/temp/pytest-of-portage/pytest-0/test_render_dot_plain_dot_core0/hello.gv.core.dot.plain'
tmp_path   = PosixPath('/var/tmp/portage/dev-python/graphviz-0.20.1/temp/pytest-of-portage/pytest-0/test_render_dot_plain_dot_core0')

tests/backend/test_rendering.py:62: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = PosixPath('/var/tmp/portage/dev-python/graphviz-0.20.1/temp/pytest-of-portage/pytest-0/test_render_dot_plain_dot_core0/hello.gv.core.dot.plain')

    def stat(self):
        """
        Return the result of the stat() system call on this path, like
        os.stat() does.
        """
>       return self._accessor.stat(self)
E       FileNotFoundError: [Errno 2] No such file or directory: '/var/tmp/portage/dev-python/graphviz-0.20.1/temp/pytest-of-portage/pytest-0/test_render_dot_plain_dot_core0/hello.gv.core.dot.plain'

self       = PosixPath('/var/tmp/portage/dev-python/graphviz-0.20.1/temp/pytest-of-portage/pytest-0/test_render_dot_plain_dot_core0/hello.gv.core.dot.plain')

/usr/lib/python3.8/pathlib.py:1198: FileNotFoundError
Comment 4 Eli Schwartz 2024-03-06 00:35:13 UTC
Tests work fine for me, anyway...