diff --git a/recipes/cups.toml b/recipes/cups.toml new file mode 100644 index 00000000..fee7954e --- /dev/null +++ b/recipes/cups.toml @@ -0,0 +1,65 @@ +# CUPS 2.4.19 — el servidor de impresión. Es uno de los NUEVE pendientes de PUBLICABLE +# (`docs/20-catalogo-publicable-y-completa.md`, punto 8: «cups y bluez»), no una app más. +# +# ── POR QUÉ ESTABA EN LA LISTA DE LANZAMIENTO Y NO EN LA DE APPS ────────────────────────────── +# Una distro de escritorio que no imprime no es una distro de escritorio. No es un hueco de +# catálogo (que se ve contando recetas) sino de CAPACIDAD (que sólo se ve usándola), que es la +# familia de la que salieron `foot` y las fuentes: el perfil cerraba N/N y era inusable. +# +# ⚠ Y HAY UN SEGUNDO TRAMO QUE ESTA RECETA NO PAGA. `gtk3` del corpus está sellada con +# `-Dprint_backends=file`: con cups instalado, una app GTK3 seguirá viendo un solo destino —«a +# fichero»— hasta que gtk3 se re-selle con el backend de cups. Queda escrito acá porque es +# exactamente el modo de fallo de esta distro: la pieza está, el sistema la ignora, y ninguna +# métrica lo dice. Re-sellar gtk3 es su propia unidad de trabajo (arrastra firefox). +# +# ── TARBALL DE RELEASE, NO GIT ──────────────────────────────────────────────────────────────── +# `cups-2.4.19-source.tar.gz` es un asset publicado por OpenPrinting y trae `configure`; el árbol +# de git sólo tiene `configure.ac`. Y al no ser un `/archive/` generado al vuelo por la forge, su +# sha256 no se mueve cuando GitHub actualice git/gzip (la trampa que documenta `foot`). +# +# ── LAS PERILLAS, TODAS LEÍDAS DEL `configure --help` DEL TARBALL PINEADO ───────────────────── +# --with-dnssd=no no hay `avahi` en el catálogo. Sin esto el configure lo busca y lo toma del +# sysroot del lab si lo encuentra — la fuga de siempre (el lab NO entra en +# hash_inputs). Se apaga por declaración, no por ausencia. +# --with-ondemand=no ni launchd ni systemd: el init es arje. +# --disable-shared el lab exporta LDFLAGS=-static; construir un .so con eso no cierra. +# --disable-acl `acl` está en el lab pero NO es receta del corpus. Misma razón que dnssd. +# --with-tls=openssl la receta `openssl` del corpus; gnutls no está. +# --enable-libusb impresoras USB. `libusb` SÍ es receta del corpus. +name = "cups" +version = "2.4.19" +license = "Apache-2.0" + +[source] +tarball = "https://github.com/OpenPrinting/cups/releases/download/v2.4.19/cups-2.4.19-source.tar.gz" +sha256 = "820984b12a67f98705785aae2dd1347fe0ac097828001d4583ff64574aed6389" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" + +[build.phases] +# ⚠ EL `sed` NO ES UN REMIENDO, ES LA CONSECUENCIA DE `link = "static"`. El configure de cups +# detecta que el compilador acepta `-fPIE` y mete `-fPIE -pie` en `ALL_LDFLAGS` —y SÓLO ahí: los +# objetos de `libcups.a` se compilan sin PIC—, así que lld corta con +# `relocation R_X86_64_64 cannot be used against local symbol; recompile with -fPIC`. No se puede +# apagar por flag (`@PIEFLAGS@` se sustituye dentro de Makedefs, no es una variable de make que +# `make PIEFLAGS=` pueda pisar). Y un ejecutable PIE + `-static` exigiría `-static-pie`, que no es +# lo que esta distro construye: o sea que quitarlo es lo CORRECTO acá, no un atajo. +configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-rundir=/run/cups --with-tls=openssl --with-dnssd=no --with-ondemand=no --disable-shared --enable-static --disable-acl --enable-libusb --enable-pam --with-cups-user=lp --with-cups-group=lp && sed -i "s/-fPIE -pie//" Makedefs' +compile = 'make' +install = 'make BUILDROOT=/out install' + +# `cupsd` es un demonio de sistema: se declara como servicio (SDD 30) para que el PERFIL pueda +# habilitarlo. Ojo con la lección del frente de servicios: que la receta lo declare NO lo enciende +# — sin que el perfil lo habilite, el producto sale con cups instalado y sin nadie escuchando. +[[service]] +label = "cupsd" +id = "01HQAR53D4M2NBV8KZTYXFQA29" +exec = "/usr/sbin/cupsd -f" +scope = "system" +restart = { initial_ms = 500, max_ms = 20000 } + +[deps] +build = ["zlib", "openssl", "linux-pam", "libusb", "pkgconf"]