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()
signature.asc
Description: signature

