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
Created attachment 803896 [details] build.log build log and emerge --info
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]
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
Tests work fine for me, anyway...