diff --git a/recipes/libass.toml b/recipes/libass.toml new file mode 100644 index 00000000..3dd491e9 --- /dev/null +++ b/recipes/libass.toml @@ -0,0 +1,40 @@ +# libass 0.17.5 — renderizador de subtítulos SSA/ASS. Dep DURA de mpv: su `meson.build` la pide sin +# `required:` (línea 32), o sea que no hay build de mpv sin esto. +# +# --enable-asm (default) y por eso `nasm` subió al corpus: el rasterizador de libass tiene rutas SSE2/ +# AVX2 escritas a mano, y son las que sostienen subtítulos con karaoke o tipografía pesada a 1080p sin +# comerse el frame budget. Es la parte que sí conviene pagar en assembler. +# +# libunibreak: opcional para upstream (`default=check`), obligatorio acá. Ver su receta — sin él los +# renglones se parten por espacios y el CJK queda ilegible. +# +# LAS DEPS QUE NO SE VEN EN EL `./configure` salen de los `.pc` que resuelve, y son MÁS DE LA MITAD +# de la lista: `freetype2.pc` trae `Requires: zlib, libpng`, `fontconfig.pc` trae expat, y +# `harfbuzz.pc` trae `Requires: glib-2.0` —porque la harfbuzz del corpus se construyó +# `-Dglib=enabled` para GTK4— que a su vez arrastra pcre2 y libffi. Es el patrón +# `.pc Requires` → `[deps].build` del corpus. El fallo sin ellas no dice "falta glib": dice +# «Package requirements (harfbuzz >= 1.2.3) were not met», culpando a la lib que sí está. +# +# Estática (.a) como el resto de las libs del corpus: quien la consume es un EJECUTABLE (mpv), no un +# objeto compartido, así que la regla del `.a` no-PIC no aplica acá. +name = "libass" +version = "0.17.5" +license = "ISC" + +[source] +tarball = "https://github.com/libass/libass/releases/download/0.17.5/libass-0.17.5.tar.xz" +sha256 = "2dca25c0e0c837ddf00b52011b3f82cac1e4ddd3ad018227806b0c2288864acc" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = [] + +[build.phases] +configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-shared --enable-static --enable-fontconfig --enable-libunibreak --enable-asm' +compile = 'make -j"$(nproc)"' +install = 'make DESTDIR=/out install' + +[deps] +build = ["freetype", "fribidi", "harfbuzz", "fontconfig", "libunibreak", "glib", "pcre2", "libffi", "expat", "libpng", "zlib", "nasm", "make", "pkgconf"] diff --git a/recipes/libunibreak.toml b/recipes/libunibreak.toml new file mode 100644 index 00000000..2d60f833 --- /dev/null +++ b/recipes/libunibreak.toml @@ -0,0 +1,31 @@ +# libunibreak 6.1 — algoritmos Unicode de corte de línea y de palabra (UAX #14 / UAX #29). +# Entra como dep de `libass`: sin él, libass compila igual (su configure lo prueba con +# `default=check`) pero parte los renglones de subtítulo por espacios, que es exactamente lo que no +# sirve en japonés, chino o tailandés — idiomas que no separan palabras con espacio. Es la +# diferencia entre "hay subtítulos" y "los subtítulos se leen". +# +# C plano, autotools, leaf: no depende de nada más que la libc. Tarball de release de GitHub +# (`releases/download/…`), no el `/archive/` que genera la forge al vuelo — ése cambia de sha256 +# cuando el servidor actualiza git/gzip y mata el pin sin que nadie toque la receta (ADR 0006). +# OJO con la URL: el tag usa guiones bajos (`libunibreak_6_1`) y el fichero puntos (`6.1`). +name = "libunibreak" +version = "6.1" +license = "Zlib" + +[source] +tarball = "https://github.com/adah1972/libunibreak/releases/download/libunibreak_6_1/libunibreak-6.1.tar.gz" +sha256 = "cc4de0099cf7ff05005ceabff4afed4c582a736abc38033e70fdac86335ce93f" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = [] + +[build.phases] +configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-shared --enable-static' +compile = 'make -j"$(nproc)"' +install = 'make DESTDIR=/out install' + +[deps] +build = ["make", "pkgconf"]