tawasuyu

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 1411Shell 141Markdown 84Rust 832898 Definiciones

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.

84eff794116cc679341ebb5a22e9e1a0e60abea0 · por Sergio · (hace 1 mes) · padre f147aab90 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

1 archivos · +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
 """