diff --git a/recipes/incoming-wlr/hwdata.toml b/recipes/incoming-wlr/hwdata.toml new file mode 100644 index 00000000..e8cc8ced --- /dev/null +++ b/recipes/incoming-wlr/hwdata.toml @@ -0,0 +1,24 @@ +# hwdata 0.393 — bases de datos de IDs de hardware (pnp.ids, pci.ids, usb.ids) + hwdata.pc. Sin código: +# sólo datos. Campaña KDE (ADR 0011): lo exige libdisplay-info en tiempo de build (dependency('hwdata') +# native → pkgdatadir/pnp.ids) y kwin como RUNTIME (find_package(hwdata) TYPE RUNTIME, tabla PNP de EDID). +# `configure` es un script shell propio (no autoconf); no compila nada. +name = "hwdata" +version = "0.393" + +[source] +tarball = "https://github.com/vcrhonek/hwdata/archive/refs/tags/v0.393.tar.gz" +sha256 = "322add86944680e99d04468d49de180a7ce0c77fb406f7abde8ab14f2d161051" + +[build] +compiler = "gcc" +target = "x86_64-linux-musl" +link = "dynamic" +flags = [] + +[build.phases] +configure = './configure --prefix=/usr --libdir=/usr/lib --datadir=/usr/share' +compile = 'true' +install = 'make install DESTDIR=/out' + +[deps] +build = ["pkgconf"] diff --git a/recipes/incoming-wlr/libdisplay-info.toml b/recipes/incoming-wlr/libdisplay-info.toml new file mode 100644 index 00000000..30b2fbc1 --- /dev/null +++ b/recipes/incoming-wlr/libdisplay-info.toml @@ -0,0 +1,25 @@ +# libdisplay-info 0.2.0 — parseo de EDID/DisplayID (libdisplay-info.so). Campaña KDE (ADR 0011): sustrato +# de kwin (pkg_check_modules(libdisplay-info>=0.2.0) REQUIRED, lectura de EDID de los monitores). Meson. +# En build necesita pnp.ids: usa dependency('hwdata') native → si no está, cae a /usr/share/hwdata/pnp.ids +# y meson `files()` EXIGE que exista ⇒ hwdata es dep de build. Sin di-edid-decode (tool) para evitar más deps. +name = "libdisplay-info" +version = "0.2.0" +license = "MIT" + +[source] +tarball = "https://gitlab.freedesktop.org/emersion/libdisplay-info/-/archive/0.2.0/libdisplay-info-0.2.0.tar.gz" +sha256 = "f7331fcaf5527251b84c8fb84238d06cd2f458422ce950c80e86c72927aa8c2b" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" +zig_version = "0.13.0" + +[build.phases] +configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/share/pkgconfig meson setup output --prefix=/usr --buildtype=release" +compile = "ninja -C output" +install = "DESTDIR=/out ninja -C output install" + +[deps] +build = ["meson", "samurai", "python3", "pkgconf", "hwdata"] diff --git a/recipes/incoming-wlr/wlroots.toml b/recipes/incoming-wlr/wlroots.toml new file mode 100644 index 00000000..c144d351 --- /dev/null +++ b/recipes/incoming-wlr/wlroots.toml @@ -0,0 +1,82 @@ +# wlroots 0.18.2 — la biblioteca de la que cuelgan casi todos los compositores Wayland ligeros +# (sway, labwc, river, hyprland…). Es el DESBLOQUEO del frente de WMs ligeros: sin ella no hay +# ninguno, y con ella los compositores son baratos porque no traen torre de C debajo. +# +# ── POR QUÉ ESTA COLA APARTE (`incoming-wlr/`) ────────────────────────────────────────────────── +# Otro agente comparte este repo, así que el frente nuevo va en cola AISLADA y nunca se hace +# `git add -A`. Y como la resolución de deps es HERMANO→PADRE, una receta de acá ve `recipes/` (el +# corpus) pero NO ve `recipes/incoming-gnome/`. `libdisplay-info` y `hwdata` sólo existen en las +# colas de escritorio ⇒ se copian como hermanas. **No es duplicar trabajo**: los ficheros son +# idénticos, así que el ArtifactHash es el mismo y el build hace cache-hit — verificado, ambos dan +# el mismo `b3:` que su original en incoming-gnome. +# +# ── LA FUENTE: tarball de RELEASE, no el `-/archive/` autogenerado ───────────────────────────── +# Mismo criterio que `wlr-randr` y `wayland-protocols`: los archivos que GitLab genera al vuelo no +# son estables byte a byte en el tiempo, así que un sha256 pineado sobre ellos se rompe solo. El de +# release está firmado por el proyecto y no cambia. sha256 medido con curl|sha256sum. +# +# ── LAS OPCIONES, VERIFICADAS CONTRA EL meson_options.txt DE 0.18.2 ──────────────────────────── +# Comprobadas una a una en el tarball, no de memoria — porque una opción `-D` inventada NO se ignora: +# meson aborta en la primera desconocida y la receta ni llega a configurar. (Es exactamente lo que +# tenía muerta a `gnome-session`, que pasaba `-Dsystemd=false` cuando esa opción no existe en 48.0.) +# Las diez opciones reales son: xcb-errors · xwayland · examples · icon_directory · renderers · +# backends · allocators · session · color-management · libliftoff. +# +# -Dxwayland=disabled la distro es Wayland PURA; X11 es una de las tres deudas aparcadas por +# diseño del frente GNOME y no vamos a traerla por la puerta de atrás. +# -Dxcb-errors=disabled corolario de lo anterior (es una lib de diagnóstico de XCB). +# -Dbackends=drm,libinput sin el backend `x11`, que sólo sirve para correr el compositor DENTRO +# de una sesión X11 — justo lo que no tenemos. Quedan DRM (metal) y libinput. +# -Drenderers=gles2 mesa nos da `glesv2.pc` y `egl.pc`. Vulkan exigiría el loader y las +# cabeceras, que son otro frente; el renderer GLES2 es el camino probado. +# -Dallocators=gbm mesa nos da `gbm.pc`. +# -Dsession=enabled libseat, que viene de `seatd` — sin esto no hay forma de tomar el DRM +# master sin ser root, que es como arranca un compositor en metal. +# -Dexamples=false son binarios de demo; no van a una imagen. +# -Dlibliftoff=disabled overlays de plano de hardware, opcional y una dep más. +# -Dcolor-management=disabled gestión de color; opcional en 0.18 y arrastra dependencias que +# todavía no hacen falta para «que un WM ligero arranque». +# -Dwerror=false NO es pereza, es una diferencia de TOOLCHAIN. wlroots compila con -Werror y +# upstream lo valida con gcc; nuestro `zig cc` es clang, que avisa de cosas +# que gcc calla. Medido: muere en `types/wlr_shm.c:503` con +# `-Werror,-Wunused-but-set-variable` sobre `has_argb8888`/`has_xrgb8888` — +# código correcto que sólo clang señala. Tratar los avisos de OTRO compilador +# como errores del proyecto es un fallo de método, no un hallazgo de calidad. +# (`werror` es opción universal de meson, no de wlroots.) +# +# ── `-Ddefault_library=both` ─────────────────────────────────────────────────────────────────── +# Igual que libinput y pixman: meson produciría sólo `.so` y los consumidores (sway, labwc…) +# enlazan estático. Con `both` salen las dos y cada consumidor toma la que necesita. +# +# ── deps: la lección del `.pc Requires` ──────────────────────────────────────────────────────── +# `libffi`, `expat` y `zlib` NO los usa wlroots directamente: los exigen los `.pc` de wayland y mesa +# en su línea `Requires`, y pkgconf resuelve el grafo de `.pc` COMPLETO antes de emitir un cflag. +# Omitirlos da un error que culpa a wayland o a mesa, que son inocentes. Ver `wlr-randr`, donde el +# síntoma fue «Package 'libffi', required by 'wayland-client', not found». +# `python3` va porque **meson es un script de Python**: sin intérprete, exit 127 que se lee como +# «meson no está» cuando meson sí está. + +name = "wlroots" +version = "0.18.2" +license = "MIT" + +[source] +tarball = "https://gitlab.freedesktop.org/wlroots/wlroots/-/releases/0.18.2/downloads/wlroots-0.18.2.tar.gz" +sha256 = "cf776c169169f279808d9eabc6583f484338dcd454c966a285ff178c88c105d4" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" +zig_version = "0.13.0" + +[build.phases] +configure = "meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Dwerror=false -Ddefault_library=both -Dexamples=false -Dxwayland=disabled -Dxcb-errors=disabled -Dbackends=drm,libinput -Drenderers=gles2 -Dallocators=gbm -Dsession=enabled -Dlibliftoff=disabled -Dcolor-management=disabled" +compile = "ninja -C output" +install = "DESTDIR=/out ninja -C output install" + +[deps] +build = ["meson", "samurai", "python3", "pkgconf", "wayland", "wayland-protocols", "libdrm", + "libxkbcommon", "pixman", "mesa", "libinput", "seatd", "libudev-zero", "libevdev", + "mtdev", "libdisplay-info", "hwdata", "libffi", "expat", "zlib"] +run = ["wayland", "libdrm", "libxkbcommon", "pixman", "mesa", "libinput", "seatd"]