--- Begin Message ---
Source: python-svg.path
Version: 6.3-1
Severity: serious
Justification: FTBFS
Tags: trixie sid ftbfs
User: lu...@debian.org
Usertags: ftbfs-20231212 ftbfs-trixie
Hi,
During a rebuild of all packages in sid, your package failed to build
on amd64.
Relevant part (hopefully):
> debian/rules build
> dh build --buildsystem=pybuild
> dh_update_autotools_config -O--buildsystem=pybuild
> dh_autoreconf -O--buildsystem=pybuild
> dh_auto_configure -O--buildsystem=pybuild
> I: pybuild base:310: python3.12 setup.py config
> running config
> I: pybuild base:310: python3.11 setup.py config
> running config
> dh_auto_build -O--buildsystem=pybuild
> I: pybuild base:310: /usr/bin/python3.12 setup.py build
> running build
> running build_py
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_svg.path/build/svg
> copying src/svg/__init__.py ->
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_svg.path/build/svg
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_svg.path/build/svg/path
> copying src/svg/path/__init__.py ->
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_svg.path/build/svg/path
> copying src/svg/path/path.py ->
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_svg.path/build/svg/path
> copying src/svg/path/parser.py ->
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_svg.path/build/svg/path
> running egg_info
> creating src/svg.path.egg-info
> writing src/svg.path.egg-info/PKG-INFO
> writing dependency_links to src/svg.path.egg-info/dependency_links.txt
> writing requirements to src/svg.path.egg-info/requires.txt
> writing top-level names to src/svg.path.egg-info/top_level.txt
> writing manifest file 'src/svg.path.egg-info/SOURCES.txt'
> reading manifest file 'src/svg.path.egg-info/SOURCES.txt'
> reading manifest template 'MANIFEST.in'
> warning: no previously-included files found matching 'Makefile'
> adding license file 'LICENSE.txt'
> writing manifest file 'src/svg.path.egg-info/SOURCES.txt'
> I: pybuild base:310: /usr/bin/python3 setup.py build
> running build
> running build_py
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_svg.path/build/svg
> copying src/svg/__init__.py ->
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_svg.path/build/svg
> creating /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_svg.path/build/svg/path
> copying src/svg/path/__init__.py ->
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_svg.path/build/svg/path
> copying src/svg/path/path.py ->
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_svg.path/build/svg/path
> copying src/svg/path/parser.py ->
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_svg.path/build/svg/path
> running egg_info
> writing src/svg.path.egg-info/PKG-INFO
> writing dependency_links to src/svg.path.egg-info/dependency_links.txt
> writing requirements to src/svg.path.egg-info/requires.txt
> writing top-level names to src/svg.path.egg-info/top_level.txt
> reading manifest file 'src/svg.path.egg-info/SOURCES.txt'
> reading manifest template 'MANIFEST.in'
> warning: no previously-included files found matching 'Makefile'
> adding license file 'LICENSE.txt'
> writing manifest file 'src/svg.path.egg-info/SOURCES.txt'
> dh_auto_test -O--buildsystem=pybuild
> I: pybuild base:310: cd
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_svg.path/build; python3.12 -m pytest
> tests
> ============================= test session starts
> ==============================
> platform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0
> rootdir: /<<PKGBUILDDIR>>
> configfile: setup.cfg
> plugins: cov-4.1.0
> collected 53 items
>
> tests/test_boundingbox_image.py F [
> 1%]
> tests/test_doc.py . [
> 3%]
> tests/test_generation.py . [
> 5%]
> tests/test_image.py F [
> 7%]
> tests/test_parsing.py ................. [
> 39%]
> tests/test_paths.py .......................... [
> 88%]
> tests/test_tokenizer.py ......
> [100%]
>
> =================================== FAILURES
> ===================================
> _______________________ BoundingBoxImageTest.test_image
> ________________________
>
> self = <tests.test_boundingbox_image.BoundingBoxImageTest
> testMethod=test_image>
>
> @pytest.mark.skipif(
> sys.platform != "linux", reason="Different platforms have different
> fonts"
> )
> def test_image(self):
> self.draw.text((10, 10), "This is an SVG line:")
> self.draw.text(
> (10, 100),
> "The red line is a bounding box.",
> )
>
> line1 = Line(40 + 60j, 200 + 80j)
> self.draw_path(line1)
> self.draw_boundingbox(line1)
>
> self.draw.text((10, 140), "These are Arc segments:")
> arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j)
> self.draw_path(arc1)
> self.draw_boundingbox(arc1)
>
> arc2 = Arc(450 + 320j, 40 + 80j, 50, 1, 1, 420 + 319j)
> self.draw_path(arc2)
> self.draw_boundingbox(arc2)
>
> arc3 = Arc(400 + 260j, 40 + 70j, 50, 0, 1, 340 + 260j)
> self.draw_path(arc3)
> self.draw_boundingbox(arc3)
>
> self.draw.text(
> (10, 500),
> "Next we have a quadratic bezier curve, with one tangent:",
> )
> start = 30 + 600j
> control = 400 + 540j
> end = 260 + 650j
> qbez1 = QuadraticBezier(start, control, end)
> self.draw_path(qbez1)
> self.draw.ellipse([c2t(control - DOT), c2t(control + DOT)],
> fill=WHITE)
> self.draw.line([c2t(start), c2t(control), c2t(end)], fill=CYAN)
> self.draw_boundingbox(qbez1)
> self.draw.text(
> (10, 670),
> "The white dot is the control point, and the cyan lines are ",
> )
> self.draw.text((10, 690), "illustrating the how the control point
> works.")
>
> self.draw.text(
> (10, 730),
> "Lastly is a cubic bezier, with 2 tangents, and 2 control
> points:",
> )
>
> start = 200 + 800j
> control1 = 350 + 750j
> control2 = 50 + 900j
> end = 190 + 980j
> cbez1 = CubicBezier(start, control1, control2, end)
> self.draw_path(cbez1)
> self.draw.ellipse([c2t(control1 - DOT), c2t(control1 + DOT)],
> fill=WHITE)
> self.draw.ellipse([c2t(control2 - DOT), c2t(control2 + DOT)],
> fill=WHITE)
> self.draw.line(
> [
> c2t(start),
> c2t(control1),
> ],
> fill=CYAN,
> )
> self.draw.line([c2t(control2), c2t(end)], fill=CYAN)
> self.draw_boundingbox(cbez1)
>
> # self.image.show() # Useful when debugging
>
> filename = os.path.join(
> os.path.split(__file__)[0], "test_boundingbox_image.png"
> )
>
> # If you have made intentional changes to the
> test_boundingbox_image.png,
> # save it by uncommenting these lines. Don't forget to comment them
> out again,
> # or the test will always pass
> # with open(filename, "wb") as fp:
> # self.image.save(fp, format="PNG")
>
> with open(filename, "rb") as fp:
> test_image = Image.open(fp, mode="r")
> diff = ImageChops.difference(test_image, self.image)
> > self.assertFalse(
> diff.getbbox(),
> "The resulting image is different from
> test_boundingbox_image.png",
> )
> E AssertionError: (10, 12, 391, 742) is not false : The resulting
> image is different from test_boundingbox_image.png
>
> tests/test_boundingbox_image.py:139: AssertionError
> _____________________________ ImageTest.test_image
> _____________________________
>
> self = <tests.test_image.ImageTest testMethod=test_image>
>
> def test_image(self):
> self.draw.text((10, 10), "This is an SVG line:")
> self.draw.text(
> (10, 100),
> "The red line is a tangent, and the yellow is 90 degrees from
> that.",
> )
>
> line1 = Line(40 + 60j, 200 + 80j)
> self.draw_path(line1)
> self.draw_tangents(line1, 1)
>
> self.draw.text((10, 140), "This is an Arc segment, almost a whole
> circle:")
> arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j)
> self.draw_path(arc1)
> self.draw_tangents(arc1, 5)
> self.draw.text((10, 460), "With five tangents.")
>
> self.draw.text(
> (10, 500),
> "Next we have a quadratic bezier curve, with one tangent:",
> )
> start = 30 + 600j
> control = 400 + 540j
> end = 260 + 650j
> qbez1 = QuadraticBezier(start, control, end)
> self.draw_path(qbez1)
> self.draw.ellipse([c2t(control - DOT), c2t(control + DOT)],
> fill=WHITE)
> self.draw.line([c2t(start), c2t(control), c2t(end)], fill=CYAN)
> self.draw_tangents(qbez1, 1)
> self.draw.text(
> (10, 670),
> "The white dot is the control point, and the cyan lines are ",
> )
> self.draw.text((10, 690), "illustrating the how the control point
> works.")
>
> self.draw.text(
> (10, 730),
> "Lastly is a cubic bezier, with 2 tangents, and 2 control
> points:",
> )
>
> start = 30 + 800j
> control1 = 400 + 780j
> control2 = 50 + 900j
> end = 300 + 980j
> cbez1 = CubicBezier(start, control1, control2, end)
> self.draw_path(cbez1)
> self.draw.ellipse([c2t(control1 - DOT), c2t(control1 + DOT)],
> fill=WHITE)
> self.draw.ellipse([c2t(control2 - DOT), c2t(control2 + DOT)],
> fill=WHITE)
> self.draw.line(
> [
> c2t(start),
> c2t(control1),
> ],
> fill=CYAN,
> )
> self.draw.line([c2t(control2), c2t(end)], fill=CYAN)
> self.draw_tangents(cbez1, 2)
>
> # self.image.show() # Useful when debugging
>
> filename = os.path.join(os.path.split(__file__)[0], "test_image.png")
>
> # If you have made intentional changes to the test_image.png, save it
> # by uncommenting these lines. Don't forget to comment them out again,
> # or the test will always pass
> # with open(filename, "wb") as fp:
> # self.image.save(fp, format="PNG")
>
> with open(filename, "rb") as fp:
> test_image = Image.open(fp, mode="r")
> diff = ImageChops.difference(test_image, self.image)
> > self.assertFalse(
> diff.getbbox(), "The resulting image is different from
> test_image.png"
> )
> E AssertionError: (10, 12, 403, 742) is not false : The resulting
> image is different from test_image.png
>
> tests/test_image.py:130: AssertionError
> =========================== short test summary info
> ============================
> FAILED tests/test_boundingbox_image.py::BoundingBoxImageTest::test_image -
> As...
> FAILED tests/test_image.py::ImageTest::test_image - AssertionError: (10, 12,
> ...
> ========================= 2 failed, 51 passed in 0.99s
> =========================
> E: pybuild pybuild:395: test: plugin distutils failed with: exit code=1: cd
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.12_svg.path/build; python3.12 -m pytest
> tests
> I: pybuild base:310: cd
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_svg.path/build; python3.11 -m pytest
> tests
> ============================= test session starts
> ==============================
> platform linux -- Python 3.11.7, pytest-7.4.3, pluggy-1.3.0
> rootdir: /<<PKGBUILDDIR>>
> configfile: setup.cfg
> plugins: cov-4.1.0
> collected 53 items
>
> tests/test_boundingbox_image.py F [
> 1%]
> tests/test_doc.py . [
> 3%]
> tests/test_generation.py . [
> 5%]
> tests/test_image.py F [
> 7%]
> tests/test_parsing.py ................. [
> 39%]
> tests/test_paths.py .......................... [
> 88%]
> tests/test_tokenizer.py ......
> [100%]
>
> =================================== FAILURES
> ===================================
> _______________________ BoundingBoxImageTest.test_image
> ________________________
>
> self = <tests.test_boundingbox_image.BoundingBoxImageTest
> testMethod=test_image>
>
> @pytest.mark.skipif(
> sys.platform != "linux", reason="Different platforms have different
> fonts"
> )
> def test_image(self):
> self.draw.text((10, 10), "This is an SVG line:")
> self.draw.text(
> (10, 100),
> "The red line is a bounding box.",
> )
>
> line1 = Line(40 + 60j, 200 + 80j)
> self.draw_path(line1)
> self.draw_boundingbox(line1)
>
> self.draw.text((10, 140), "These are Arc segments:")
> arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j)
> self.draw_path(arc1)
> self.draw_boundingbox(arc1)
>
> arc2 = Arc(450 + 320j, 40 + 80j, 50, 1, 1, 420 + 319j)
> self.draw_path(arc2)
> self.draw_boundingbox(arc2)
>
> arc3 = Arc(400 + 260j, 40 + 70j, 50, 0, 1, 340 + 260j)
> self.draw_path(arc3)
> self.draw_boundingbox(arc3)
>
> self.draw.text(
> (10, 500),
> "Next we have a quadratic bezier curve, with one tangent:",
> )
> start = 30 + 600j
> control = 400 + 540j
> end = 260 + 650j
> qbez1 = QuadraticBezier(start, control, end)
> self.draw_path(qbez1)
> self.draw.ellipse([c2t(control - DOT), c2t(control + DOT)],
> fill=WHITE)
> self.draw.line([c2t(start), c2t(control), c2t(end)], fill=CYAN)
> self.draw_boundingbox(qbez1)
> self.draw.text(
> (10, 670),
> "The white dot is the control point, and the cyan lines are ",
> )
> self.draw.text((10, 690), "illustrating the how the control point
> works.")
>
> self.draw.text(
> (10, 730),
> "Lastly is a cubic bezier, with 2 tangents, and 2 control
> points:",
> )
>
> start = 200 + 800j
> control1 = 350 + 750j
> control2 = 50 + 900j
> end = 190 + 980j
> cbez1 = CubicBezier(start, control1, control2, end)
> self.draw_path(cbez1)
> self.draw.ellipse([c2t(control1 - DOT), c2t(control1 + DOT)],
> fill=WHITE)
> self.draw.ellipse([c2t(control2 - DOT), c2t(control2 + DOT)],
> fill=WHITE)
> self.draw.line(
> [
> c2t(start),
> c2t(control1),
> ],
> fill=CYAN,
> )
> self.draw.line([c2t(control2), c2t(end)], fill=CYAN)
> self.draw_boundingbox(cbez1)
>
> # self.image.show() # Useful when debugging
>
> filename = os.path.join(
> os.path.split(__file__)[0], "test_boundingbox_image.png"
> )
>
> # If you have made intentional changes to the
> test_boundingbox_image.png,
> # save it by uncommenting these lines. Don't forget to comment them
> out again,
> # or the test will always pass
> # with open(filename, "wb") as fp:
> # self.image.save(fp, format="PNG")
>
> with open(filename, "rb") as fp:
> test_image = Image.open(fp, mode="r")
> diff = ImageChops.difference(test_image, self.image)
> > self.assertFalse(
> diff.getbbox(),
> "The resulting image is different from
> test_boundingbox_image.png",
> )
> E AssertionError: (10, 12, 391, 742) is not false : The resulting
> image is different from test_boundingbox_image.png
>
> tests/test_boundingbox_image.py:139: AssertionError
> _____________________________ ImageTest.test_image
> _____________________________
>
> self = <tests.test_image.ImageTest testMethod=test_image>
>
> def test_image(self):
> self.draw.text((10, 10), "This is an SVG line:")
> self.draw.text(
> (10, 100),
> "The red line is a tangent, and the yellow is 90 degrees from
> that.",
> )
>
> line1 = Line(40 + 60j, 200 + 80j)
> self.draw_path(line1)
> self.draw_tangents(line1, 1)
>
> self.draw.text((10, 140), "This is an Arc segment, almost a whole
> circle:")
> arc1 = Arc(260 + 320j, 100 + 100j, 0, 1, 1, 260 + 319j)
> self.draw_path(arc1)
> self.draw_tangents(arc1, 5)
> self.draw.text((10, 460), "With five tangents.")
>
> self.draw.text(
> (10, 500),
> "Next we have a quadratic bezier curve, with one tangent:",
> )
> start = 30 + 600j
> control = 400 + 540j
> end = 260 + 650j
> qbez1 = QuadraticBezier(start, control, end)
> self.draw_path(qbez1)
> self.draw.ellipse([c2t(control - DOT), c2t(control + DOT)],
> fill=WHITE)
> self.draw.line([c2t(start), c2t(control), c2t(end)], fill=CYAN)
> self.draw_tangents(qbez1, 1)
> self.draw.text(
> (10, 670),
> "The white dot is the control point, and the cyan lines are ",
> )
> self.draw.text((10, 690), "illustrating the how the control point
> works.")
>
> self.draw.text(
> (10, 730),
> "Lastly is a cubic bezier, with 2 tangents, and 2 control
> points:",
> )
>
> start = 30 + 800j
> control1 = 400 + 780j
> control2 = 50 + 900j
> end = 300 + 980j
> cbez1 = CubicBezier(start, control1, control2, end)
> self.draw_path(cbez1)
> self.draw.ellipse([c2t(control1 - DOT), c2t(control1 + DOT)],
> fill=WHITE)
> self.draw.ellipse([c2t(control2 - DOT), c2t(control2 + DOT)],
> fill=WHITE)
> self.draw.line(
> [
> c2t(start),
> c2t(control1),
> ],
> fill=CYAN,
> )
> self.draw.line([c2t(control2), c2t(end)], fill=CYAN)
> self.draw_tangents(cbez1, 2)
>
> # self.image.show() # Useful when debugging
>
> filename = os.path.join(os.path.split(__file__)[0], "test_image.png")
>
> # If you have made intentional changes to the test_image.png, save it
> # by uncommenting these lines. Don't forget to comment them out again,
> # or the test will always pass
> # with open(filename, "wb") as fp:
> # self.image.save(fp, format="PNG")
>
> with open(filename, "rb") as fp:
> test_image = Image.open(fp, mode="r")
> diff = ImageChops.difference(test_image, self.image)
> > self.assertFalse(
> diff.getbbox(), "The resulting image is different from
> test_image.png"
> )
> E AssertionError: (10, 12, 403, 742) is not false : The resulting
> image is different from test_image.png
>
> tests/test_image.py:130: AssertionError
> =========================== short test summary info
> ============================
> FAILED tests/test_boundingbox_image.py::BoundingBoxImageTest::test_image -
> As...
> FAILED tests/test_image.py::ImageTest::test_image - AssertionError: (10, 12,
> ...
> ========================= 2 failed, 51 passed in 1.08s
> =========================
> E: pybuild pybuild:395: test: plugin distutils failed with: exit code=1: cd
> /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_svg.path/build; python3.11 -m pytest
> tests
> dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.12
> 3.11" returned exit code 13
The full build log is available from:
http://qa-logs.debian.net/2023/12/12/python-svg.path_6.3-1_unstable.log
All bugs filed during this archive rebuild are listed at:
https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=ftbfs-20231212;users=lu...@debian.org
or:
https://udd.debian.org/bugs/?release=na&merged=ign&fnewerval=7&flastmodval=7&fusertag=only&fusertagtag=ftbfs-20231212&fusertaguser=lu...@debian.org&allbugs=1&cseverity=1&ctags=1&caffected=1#results
A list of current common problems and possible solutions is available at
http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute!
If you reassign this bug to another package, please mark it as 'affects'-ing
this package. See https://www.debian.org/Bugs/server-control#affects
If you fail to reproduce this, please provide a build log and diff it with mine
so that we can identify if something relevant changed in the meantime.
--- End Message ---