Control: tag -1 + patch

Hi,

On Mon, 23 Mar 2026 11:54:24 +0000 Santiago Vila <[email protected]> wrote:
> kotlinc scripts/GenerateNLVersion.kt -d scripts/GenerateNLVersion.jar
> OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify were 
> deprecated in JDK 13 and will likely be removed in a future release.
> WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
> WARNING: sun.misc.Unsafe::objectFieldOffset has been called by 
> com.intellij.util.containers.ConcurrentIntObjectHashMap
> WARNING: Please consider reporting this to the maintainers of class 
> com.intellij.util.containers.ConcurrentIntObjectHashMap
> WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future 
> release
> exception: java.lang.ExceptionInInitializerError
> ...

this currently fails because of kotlin. In [email protected] I was told by
Emmanuel Bourg [1] that using kotlin here "remains a risk" because:

> Because the future of Kotlin in Debian is uncertain. We are stuck with the
> version 1.3.31 and we don't know how long we'll able to maintain it.

So while we could also wait for kotlin in Debian to get fixed, I offer an
alternative solution to this bug: rewrite scripts/GenerateNLVersion.kt in
something that is not kotlin. At the end of this mail, please find a Python
script which does the same as the kotlin script in a third of the lines of
code. It also means you can drop the Build-Depends on kotlin.

What do you think?

Thanks!

cheers, josch

[1] https://lists.debian.org/debian-java/2026/07/msg00000.html

#!/usr/bin/env python3
# Copyright 2026 Johannes Schauer Marin Rodrigues <[email protected]>
# SPDX-License-Identifier: GPL-3.0-or-later

from pathlib import Path
import subprocess

# we don't use xml.etree.ElementTree because it does not preserve comments
import lxml.etree as ET
import os, sys


def main():
    for p in sorted(Path("./fonts/ttf/").glob("JetBrainsMono-*.ttf")):
        print(p, file=sys.stderr)
        ttxp = p.with_suffix(".ttx")
        if ttxp.exists():
            ttxp.unlink()
        subprocess.check_call(["ttx", p])
        document = ET.parse(ttxp)
        root = document.getroot()
        root.remove(root.find("GPOS"))
        root.remove(root.find("GSUB"))
        for ppath, ename in [
            ("GlyphOrder", "GlyphID"),
            ("glyf", "TTGlyph"),
            ("hmtx", "mtx"),
            ("post/extraNames", "psName"),
        ]:
            parent = root.find(ppath)
            for child in parent.findall(ename):
                if child.attrib["name"].endswith(".liga"):
                    parent.remove(child)
        for el in root.findall("name/namerecord"):
            if "trademark" in el.text:
                continue
            el.text = el.text.replace("JetBrains Mono", "JetBrains Mono NL")
            el.text = el.text.replace("JetBrainsMono", "JetBrainsMonoNL")
        NLttfp = p.with_stem(p.stem.replace("JetBrainsMono", "JetBrainsMonoNL"))
        if NLttfp.exists():
            NLttfp.unlink()
        NLttxp = NLttfp.with_suffix(".ttx")
        document.write(NLttxp, xml_declaration=True, encoding="UTF-8", 
standalone=False)
        sde = os.environ.get("SOURCE_DATE_EPOCH")
        if sde is not None:
            os.utime(NLttxp, (int(sde), int(sde)))
        subprocess.check_call(["ttx", NLttxp])
        NLttxp.unlink()
        ttxp.unlink()


if __name__ == "__main__":
    main()

Attachment: signature.asc
Description: signature

Reply via email to