- repo-selfcontain.py: work/repo-kde auto-contenido (alias qt-corto→qt6-* + cierre base desde dist/repo), re-firmado 884 pkgs, repo verify trusted. - hydrate-fhs.sh: hidrata el cierre runtime instalando cada pkg del cierre en el mismo prefix (install --prefix sólo baja el pkg pedido); 32 pkgs → work/kde-rootfs, 455 .so (libQt6Core/Gui/Qml/Quick + QPA offscreen + mesa/xcb/wayland/openssl). - h-qml-run.sh + h-qml-test.cpp: QQmlApplicationEngine carga QtQuick Window+Text, compila zig-cc/musl contra el FHS, corre offscreen rc=0 (engine instancia el árbol QML). - ADR 0011: sección resultado H-QML + deudas (target_bin espurio en libs, cache-miss por re-resolución de deps → qtbase más completo con SSL, fuentes). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
69 lines
2.6 KiB
Python
69 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
"""repo-selfcontain.py — vuelve el repo KDE AUTO-CONTENIDO para hidratar por `install`.
|
|
|
|
`install` lee los `depends` del recipe embebido en cada `.swm` y resuelve cada nombre como
|
|
CLAVE del índice. El repo KDE cosechado (work/repo-kde) no cierra:
|
|
1. deps a nombres de receta-archivo qt-cortos (`qtbase`) cuando el paquete es `qt6-qtbase`.
|
|
2. faltan libs base del cierre (libffi/libpng/gperf/mako/markupsafe/packaging y su cierre).
|
|
|
|
Este script, SIN re-buildear nada:
|
|
- trae de dist/repo (repo base firmado, cierre completo) todo paquete cuyo nombre no esté ya
|
|
en el repo KDE (colisión → gana la versión KDE), copiando su `.swm`.
|
|
- agrega entradas ALIAS qt-corto→qt6-* (mismo `.swm`, otra clave de índice).
|
|
El índice resultante se re-firma aparte con `hammer repo sign`.
|
|
"""
|
|
import json, shutil, sys
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
KDE = ROOT / "work/repo-kde"
|
|
BASE = ROOT / "dist/repo"
|
|
|
|
kde_idx = json.loads((KDE / "index.json").read_text())
|
|
base_idx = json.loads((BASE / "index.json").read_text())
|
|
|
|
kde_pkgs = kde_idx["packages"]
|
|
kde_names = {p["name"] for p in kde_pkgs}
|
|
base_by_name = {p["name"]: p for p in base_idx["packages"]}
|
|
|
|
added_base, copied, aliases = [], 0, []
|
|
|
|
# 1) traer del repo base todo lo que el KDE no tenga (colisión → gana KDE)
|
|
for name, entry in base_by_name.items():
|
|
if name in kde_names:
|
|
continue
|
|
src = BASE / entry["file"]
|
|
if not src.exists():
|
|
continue
|
|
dst = KDE / entry["file"]
|
|
if not dst.exists():
|
|
shutil.copy2(src, dst); copied += 1
|
|
kde_pkgs.append(entry)
|
|
kde_names.add(name)
|
|
added_base.append(name)
|
|
|
|
# 2) aliases qt-corto → qt6-* (misma .swm, clave de índice distinta)
|
|
by_name = {p["name"]: p for p in kde_pkgs}
|
|
for p in list(kde_pkgs):
|
|
n = p["name"]
|
|
if n.startswith("qt6-qt"):
|
|
short = n[len("qt6-"):] # qt6-qtbase -> qtbase
|
|
if short not in kde_names:
|
|
alias = dict(p); alias["name"] = short
|
|
kde_pkgs.append(alias); kde_names.add(short); aliases.append(short)
|
|
|
|
kde_idx["packages"] = kde_pkgs
|
|
(KDE / "index.json").write_text(json.dumps(kde_idx, indent=None))
|
|
|
|
print(f"base traídos: {len(added_base)} ({copied} .swm copiados)")
|
|
print(f"aliases qt: {len(aliases)} -> {' '.join(sorted(aliases))}")
|
|
print(f"total índice: {len(kde_pkgs)} entradas")
|
|
|
|
# 3) chequeo de cierre: cada dep declarado en el índice ahora resuelve
|
|
missing = set()
|
|
for p in kde_pkgs:
|
|
for d in p.get("deps", []):
|
|
if d not in kde_names:
|
|
missing.add(d)
|
|
print(f"deps del índice sin resolver: {len(missing)} {sorted(missing) if missing else ''}")
|