elfutils-libdw: construir también libdwfl (dwarves lo necesita)
dwarves llama a 15 `dwfl_*` distintas desde dwarf_loader.c, así que libdw sola no alcanza. libdwfl SÍ arrastra argp (argp-std.c) y fts (linux-kernel-modules.c) ⇒ la receta declara `argp-standalone` y `musl-fts`. Esos objetos casi nunca se enlazan (dwarves no usa dwfl_standard_argp ni dwfl_linux_kernel_*) pero tienen que COMPILAR. Dos cosas que costaron: · libdwfl no se puede construir suelto: su Makefile lee los .manifest de otros subdirs. Hay que seguir el orden de SUBDIRS del raíz: lib → libelf → libcpu → backends → libebl → libdwelf → libdw → libdwfl. · `rm -f compat/argp.h`: el shim de la canónica es sólo tipos/decls y no declara `argp_failure`, que usa argp-std.c. Como esta variante trae argp de verdad, hay que BORRAR el shim para que gane el /usr/include/argp.h real — `-I$PWD/compat` va primero y si no lo tapa.
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
1 archivos · +19 −5
- recipes/elfutils-libdw.toml +19 −5
diff --git a/recipes/elfutils-libdw.toml b/recipes/elfutils-libdw.toml
index d4ca9229..27c6221f 100644
--- a/recipes/elfutils-libdw.toml
+++ b/recipes/elfutils-libdw.toml
@@ -33,8 +33,14 @@
# · `obstack` → en `libdw/` aparece UNA vez y es **dentro de un COMENTARIO** de `libdwP.h`:
# elfutils lleva su propia «simplified thread-local reimplementation of obstacks» y NO incluye
# `<obstack.h>` en ningún sitio de libdw.
-# ⇒ construir `libdw` no necesita ni argp ni fts ni obstack de verdad; los stubs de `compat/` que
-# ya monta la fase configure siguen bastando.
+# ⇒ `libdw` a secas no necesita ni argp ni fts ni obstack de verdad.
+#
+# ⚠ PERO `dwarves` SÍ necesita `libdwfl` (llama a 15 `dwfl_*` distintas desde `dwarf_loader.c`), y
+# libdwfl sí arrastra los dos: `argp-std.c` usa argp y `linux-kernel-modules.c` usa fts. Por eso
+# esta receta declara `argp-standalone` y `musl-fts`: no por libdw, por libdwfl.
+# En la práctica esos objetos casi nunca se ENLAZAN (dwarves no usa `dwfl_standard_argp` ni
+# `dwfl_linux_kernel_*`), pero tienen que COMPILAR, y para eso hacen falta `<argp.h>` y `<fts.h>`
+# de verdad — el `compat/` de la canónica trae un argp.h de mentira y NINGÚN fts.h.
#
name = "elfutils-libdw"
version = "0.194"
@@ -50,7 +56,7 @@ link = "dynamic"
zig_version = "0.13.0"
[deps]
-build = ["binutils"]
+build = ["binutils", "argp-standalone", "musl-fts"]
[build.phases]
configure = """
@@ -137,7 +143,11 @@ CFLAGS="-O2 -g -I$PWD/compat" CPPFLAGS="-I$PWD/compat" LDFLAGS="-L$PWD/compat" \
# El -include del shim de rawmemchr va SÓLO en compile (en configure rompe el test "undeclared builtins"
# de autoconf). CFLAGS aquí reemplaza el de configure (mismo valor + el -include); AM_CFLAGS (warnings/
# -Werror) se preserva.
-compile = "make -C lib CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libelf libelf.a libelf.so CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libdw libdw.a CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\""
+# ⚠ `rm -f compat/argp.h`: el shim de la canónica es sólo tipos/decls y NO declara
+# `argp_failure`, que usa `libdwfl/argp-std.c`. Esta variante SÍ trae argp de verdad
+# (`argp-standalone`), así que se borra el shim para que gane el `/usr/include/argp.h` real —
+# `-I$PWD/compat` va primero y si no lo taparía.
+compile = "rm -f compat/argp.h && make -C lib CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libelf libelf.a libelf.so CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libcpu CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C backends CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libebl CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libdwelf CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libdw libdw.a CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\" && make -C libdwfl libdwfl.a CFLAGS=\"-O2 -g -I$PWD/compat -include $PWD/compat/musl-extra.h\""
install = """
mkdir -p /out/usr/lib/pkgconfig /out/usr/include && \
cp -a libelf/libelf.a libelf/libelf.so* /out/usr/lib/ && \
@@ -146,7 +156,11 @@ cp -a config/libelf.pc /out/usr/lib/pkgconfig/ 2>/dev/null || true
mkdir -p /out/usr/include/elfutils
cp -a libdw/libdw.a /out/usr/lib/
cp -a libdw/dwarf.h libdw/libdw.h libdw/known-dwarf.h /out/usr/include/
+cp -a libdwfl/libdwfl.h /out/usr/include/
+cp -a libdw/libdw.a libdwfl/libdwfl.a /out/usr/lib/
cp -a libdw/libdw.h libdw/known-dwarf.h /out/usr/include/elfutils/
+cp -a libdwfl/libdwfl.h /out/usr/include/elfutils/
+cp -a version.h /out/usr/include/elfutils/ 2>/dev/null || true
cp -a config/libdw.pc /out/usr/lib/pkgconfig/ 2>/dev/null || true
-test -f /out/usr/lib/libdw.a && test -f /out/usr/include/dwarf.h && test -f /out/usr/include/libdw.h
+test -f /out/usr/lib/libdw.a && test -f /out/usr/include/dwarf.h && test -f /out/usr/include/libdw.h && test -f /out/usr/lib/libdwfl.a && test -f /out/usr/include/elfutils/libdwfl.h
"""