gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1572Shell 203Rust 109Markdown 993728 Definitions

⎇ 1505bfad7870c1893c878b4c093fec45745dd20c recipes/ffmpeg.toml TOML · 84 lines · 4.1 KB History raw

licencias: ffmpeg y LLVM salen del árbol — «lo decide un humano» era «lo decide la receta» 1505bfad7 · Sergio ·

1# ══ COPIA AL CORPUS, hash IDÉNTICO (b3:bfef7bf3…) ════════════════════════════════════
2# El original vive en `incoming-kde/` porque entró por kpipewire (grabar streams). Sube al corpus
3# porque `mpv` lo necesita y una receta del corpus no alcanza una cola hermana.
4#
5# GRATIS Y SIN DUPLICAR, medido con `hammer hash` antes de escribir esto: sus dos deps son `pkgconf`
6# y `zlib-shared`; `incoming-kde/zlib-shared.toml` y `recipes/zlib-shared.toml` son el mismo texto
7# (difieren en una línea en blanco, que no entra a `hash_inputs`) ⇒ el cierre no cambia y los dos
8# ficheros dan el MISMO ArtifactHash. Una imagen KDE con mpv adentro hidrata UN ffmpeg.
9#
10# ══ x86asm ENCENDIDA (2026-09-04) — el bloqueo que lo impedía ya no existe ══════════════════════
11# Esta receta llevó `--disable-x86asm` heredado de cuando ffmpeg entró SÓLO para kpipewire (codificar
12# un stream de escritorio, donde da igual). Para un reproductor de video es la diferencia entre
13# decodificar con SIMD y sin ella, y `mpv` lo pagaba.
14#
15# La razón para NO tocarlo era que un hash distinto dejaría DOS ffmpeg peleando por las mismas rutas
16# en una imagen KDE, y decía que el arreglo correcto era «promover una sola ffmpeg y jubilar la de la
17# cola». **Eso ya pasó: `incoming-kde/ffmpeg.toml` no existe** —hoy hay UNA sola receta ffmpeg en
18# todo el disco (`find recipes -name 'ffmpeg*.toml'`) y las recetas de la cola la resuelven por caída
19# al catálogo padre. La condición para encenderlo estaba cumplida y el comentario había envejecido
20# hacia la mentira: seguía prohibiendo por un duplicado que ya no estaba.
21#
22# Radio medido ANTES de tocar (`yupana radio ffmpeg`): 4 dependientes, los 4 sellados y ninguno
23# transitivo de más — corpus/mpv, corpus/wf-recorder, incoming-kde/kpipewire, incoming-kde/spectacle.
24# Cuatro rebuilds es el precio completo.
25#
26# `nasm` (2.16.03, sellado) pasa a `[deps].build`: sin él configure no encuentra ensamblador y
27# apagaría x86asm en silencio — que es justo el fallo que esta receta no puede permitirse, porque
28# saldría un artefacto con OTRO hash y sin la SIMD que dice traer.
29# ffmpeg 7.1 — libavcodec/libavutil/libavformat/libavfilter (+swscale/swresample). Campaña KDE (ADR 0011):
30# **kpipewire** los exige los cuatro REQUIRED (`pkg_check_modules(AVCodec ... libavcodec REQUIRED)` etc.)
31# para KPipeWireRecord (grabar streams a fichero), y spectacle linkea K::KPipeWireRecord duro.
32#
33# ffmpeg NO usa autotools: trae su propio `configure` con --cc/--ar/--nm/--ranlib. Se le pasan wrappers de
34# UN SOLO TOKEN (`$PWD/.zwrap/*`): un `--ar="zig ar"` con espacio se ejecutaría como un binario único
35# (mismo gotcha que el AR de los crates `cc` en las recetas Rust).
36#
37# **--disable-autodetect** es clave para el determinismo: sin él, configure escanea el sandbox y activa
38# libs a discreción. Con él, ffmpeg queda auto-contenido (sus códecs nativos, sin x264/x265/vpx/etc.).
39# Sin programas (ffmpeg/ffplay/ffprobe) ni doc: kpipewire sólo consume las libs.
40name    = "ffmpeg"
41version = "7.1"
42license = "LGPL-2.1-or-later"
43
44[source]
45tarball = "https://ffmpeg.org/releases/ffmpeg-7.1.tar.xz"
46sha256  = "40973d44970dbc83ef302b0609f2e74982be2d85916dd2ee7472d30678a7abe6"
47
48[build]
49compiler = "zig-cc"
50target   = "x86_64-linux-musl"
51link     = "dynamic"
52flags    = []
53
54[build.phases]
55configure = '''
56ZW="$PWD/.zwrap"; mkdir -p "$ZW"
57cat > "$ZW/cc" <<'W'
58#!/bin/sh
59exec /opt/zig/zig cc -mcpu=baseline "$@"
60W
61cat > "$ZW/cxx" <<'W'
62#!/bin/sh
63exec /opt/zig/zig c++ -mcpu=baseline "$@"
64W
65cat > "$ZW/ar" <<'W'
66#!/bin/sh
67exec /opt/zig/zig ar "$@"
68W
69cat > "$ZW/ranlib" <<'W'
70#!/bin/sh
71exec /opt/zig/zig ranlib "$@"
72W
73chmod +x "$ZW/cc" "$ZW/cxx" "$ZW/ar" "$ZW/ranlib"
74./configure --prefix=/usr \
75  --cc="$ZW/cc" --cxx="$ZW/cxx" --ar="$ZW/ar" --ranlib="$ZW/ranlib" \
76  --enable-shared --disable-static \
77  --disable-autodetect --disable-doc --disable-programs --disable-debug \
78  --x86asmexe=nasm
79'''
80compile = 'make -j"$(nproc)"'
81install = "make DESTDIR=/out install"
82
83[deps]
84build = ["pkgconf", "zlib-shared", "nasm"]