"""Fetch and build every core ImGui native required by build-release.bat.""" import argparse import importlib.util import importlib.metadata import os from pathlib import Path import shutil import struct import subprocess import sys import sysconfig ROOT = Path(__file__).resolve().parents[1] TARGETS = ( ("windows-x86_64", "x86_64-windows-gnu", "imgui-java64.dll"), ("windows-aarch64", "aarch64-windows-gnu", "imgui-java64.dll"), ("linux-x86_64", "x86_64-linux-gnu.2.17", "libimgui-java64.so"), ("linux-aarch64", "aarch64-linux-gnu.2.17", "libimgui-java64.so"), ("macos-x86_64", "x86_64-macos.11.0", "libimgui-java64.dylib"), ("macos-aarch64", "aarch64-macos.11.0", "libimgui-java64.dylib"), ) def ensure_tools(): scripts = Path(sys.executable).parent / "Scripts" user_scheme = "nt_user" if os.name == "nt" else "posix_user" user_scripts = Path(sysconfig.get_path("scripts", scheme=user_scheme)) os.environ["PATH"] = os.pathsep.join((str(scripts), str(user_scripts), os.environ["PATH"])) missing = [tool for tool in ("cmake", "ninja") if not shutil.which(tool)] if importlib.util.find_spec("ziglang") is None or importlib.metadata.version("ziglang") != "0.16.0": missing.append("ziglang==0.16.0") if missing: subprocess.run([sys.executable, "-m", "pip", "install", "--user", *missing], check=True) for tool in ("cmake", "ninja"): if not shutil.which(tool): raise RuntimeError(f"{tool} is unavailable after installation. Add the Python Scripts directory to PATH.") def universal(slices, destination): images = [path.read_bytes() for path in slices] records = [] offset = 16384 for image in images: magic, cpu, subtype = struct.unpack_from("II", 0xCAFEBABE, len(images))) for record in records: output.write(struct.pack(">IIIII", *record)) for record, image in zip(records, images): output.seek(record[2]) output.write(image) temporary.replace(destination) def validate_native(path, platform): with path.open("rb") as library: header = library.read(64) if platform.startswith("windows-") and header[:2] == b"MZ": library.seek(struct.unpack_from("