Bug 2389731 - python-ufo2ft: FTBFS in Fedora Rawhide and 43
Summary: python-ufo2ft: FTBFS in Fedora Rawhide and 43
Keywords:
Status: CLOSED NEXTRELEASE
Alias: None
Product: Fedora
Classification: Fedora
Component: python-ufo2ft
Version: 43
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Benson Muite
QA Contact: Fedora Extras Quality Assurance
URL: https://koschei.fedoraproject.org/pac...
Whiteboard:
Depends On:
Blocks: F43FTBFS F44FTBFS, RAWHIDEFTBFS PYC3.14rc3
TreeView+ depends on / blocked
 
Reported: 2025-08-20 12:54 UTC by Miro Hrončok
Modified: 2025-08-26 10:42 UTC (History)
2 users (show)

Fixed In Version: python-ufo2ft-3.6.0-3.fc43
Clone Of:
Environment:
Last Closed: 2025-08-26 10:42:50 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description Miro Hrončok 2025-08-20 12:54:31 UTC
Description of problem:
Package python-ufo2ft fails to build from source in Fedora Rawhide.

Due to reasons described in https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/XO5QGOXBWHFG7AOGDQBG23AQDS2MDTWI/ a rebuild of python-ufo2ft is needed in Fedora Rawhide (44) and Fedora 43.

Version-Release number of selected component (if applicable):
3.6.0-1.fc43

Steps to Reproduce:
fedpkg build

Additional info:
This package is tracked by Koschei. See:
https://koschei.fedoraproject.org/package/python-ufo2ft

=================================== FAILURES ===================================
_______________ IntegrationTest.test_compileVariableTTFs[defcon] _______________
self = <tests.integration_test.IntegrationTest object at 0x3ffba03fb60>
designspace_v5 = <fontTools.designspaceLib.DesignSpaceDocument object at 0x3ffbb3c7cb0>
    def test_compileVariableTTFs(self, designspace_v5):
        fonts = compileVariableTTFs(designspace_v5)
    
        # NOTE: Test dumps were generated like this:
        # for k, font in fonts.items():
        #     font.recalcTimestamp = False
        #     font["head"].created, font["head"].modified = 3570196637, 3601822698
        #     font["head"].checkSumAdjustment = 0x12345678
        #     font.saveXML(f"tests/data/DSv5/{k}-TTF.ttx")
    
        assert set(fonts.keys()) == {
            "MutatorSansVariable_Weight_Width",
            "MutatorSansVariable_Weight",
            "MutatorSansVariable_Width",
            "MutatorSerifVariable_Width",
        }
        # The STAT table is set to [SRIF=0, wght=[300, 700], wdth=[50, 200]] + S1 + S2
>       expectTTX(
            fonts["MutatorSansVariable_Weight_Width"],
            "DSv5/MutatorSansVariable_Weight_Width-TTF.ttx",
        )
tests/integration_test.py:395: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
font = <fontTools.ttLib.ttFont.TTFont object at 0x3ffb99b4590>
expectedTTX = 'DSv5/MutatorSansVariable_Weight_Width-TTF.ttx', tables = None
    def expectTTX(font, expectedTTX, tables=None):
        with open(getpath(expectedTTX), encoding="utf-8") as f:
            expected = readLines(f)
        font.recalcTimestamp = False
        font["head"].created, font["head"].modified = 3570196637, 3601822698
        font["head"].checkSumAdjustment = 0x12345678
        f = io.StringIO()
        font.saveXML(f, tables=tables)
    
        actual = readLines(f)
        if actual != expected:
            for line in difflib.unified_diff(
                expected, actual, fromfile=expectedTTX, tofile="<generated>"
            ):
                sys.stderr.write(line)
>           pytest.fail("TTX output is different from expected")
E           Failed: TTX output is different from expected
tests/integration_test.py:73: Failed
----------------------------- Captured stderr call -----------------------------
--- DSv5/MutatorSansVariable_Weight_Width-TTF.ttx
+++ <generated>
@@ -121,7 +121,7 @@
     <sCapHeight value="700"/>
     <usDefaultChar value="0"/>
     <usBreakChar value="32"/>
-    <usMaxContext value="0"/>
+    <usMaxContext value="1"/>
   </OS_2>
 
   <hmtx>
______________ IntegrationTest.test_compileVariableCFF2s[defcon] _______________
self = <tests.integration_test.IntegrationTest object at 0x3ffba03fca0>
designspace_v5 = <fontTools.designspaceLib.DesignSpaceDocument object at 0x3ffb999d630>
    def test_compileVariableCFF2s(self, designspace_v5):
        fonts = compileVariableCFF2s(designspace_v5)
    
        # NOTE: Test dumps were generated like this:
        # for k, font in fonts.items():
        #     font.recalcTimestamp = False
        #     font["head"].created, font["head"].modified = 3570196637, 3601822698
        #     font["head"].checkSumAdjustment = 0x12345678
        #     font.saveXML(f"tests/data/DSv5/{k}-CFF2.ttx")
    
        assert set(fonts.keys()) == {
            "MutatorSansVariable_Weight_Width",
            "MutatorSansVariable_Weight",
            "MutatorSansVariable_Width",
            "MutatorSerifVariable_Width",
        }
        # The STAT table is set to [SRIF=0, wght=[300, 700], wdth=[50, 200]] + S1 + S2
>       expectTTX(
            fonts["MutatorSansVariable_Weight_Width"],
            "DSv5/MutatorSansVariable_Weight_Width-CFF2.ttx",
        )
tests/integration_test.py:432: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
font = <fontTools.ttLib.ttFont.TTFont object at 0x3ffb93c5b70>
expectedTTX = 'DSv5/MutatorSansVariable_Weight_Width-CFF2.ttx', tables = None
    def expectTTX(font, expectedTTX, tables=None):
        with open(getpath(expectedTTX), encoding="utf-8") as f:
            expected = readLines(f)
        font.recalcTimestamp = False
        font["head"].created, font["head"].modified = 3570196637, 3601822698
        font["head"].checkSumAdjustment = 0x12345678
        f = io.StringIO()
        font.saveXML(f, tables=tables)
    
        actual = readLines(f)
        if actual != expected:
            for line in difflib.unified_diff(
                expected, actual, fromfile=expectedTTX, tofile="<generated>"
            ):
                sys.stderr.write(line)
>           pytest.fail("TTX output is different from expected")
E           Failed: TTX output is different from expected
tests/integration_test.py:73: Failed
----------------------------- Captured stderr call -----------------------------
--- DSv5/MutatorSansVariable_Weight_Width-CFF2.ttx
+++ <generated>
@@ -107,7 +107,7 @@
     <sCapHeight value="700"/>
     <usDefaultChar value="0"/>
     <usBreakChar value="32"/>
-    <usMaxContext value="0"/>
+    <usMaxContext value="1"/>
   </OS_2>
 
   <hmtx>
______________ IntegrationTest.test_compileVariableTTFs[ufoLib2] _______________
self = <tests.integration_test.IntegrationTest object at 0x3ffba03fc00>
designspace_v5 = <fontTools.designspaceLib.DesignSpaceDocument object at 0x3ffb9cf6350>
    def test_compileVariableTTFs(self, designspace_v5):
        fonts = compileVariableTTFs(designspace_v5)
    
        # NOTE: Test dumps were generated like this:
        # for k, font in fonts.items():
        #     font.recalcTimestamp = False
        #     font["head"].created, font["head"].modified = 3570196637, 3601822698
        #     font["head"].checkSumAdjustment = 0x12345678
        #     font.saveXML(f"tests/data/DSv5/{k}-TTF.ttx")
    
        assert set(fonts.keys()) == {
            "MutatorSansVariable_Weight_Width",
            "MutatorSansVariable_Weight",
            "MutatorSansVariable_Width",
            "MutatorSerifVariable_Width",
        }
        # The STAT table is set to [SRIF=0, wght=[300, 700], wdth=[50, 200]] + S1 + S2
>       expectTTX(
            fonts["MutatorSansVariable_Weight_Width"],
            "DSv5/MutatorSansVariable_Weight_Width-TTF.ttx",
        )
tests/integration_test.py:395: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
font = <fontTools.ttLib.ttFont.TTFont object at 0x3ffb9a4a350>
expectedTTX = 'DSv5/MutatorSansVariable_Weight_Width-TTF.ttx', tables = None
    def expectTTX(font, expectedTTX, tables=None):
        with open(getpath(expectedTTX), encoding="utf-8") as f:
            expected = readLines(f)
        font.recalcTimestamp = False
        font["head"].created, font["head"].modified = 3570196637, 3601822698
        font["head"].checkSumAdjustment = 0x12345678
        f = io.StringIO()
        font.saveXML(f, tables=tables)
    
        actual = readLines(f)
        if actual != expected:
            for line in difflib.unified_diff(
                expected, actual, fromfile=expectedTTX, tofile="<generated>"
            ):
                sys.stderr.write(line)
>           pytest.fail("TTX output is different from expected")
E           Failed: TTX output is different from expected
tests/integration_test.py:73: Failed
----------------------------- Captured stderr call -----------------------------
--- DSv5/MutatorSansVariable_Weight_Width-TTF.ttx
+++ <generated>
@@ -121,7 +121,7 @@
     <sCapHeight value="700"/>
     <usDefaultChar value="0"/>
     <usBreakChar value="32"/>
-    <usMaxContext value="0"/>
+    <usMaxContext value="1"/>
   </OS_2>
 
   <hmtx>
______________ IntegrationTest.test_compileVariableCFF2s[ufoLib2] ______________
self = <tests.integration_test.IntegrationTest object at 0x3ffba03fd40>
designspace_v5 = <fontTools.designspaceLib.DesignSpaceDocument object at 0x3ffba198d70>
    def test_compileVariableCFF2s(self, designspace_v5):
        fonts = compileVariableCFF2s(designspace_v5)
    
        # NOTE: Test dumps were generated like this:
        # for k, font in fonts.items():
        #     font.recalcTimestamp = False
        #     font["head"].created, font["head"].modified = 3570196637, 3601822698
        #     font["head"].checkSumAdjustment = 0x12345678
        #     font.saveXML(f"tests/data/DSv5/{k}-CFF2.ttx")
    
        assert set(fonts.keys()) == {
            "MutatorSansVariable_Weight_Width",
            "MutatorSansVariable_Weight",
            "MutatorSansVariable_Width",
            "MutatorSerifVariable_Width",
        }
        # The STAT table is set to [SRIF=0, wght=[300, 700], wdth=[50, 200]] + S1 + S2
>       expectTTX(
            fonts["MutatorSansVariable_Weight_Width"],
            "DSv5/MutatorSansVariable_Weight_Width-CFF2.ttx",
        )
tests/integration_test.py:432: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
font = <fontTools.ttLib.ttFont.TTFont object at 0x3ffb97c5fd0>
expectedTTX = 'DSv5/MutatorSansVariable_Weight_Width-CFF2.ttx', tables = None
    def expectTTX(font, expectedTTX, tables=None):
        with open(getpath(expectedTTX), encoding="utf-8") as f:
            expected = readLines(f)
        font.recalcTimestamp = False
        font["head"].created, font["head"].modified = 3570196637, 3601822698
        font["head"].checkSumAdjustment = 0x12345678
        f = io.StringIO()
        font.saveXML(f, tables=tables)
    
        actual = readLines(f)
        if actual != expected:
            for line in difflib.unified_diff(
                expected, actual, fromfile=expectedTTX, tofile="<generated>"
            ):
                sys.stderr.write(line)
>           pytest.fail("TTX output is different from expected")
E           Failed: TTX output is different from expected
tests/integration_test.py:73: Failed
----------------------------- Captured stderr call -----------------------------
--- DSv5/MutatorSansVariable_Weight_Width-CFF2.ttx
+++ <generated>
@@ -107,7 +107,7 @@
     <sCapHeight value="700"/>
     <usDefaultChar value="0"/>
     <usBreakChar value="32"/>
-    <usMaxContext value="0"/>
+    <usMaxContext value="1"/>
   </OS_2>
 
   <hmtx>
=============================== warnings summary ===============================
tests/filters/dottedCircle_test.py::test_empty_font_deprecated[defcon]
  /builddir/build/BUILD/python-ufo2ft-3.6.0-build/BUILDROOT/usr/lib/python3.14/site-packages/ufo2ft/filters/dottedCircleFilter.py:8: UserWarning: The dottedCircleFilter module is deprecated, please import dottedCircle instead.
    warnings.warn(
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
--------------------------- snapshot report summary ----------------------------
40 snapshots passed.
=========================== short test summary info ============================
FAILED tests/integration_test.py::IntegrationTest::test_compileVariableTTFs[defcon]
FAILED tests/integration_test.py::IntegrationTest::test_compileVariableCFF2s[defcon]
FAILED tests/integration_test.py::IntegrationTest::test_compileVariableTTFs[ufoLib2]
FAILED tests/integration_test.py::IntegrationTest::test_compileVariableCFF2s[ufoLib2]


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