Files
Sergio 63eab86ef7 receta: cups — el servidor de impresión, sellado (punto 8 de PUBLICABLE)
cups  b3:528b38b20d3cecf7e06fbc51f271603e3c71fbec6ef8047c86ad421edb7a1a45

No es una app más: es uno de los NUEVE pendientes de PUBLICABLE (docs/20, punto 8). Una distro de
escritorio que no imprime no es una distro de escritorio, y ese hueco no se ve contando recetas
— es de CAPACIDAD, la familia de foot y las fuentes.

El muro real fue el PIE, y el diagnóstico vale más que el arreglo: el configure 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». No se puede apagar con una flag: @PIEFLAGS@ se sustituye DENTRO de
Makedefs, no es una variable de make que «make PIEFLAGS=» pueda pisar. Y un ejecutable PIE con
-static exigiría -static-pie, que no es lo que esta distro construye ⇒ el sed que lo quita es lo
correcto acá, no un atajo.

Todas las perillas salen del «configure --help» del TARBALL PINEADO, no de un APKBUILD ajeno.
--with-dnssd=no y --disable-acl se apagan POR DECLARACIÓN aunque no haya avahi ni acl en el
catálogo: si el configure los busca y los encuentra en el sysroot del lab, el lab NO entra en
hash_inputs y el artefacto deja de reproducir sin que nadie toque la receta.

⚠ Queda escrito en la receta un segundo tramo que ESTA receta no paga: gtk3 del corpus está
sellada con -Dprint_backends=file, así que una app GTK3 seguirá viendo un solo destino hasta que
gtk3 se re-selle. La pieza está, el sistema la ignora, y ninguna métrica lo dice.

Declara [[service]] cupsd (SDD 30). Declararlo NO lo enciende: falta que el perfil lo habilite.
2026-09-12 19:28:46 +00:00

66 lines
4.3 KiB
TOML

# 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"]