From f147aab90eee9fa39e7992d7b5a0d48146a83344 Mon Sep 17 00:00:00 2001 From: Sergio Date: Thu, 27 Aug 2026 20:36:04 +0000 Subject: [PATCH] =?UTF-8?q?musl-fts:=20nueva=20receta=20=E2=80=94=20el=20f?= =?UTF-8?q?ts(3)=20que=20musl=20no=20trae?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tercera pieza del frente libdw/musl. `libdwfl` de elfutils usa fts en linux-kernel-modules.c, y dwarves necesita libdwfl. ⚠ Sus símbolos casi nunca se ENLAZAN (dwarves no llama dwfl_linux_kernel_*, así que ese objeto no sale del archive), pero el fichero tiene que COMPILAR: hace falta un real con los campos y constantes que usa. Escribir ese header a mano es fácil de hacer mal en silencio; traer la implementación real es más honesto. Se compila a mano como musl-obstack. Gotcha menor: fts.c hace `#include "config.h"` con COMILLAS (obstack.c lo hace con ÁNGULOS). --- recipes/musl-fts.toml | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 recipes/musl-fts.toml diff --git a/recipes/musl-fts.toml b/recipes/musl-fts.toml new file mode 100644 index 00000000..a7c141f1 --- /dev/null +++ b/recipes/musl-fts.toml @@ -0,0 +1,43 @@ +# musl-fts 1.2.7 — el `fts(3)` de BSD/glibc, empaquetado aparte para musl. +# +# POR QUÉ EXISTE: musl no trae `fts`, y `libdwfl` de elfutils lo usa en +# `linux-kernel-modules.c` (recorre /lib/modules). `dwarves` necesita libdwfl, así que la cadena +# entera lo arrastra. Es lo que Alpine empaqueta como `musl-fts`. Tercera pieza del frente +# libdw/musl, junto a `musl-obstack` y `argp-standalone`. +# +# ⚠ En la práctica sus símbolos casi nunca se ENLAZAN: `dwarves` no llama a `dwfl_linux_kernel_*`, +# así que ese objeto no se saca del archive. Pero el fichero tiene que COMPILAR, y para eso hace +# falta un `` de verdad con los campos (`fts_namelen`, `fts_name`, `fts_info`…) y las +# constantes (FTS_NOSTAT, FTS_LOGICAL, FTS_SKIP, FTS_F…). Escribir ese header a mano es fácil de +# hacer MAL en silencio; traer la implementación real es más honesto. +# +# Se compila a mano (sin autotools), igual que musl-obstack: es UN fichero .c. +name = "musl-fts" +version = "1.2.7" +license = "BSD-3-Clause" + +[source] +tarball = "https://github.com/void-linux/musl-fts/archive/refs/tags/v1.2.7.tar.gz" +sha256 = "49ae567a96dbab22823d045ffebe0d6b14b9b799925e9ca9274d47d26ff482a6" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" + +[build.phases] +# `fts.c` hace `#include "config.h"` (con comillas, a diferencia del de obstack que usa ángulos). +configure = "printf '%s\\n' '/* minimo para musl */' > config.h" +compile = ''' +$CC -c -O2 -fPIC -I. -D_GNU_SOURCE fts.c -o fts.o +ar rcs libfts.a fts.o +''' +install = ''' +mkdir -p /out/usr/lib /out/usr/include +cp libfts.a /out/usr/lib/ +cp fts.h /out/usr/include/ +test -f /out/usr/lib/libfts.a && test -f /out/usr/include/fts.h +''' + +[deps] +build = ["binutils"]